Submit
Path:
~
/
home
/
getwphos
/
www
/
deerguard
/
wp-content
/
plugins
/
wp-security-audit-log
/
classes
/
WPSensors
/
File Content:
class-woocommerce-sensor-helper.php
<?php /** * Sensor: WooCommerce * * WooCommerce sensor file. * * @package Wsal */ declare(strict_types=1); namespace WSAL\WP_Sensors_Helpers; use WSAL\Controllers\Alert_Manager; use WSAL\WP_Sensors\WooCommerce_Sensor; use WSAL\WP_Sensors\Helpers\Woocommerce_Helper; // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( '\WSAL\Plugin_Sensors\WooCommerce_Sensor_Helper' ) ) { /** * Support for WooCommerce Plugin. * * @package Wsal */ class WooCommerce_Sensor_Helper { /** * Is Event 9016 Logged? * * @since 3.3.1 * * @var array */ private static $last_9016_type = array(); /** * Trigger events 9003 * * @param array $old_cats - Old Categories. * @param array $new_cats - New Categories. * @param object $oldpost - Old product object. * @param object $newpost - New product object. * @return int * * @since 4.6.0 */ public static function check_categories_change( $old_cats, $new_cats, $oldpost, $newpost ) { if ( 'trash' === $newpost->post_status || 'trash' === $oldpost->post_status ) { return 0; } $old_cats = is_array( $old_cats ) ? implode( ', ', $old_cats ) : $old_cats; $new_cats = is_array( $new_cats ) ? implode( ', ', $new_cats ) : $new_cats; if ( ! empty( $old_cats ) && $old_cats !== $new_cats ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $newpost ); Alert_Manager::trigger_event( 9003, array( 'ProductTitle' => sanitize_text_field( $newpost->post_title ), 'ProductStatus' => sanitize_text_field( $newpost->post_status ), 'PostStatus' => sanitize_text_field( $newpost->post_status ), 'PostID' => esc_attr( $newpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $newpost->ID ) ), 'OldCategories' => $old_cats ? sanitize_text_field( $old_cats ) : __( 'no categories', 'wp-security-audit-log' ), 'NewCategories' => $new_cats ? sanitize_text_field( $new_cats ) : __( 'no categories', 'wp-security-audit-log' ), $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9004 * * @param object $oldpost - Old product object. * @param object $newpost - New product object. * @return int * * @since 4.6.0 */ public static function check_short_description_change( $oldpost, $newpost ) { if ( 'auto-draft' === $oldpost->post_status ) { return 0; } if ( $oldpost->post_excerpt !== $newpost->post_excerpt ) { if ( 'product' === $newpost->post_type ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event( 9004, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldDescription' => $oldpost->post_excerpt, 'NewDescription' => $newpost->post_excerpt, $editor_link['name'] => $editor_link['value'], ) ); return 1; } elseif ( 'shop_coupon' === $newpost->post_type ) { $coupon_data = WooCommerce_Sensor::get_coupon_event_data( $newpost ); $coupon_data['OldDescription'] = $oldpost->post_excerpt; $coupon_data['NewDescription'] = $newpost->post_excerpt; Alert_Manager::trigger_event( 9069, $coupon_data ); return 1; } } return 0; } /** * Trigger events 9005 * * @param object $oldpost - Old product object. * @param object $newpost - New product object. * @return int * * @since 4.6.0 */ public static function check_text_change( $oldpost, $newpost ) { if ( 'auto-draft' === $oldpost->post_status ) { return 0; } if ( $oldpost->post_content !== $newpost->post_content ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event( 9005, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9006 * * @param string $old_link - Old product link. * @param string $new_link - New product link. * @param object $post - Product object. * * @return int * * @since 4.6.0 */ public static function check_permalink_change( $old_link, $new_link, $post ) { if ( ! empty( $old_link ) && $old_link && $new_link && ( $old_link !== $new_link ) ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9006, array( 'PostID' => esc_attr( $post->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post->ID ) ), 'ProductTitle' => sanitize_text_field( $post->post_title ), 'ProductStatus' => sanitize_text_field( $post->post_status ), 'PostStatus' => sanitize_text_field( $post->post_status ), 'OldUrl' => $old_link, 'NewUrl' => $new_link, $editor_link['name'] => $editor_link['value'], 'ReportText' => '"' . $old_link . '"|"' . $new_link . '"', ) ); return 1; } return 0; } /** * Trigger events 9007 * * @param WP_Post $post - Product object. * * @return int * * @since 4.6.0 */ public static function check_product_type_change( $post ) { $old_type = isset( WooCommerce_Sensor::get_old_data()['type'] ) ? WooCommerce_Sensor::get_old_data()['type'] : false; $new_type = isset( WooCommerce_Sensor::get_new_data()['type'] ) ? WooCommerce_Sensor::get_new_data()['type'] : false; if ( $old_type !== $new_type ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9007, array( 'PostID' => esc_attr( $post->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post->ID ) ), 'ProductTitle' => sanitize_text_field( $post->post_title ), 'ProductStatus' => sanitize_text_field( $post->post_status ), 'PostStatus' => sanitize_text_field( $post->post_status ), 'OldType' => $old_type, 'NewType' => $new_type, $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9008 * * @param object $oldpost - Old product object. * @param object $newpost - New product object. * @return int * * @since 4.6.0 */ public static function check_date_change( $oldpost, $newpost ) { if ( 'draft' === $oldpost->post_status || 'auto-draft' === $oldpost->post_status ) { return 0; } $from = strtotime( $oldpost->post_date ); $to = strtotime( $newpost->post_date ); if ( $from !== $to ) { if ( 'shop_coupon' === $newpost->post_type ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event( 9126, array( 'CouponID' => esc_attr( $oldpost->ID ), 'CouponName' => sanitize_text_field( $oldpost->post_title ), 'CouponStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldDate' => $oldpost->post_date, 'NewDate' => $newpost->post_date, $editor_link['name'] => $editor_link['value'], ) ); return 1; } else { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event( 9008, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldDate' => $oldpost->post_date, 'NewDate' => $newpost->post_date, $editor_link['name'] => $editor_link['value'], ) ); return 1; } } return 0; } /** * Trigger events 9009 * * @param WP_Post $oldpost - Old product object. * @param WP_Post $newpost - New product object. * @return int * * @since 4.6.0 */ public static function check_visibility_change( $oldpost, $newpost ) { if ( 'draft' === WooCommerce_Sensor::get_old_status() || 'draft' === $newpost->post_status ) { return; } $old_visibility = ''; $new_visibility = ''; if ( $oldpost->post_password ) { $old_visibility = __( 'Password Protected', 'wp-security-audit-log' ); } elseif ( 'publish' === WooCommerce_Sensor::get_old_status() ) { $old_visibility = __( 'Public', 'wp-security-audit-log' ); } elseif ( 'private' === WooCommerce_Sensor::get_old_status() ) { $old_visibility = __( 'Private', 'wp-security-audit-log' ); } if ( $newpost->post_password ) { $new_visibility = __( 'Password Protected', 'wp-security-audit-log' ); } elseif ( 'publish' === $newpost->post_status ) { $new_visibility = __( 'Public', 'wp-security-audit-log' ); } elseif ( 'private' === $newpost->post_status ) { $new_visibility = __( 'Private', 'wp-security-audit-log' ); } if ( $old_visibility && $new_visibility && ( $old_visibility !== $new_visibility ) ) { if ( 'shop_coupon' === $newpost->post_type ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event( 9125, array( 'CouponID' => esc_attr( $oldpost->ID ), 'CouponCode' => sanitize_text_field( $oldpost->post_title ), 'CouponStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldVisibility' => $old_visibility, 'NewVisibility' => $new_visibility, $editor_link['name'] => $editor_link['value'], ) ); return 1; } else { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event( 9009, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldVisibility' => $old_visibility, 'NewVisibility' => $new_visibility, $editor_link['name'] => $editor_link['value'], ) ); return 1; } } return 0; } /** * Check Title Change. * * Trigger event 9071. * * @since 3.3.1 * * @param object $oldpost - Old product object. * @param object $newpost - New product object. * @return int */ public static function check_title_change( $oldpost, $newpost ) { if ( 'auto-draft' === $oldpost->post_status ) { return 0; } if ( 'shop_coupon' === $newpost->post_type && $oldpost->post_title !== $newpost->post_title ) { // Get coupon event data. $coupon_data = WooCommerce_Sensor::get_coupon_event_data( $newpost ); // Set old and new titles. $coupon_data['OldName'] = $oldpost->post_title; $coupon_data['NewName'] = $newpost->post_title; // Log the event. Alert_Manager::trigger_event( 9071, $coupon_data ); return 1; } elseif ( 'product' === $newpost->post_type && $oldpost->post_title !== $newpost->post_title ) { // Get editor link. $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $newpost ); // Log the event. Alert_Manager::trigger_event( 9077, array( 'PostID' => esc_attr( $newpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $newpost->ID ) ), 'ProductStatus' => sanitize_text_field( $newpost->post_status ), 'PostStatus' => sanitize_text_field( $newpost->post_status ), 'ProductTitle' => sanitize_text_field( $newpost->post_title ), 'OldTitle' => sanitize_text_field( $oldpost->post_title ), 'NewTitle' => sanitize_text_field( $newpost->post_title ), 'ProductUrl' => get_permalink( $newpost->ID ), $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9042 * * @since 3.3.1 * * @param WP_Post $post - Product object. * @return int */ public static function check_catalog_visibility_change( $post ) { // Get product data. $old_visibility = isset( WooCommerce_Sensor::get_old_data()['catalog_visibility'] ) ? WooCommerce_Sensor::get_old_data()['catalog_visibility'] : false; $new_visibility = isset( WooCommerce_Sensor::get_new_data()['catalog_visibility'] ) ? WooCommerce_Sensor::get_new_data()['catalog_visibility'] : false; // Get WooCommerce visibility options. $wc_visibilities = wc_get_product_visibility_options(); if ( ( $old_visibility && $new_visibility ) && ( $old_visibility !== $new_visibility ) ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9042, array( 'PostID' => esc_attr( $post->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post->ID ) ), 'ProductTitle' => sanitize_text_field( $post->post_title ), 'ProductStatus' => sanitize_text_field( $post->post_status ), 'PostStatus' => sanitize_text_field( $post->post_status ), 'OldVisibility' => isset( $wc_visibilities[ $old_visibility ] ) ? $wc_visibilities[ $old_visibility ] : false, 'NewVisibility' => isset( $wc_visibilities[ $new_visibility ] ) ? $wc_visibilities[ $new_visibility ] : false, $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9043 * * @since 3.3.1 * * @param WP_Post $post - Product object. * @return int */ public static function check_featured_product( $post ) { $old_featured = isset( WooCommerce_Sensor::get_old_data()['featured'] ) ? WooCommerce_Sensor::get_old_data()['featured'] : false; $new_featured = isset( WooCommerce_Sensor::get_new_data()['featured'] ) ? WooCommerce_Sensor::get_new_data()['featured'] : false; if ( $old_featured !== $new_featured ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9043, array( 'PostID' => esc_attr( $post->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post->ID ) ), 'ProductTitle' => sanitize_text_field( $post->post_title ), 'ProductStatus' => sanitize_text_field( $post->post_status ), 'PostStatus' => sanitize_text_field( $post->post_status ), 'EventType' => $new_featured ? 'enabled' : 'disabled', $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9044 * * @since 3.3.1 * * @param object $oldpost - Old product object. * @param string $old_backorder - Old backorder value. * @param string $new_backorder - New backorder value. * @return int */ public static function check_backorders_setting( $oldpost, $old_backorder = '', $new_backorder = '' ) { // Get product data. if ( '' === $old_backorder ) { $old_backorder = isset( WooCommerce_Sensor::get_old_data()['backorders'] ) ? WooCommerce_Sensor::get_old_data()['backorders'] : false; } if ( '' === $new_backorder ) { $new_backorder = isset( WooCommerce_Sensor::get_new_data()['backorders'] ) ? WooCommerce_Sensor::get_new_data()['backorders'] : false; } if ( $old_backorder !== $new_backorder ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event( 9044, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldStatus' => $old_backorder, 'NewStatus' => $new_backorder, $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9045 * * @since 3.3.1 * * @param object $oldpost - Old product object. * @return int */ public static function check_upsells_change( $oldpost ) { // Get product data. $old_upsell_ids = isset( WooCommerce_Sensor::get_old_data()['upsell_ids'] ) ? WooCommerce_Sensor::get_old_data()['upsell_ids'] : false; $new_upsell_ids = isset( WooCommerce_Sensor::get_new_data()['upsell_ids'] ) ? WooCommerce_Sensor::get_new_data()['upsell_ids'] : false; // Compute the difference. $added_upsells = array(); $removed_upsells = array(); if ( is_array( $new_upsell_ids ) && is_array( $old_upsell_ids ) ) { $added_upsells = array_diff( $new_upsell_ids, $old_upsell_ids ); $removed_upsells = array_diff( $old_upsell_ids, $new_upsell_ids ); } // Get editor link. $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); // Return. $return = 0; // Added upsell products. if ( ! empty( $added_upsells ) && is_array( $added_upsells ) ) { foreach ( $added_upsells as $added_upsell ) { $upsell_title = get_the_title( $added_upsell ); Alert_Manager::trigger_event( 9045, array( 'EventType' => 'added', 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'UpsellTitle' => sanitize_text_field( $upsell_title ), 'UpsellID' => sanitize_text_field( $added_upsell ), $editor_link['name'] => $editor_link['value'], ) ); } $return = 1; } // Removed upsell products. if ( ! empty( $removed_upsells ) && is_array( $removed_upsells ) ) { foreach ( $removed_upsells as $removed_upsell ) { $upsell_title = get_the_title( $removed_upsell ); Alert_Manager::trigger_event( 9045, array( 'EventType' => 'removed', 'PostID' => esc_attr( $oldpost->ID ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'UpsellTitle' => sanitize_text_field( $upsell_title ), 'UpsellID' => sanitize_text_field( $removed_upsell ), $editor_link['name'] => $editor_link['value'], ) ); } $return = 1; } return $return; } /** * Trigger events 9046 * * @since 3.3.1 * * @param object $oldpost - Old product object. * @return int */ public static function check_cross_sell_change( $oldpost ) { // Get product data. $old_cross_sell_ids = isset( WooCommerce_Sensor::get_old_data()['cross_sell_ids'] ) ? WooCommerce_Sensor::get_old_data()['cross_sell_ids'] : false; $new_cross_sell_ids = isset( WooCommerce_Sensor::get_new_data()['cross_sell_ids'] ) ? WooCommerce_Sensor::get_new_data()['cross_sell_ids'] : false; // Compute the difference. $added_cross_sells = array(); $removed_cross_sells = array(); if ( is_array( $new_cross_sell_ids ) && is_array( $old_cross_sell_ids ) ) { $added_cross_sells = array_diff( $new_cross_sell_ids, $old_cross_sell_ids ); $removed_cross_sells = array_diff( $old_cross_sell_ids, $new_cross_sell_ids ); } // Get editor link. $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); // Return. $return = 0; // Added cross-sell products. if ( ! empty( $added_cross_sells ) && is_array( $added_cross_sells ) ) { foreach ( $added_cross_sells as $added_cross_sell ) { $cross_sell_title = get_the_title( $added_cross_sell ); Alert_Manager::trigger_event( 9046, array( 'EventType' => 'added', 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'CrossSellTitle' => sanitize_text_field( $cross_sell_title ), 'CrossSellID' => sanitize_text_field( $added_cross_sell ), $editor_link['name'] => $editor_link['value'], ) ); } $return = 1; } // Removed cross-sell products. if ( ! empty( $removed_cross_sells ) && is_array( $removed_cross_sells ) ) { foreach ( $removed_cross_sells as $removed_cross_sell ) { $cross_sell_title = get_the_title( $removed_cross_sell ); Alert_Manager::trigger_event( 9046, array( 'EventType' => 'removed', 'PostID' => esc_attr( $oldpost->ID ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'CrossSellTitle' => sanitize_text_field( $cross_sell_title ), 'CrossSellID' => sanitize_text_field( $removed_cross_sell ), $editor_link['name'] => $editor_link['value'], ) ); } $return = 1; } return $return; } /** * Trigger events 9010. * * @param object $oldpost - Old product object. * @param object $newpost - New product object. * @return int * * @since 4.6.0 */ public static function check_modify_change( $oldpost, $newpost ) { if ( 'trash' === $oldpost->post_status || 'trash' === $newpost->post_status || 'auto-draft' === $oldpost->post_status ) { return 0; } // If the only change by this point is the "post_modified" time, then we really dont want // to trigger this event. $check_for_changes = array_diff( (array) $oldpost, (array) $newpost ); if ( ! empty( $check_for_changes ) && array_key_exists( 'post_modified', $check_for_changes ) ) { return 0; } // Get Yoast alerts. $yoast_alerts = Alert_Manager::get_alerts_by_category( 'Yoast SEO' ); $yoast_metabox_alerts = Alert_Manager::get_alerts_by_category( 'Yoast SEO Meta Box' ); $yoast_alerts = $yoast_alerts + $yoast_metabox_alerts; // Check all alerts. foreach ( $yoast_alerts as $alert_code => $alert ) { if ( Alert_Manager::will_or_has_triggered( $alert_code ) ) { return 0; // Return if any Yoast alert has or will trigger. } } $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event_if( 9010, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'ProductUrl' => get_post_permalink( $oldpost->ID ), $editor_link['name'] => $editor_link['value'], ), array( __CLASS__, 'do_not_detect_variation_changes_as_product_modified' ) ); } /** * Ensure 9010 does not fire for variable product changes. * * @return bool - Was triggered. * * @since 4.6.0 */ public static function do_not_detect_variation_changes_as_product_modified() { if ( Alert_Manager::will_or_has_triggered( 9016 ) || Alert_Manager::will_or_has_triggered( 9017 ) ) { return false; } return true; } /** * Moved to Trash 9012, 9037. * * @param int $post_id - Product/Order ID. * * @since 4.6.0 */ public static function event_trashed( $post_id ) { $post = wc_get_order( $post_id ); if ( false === $post ) { $post = get_post( $post_id ); } if ( empty( $post ) || ! $post instanceof \WP_Post ) { if ( ! is_a( $post, '\Automattic\WooCommerce\Admin\Overrides\Order' ) ) { return; } } if ( $post instanceof \WP_Post && 'product' === $post->post_type ) { Alert_Manager::trigger_event( 9012, array( 'PostID' => esc_attr( $post->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post->ID ) ), 'ProductTitle' => sanitize_text_field( $post->post_title ), 'ProductStatus' => sanitize_text_field( $post->post_status ), 'PostStatus' => sanitize_text_field( $post->post_status ), 'ProductUrl' => get_post_permalink( $post->ID ), ) ); } elseif ( is_a( $post, '\Automattic\WooCommerce\Admin\Overrides\Order' ) ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9037, array( 'OrderID' => esc_attr( $post->get_id() ), 'OrderTitle' => sanitize_text_field( Woocommerce_Helper::wsal_woocommerce_extension_get_order_title( $post->get_id() ) ), 'OrderStatus' => \wc_get_order_status_name( $post->get_status() ), 'OrderStatusSlug' => $post->get_status(), 'PostStatus' => 'wc-' . $post->get_status(), $editor_link['name'] => $editor_link['value'], ) ); } elseif ( 'shop_order' === $post->post_type ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9037, array( 'OrderID' => esc_attr( $post->ID ), 'OrderTitle' => sanitize_text_field( Woocommerce_Helper::wsal_woocommerce_extension_get_order_title( $post->ID ) ), 'OrderStatus' => \wc_get_order_status_name( $post->post_status ), 'OrderStatusSlug' => sanitize_text_field( $post->post_status ), 'PostStatus' => 'wc-' . $post->get_status(), $editor_link['name'] => $editor_link['value'], ) ); } elseif ( 'shop_coupon' === $post->post_type ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9123, array( 'CouponID' => esc_attr( $post->ID ), 'CouponName' => sanitize_text_field( $post->post_title ), 'CouponStatus' => sanitize_text_field( $post->post_status ), 'PostStatus' => sanitize_text_field( $post->post_status ), $editor_link['name'] => $editor_link['value'], ) ); } } /** * Permanently deleted 9013 or 9039. * * @param int $post_id - Product/Order ID. * * @since 4.6.0 */ public static function event_deleted( $post_id ) { $post = wc_get_order( $post_id ); if ( false === $post ) { $post = get_post( $post_id ); } if ( empty( $post ) || ! $post instanceof \WP_Post ) { if ( ! is_a( $post, '\Automattic\WooCommerce\Admin\Overrides\Order' ) ) { return; } } if ( $post instanceof \WP_Post && 'product' === $post->post_type ) { Alert_Manager::trigger_event( 9013, array( 'PostID' => esc_attr( $post->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post->ID ) ), 'ProductTitle' => sanitize_text_field( $post->post_title ), ) ); } elseif ( is_a( $post, '\Automattic\WooCommerce\Admin\Overrides\Order' ) ) { Alert_Manager::trigger_event( 9039, array( 'OrderTitle' => sanitize_text_field( Woocommerce_Helper::wsal_woocommerce_extension_get_order_title( $post_id ) ) ) ); } elseif ( 'shop_order' === $post->post_type ) { Alert_Manager::trigger_event( 9039, array( 'OrderTitle' => sanitize_text_field( Woocommerce_Helper::wsal_woocommerce_extension_get_order_title( $post_id ) ) ) ); } elseif ( 'shop_coupon' === $post->post_type ) { Alert_Manager::trigger_event( 9124, array( 'CouponID' => esc_attr( $post->ID ), 'CouponCode' => sanitize_text_field( $post->post_title ), ) ); } } /** * Restored from Trash 9014 * * @param int $post_id - Product ID. * * @since 4.6.0 */ public static function event_untrashed( $post_id ) { $post = wc_get_order( $post_id ); if ( false === $post ) { $post = get_post( $post_id ); } if ( empty( $post ) || ! $post instanceof \WP_Post ) { if ( ! is_a( $post, '\Automattic\WooCommerce\Admin\Overrides\Order' ) ) { return; } } if ( $post instanceof \WP_Post && 'product' === $post->post_type ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9014, array( 'PostID' => esc_attr( $post->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post->ID ) ), 'ProductTitle' => sanitize_text_field( $post->post_title ), 'ProductStatus' => sanitize_text_field( $post->post_status ), 'PostStatus' => sanitize_text_field( $post->post_status ), $editor_link['name'] => $editor_link['value'], ) ); } elseif ( is_a( $post, '\Automattic\WooCommerce\Admin\Overrides\Order' ) ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9038, array( 'OrderID' => esc_attr( $post->get_id() ), 'OrderTitle' => sanitize_text_field( Woocommerce_Helper::wsal_woocommerce_extension_get_order_title( $post_id ) ), 'OrderStatus' => \wc_get_order_status_name( $post->get_status() ), 'OrderStatusSlug' => $post->get_status(), 'PostStatus' => 'wc-' . $post->get_status(), $editor_link['name'] => $editor_link['value'], ) ); } elseif ( 'shop_order' === $post->post_type ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9038, array( 'OrderID' => esc_attr( $post->ID ), 'OrderTitle' => sanitize_text_field( Woocommerce_Helper::wsal_woocommerce_extension_get_order_title( $post_id ) ), 'OrderStatus' => \wc_get_order_status_name( $post->post_status ), 'OrderStatusSlug' => sanitize_text_field( $post->post_status ), 'PostStatus' => $post->post_status, $editor_link['name'] => $editor_link['value'], ) ); } elseif ( 'shop_coupon' === $post->post_type ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); Alert_Manager::trigger_event( 9127, array( 'CouponID' => esc_attr( $post->ID ), 'CouponCode' => sanitize_text_field( $post->post_title ), 'CouponStatus' => sanitize_text_field( $post->post_status ), 'PostStatus' => sanitize_text_field( $post->post_status ), $editor_link['name'] => $editor_link['value'], ) ); } } /** * Viewing Product Event. * * Alerts for viewing of product post type for WooCommerce. * * @since 4.6.0 */ public static function viewing_product() { // Retrieve the current post object. $product = get_queried_object(); // Check product post type. if ( ! empty( $product ) && $product instanceof \WP_Post && 'product' !== $product->post_type || ! empty( $product ) && ! isset( $product->post_status ) || ! function_exists( 'wc_get_product' ) ) { return $product; } if ( is_user_logged_in() && ! is_admin() ) { $current_path = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : false; if ( ! empty( $_SERVER['HTTP_REFERER'] ) && ! empty( $current_path ) && false !== strpos( sanitize_text_field( wp_unslash( $_SERVER['HTTP_REFERER'] ) ), $current_path ) ) { // Ignore this if we were on the same page so we avoid double audit entries. return; } if ( ! empty( $product->post_title ) ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $product ); Alert_Manager::trigger_event( 9073, array( 'PostID' => esc_attr( $product->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $product->ID ) ), 'PostType' => 'post', // Set to post to allow event to trigger (products are usually ignored). 'ProductStatus' => sanitize_text_field( $product->post_status ), 'PostStatus' => sanitize_text_field( $product->post_status ), 'ProductTitle' => sanitize_text_field( $product->post_title ), 'ProductUrl' => get_permalink( $product->ID ), $editor_link['name'] => $editor_link['value'], ) ); } } } /** * Trigger events 9015 * * @param object $oldpost - Old product object. * @param object $newpost - New product object. * @return int * * @since 4.6.0 */ public static function check_status_change( $oldpost, $newpost ) { if ( 'draft' === $oldpost->post_status || 'auto-draft' === $oldpost->post_status ) { return 0; } if ( $oldpost->post_status !== $newpost->post_status ) { if ( 'trash' !== $oldpost->post_status && 'trash' !== $newpost->post_status ) { if ( 'product' === $newpost->post_type ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event( 9015, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'OldStatus' => sanitize_text_field( $oldpost->post_status ), 'NewStatus' => sanitize_text_field( $newpost->post_status ), $editor_link['name'] => $editor_link['value'], ) ); return 1; } if ( 'shop_coupon' === $newpost->post_type ) { // Get coupon data. $coupon_data = WooCommerce_Sensor::get_coupon_event_data( $newpost ); // Set status event data. $coupon_data['OldStatus'] = sanitize_text_field( $oldpost->post_status ); $coupon_data['NewStatus'] = sanitize_text_field( $newpost->post_status ); // Log the event. Alert_Manager::trigger_event( 9070, $coupon_data ); return 1; } } } return 0; } /** * Trigger events 9016 * * @param WP_Post $post - Product object. * @return int * * @since 4.6.0 */ public static function check_price_change( $post ) { $result = 0; $old_price = isset( WooCommerce_Sensor::get_old_data()['regular_price'] ) ? WooCommerce_Sensor::get_old_data()['regular_price'] : false; $old_sale_price = isset( WooCommerce_Sensor::get_old_data()['sale_price'] ) ? WooCommerce_Sensor::get_old_data()['sale_price'] : false; $new_price = isset( WooCommerce_Sensor::get_new_data()['regular_price'] ) ? WooCommerce_Sensor::get_new_data()['regular_price'] : false; $new_sale_price = isset( WooCommerce_Sensor::get_new_data()['sale_price'] ) ? WooCommerce_Sensor::get_new_data()['sale_price'] : false; if ( ( $new_price ) && ( $old_price !== $new_price ) ) { $result = self::event_price( $post, 'Regular price', $old_price, $new_price ); } if ( ( false !== $new_sale_price ) && ( $old_sale_price !== $new_sale_price ) ) { $result = self::event_price( $post, 'Sale price', $old_sale_price, $new_sale_price ); } return $result; } /** * Group the Price changes in one function * * @param object $post - Old Product Object. * @param string $type - Price Type. * @param int $old_price - Old Product Price. * @param int $new_price - New Product Price. * @return int * * @since 4.6.0 */ public static function event_price( $post, $type, $old_price, $new_price ) { $currency = WooCommerce_Sensor_Helper_Second::get_currency_symbol( WooCommerce_Sensor_Helper_Second::get_config( 'currency' ) ); $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $post ); if ( empty( self::$last_9016_type ) || ! in_array( $type, self::$last_9016_type, true ) ) { // WC does not like data being accessed directly. $post_id = method_exists( $post, 'get_id' ) ? $post->get_id() : $post->ID; Alert_Manager::trigger_event( 9016, array( 'PostID' => $post_id, 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post_id ) ), 'ProductTitle' => sanitize_text_field( $post->post_title ), 'ProductStatus' => sanitize_text_field( $post->post_status ), 'PostStatus' => sanitize_text_field( $post->post_status ), 'PriceType' => $type, 'OldPrice' => ! empty( $old_price ) ? $currency . $old_price : 0, 'NewPrice' => ( '' === $new_price ) ? 0 : $currency . $new_price, $editor_link['name'] => $editor_link['value'], ) ); array_push( self::$last_9016_type, $type ); return 1; } } /** * Trigger events 9017 * * @param object $oldpost - Old product object. * @param string $old_sku - Old SKU. * @param string $new_sku - New SKU. * @return int * * @since 4.6.0 */ public static function check_sku_change( $oldpost, $old_sku = '', $new_sku = '' ) { if ( '' === $old_sku && '' === $new_sku ) { $old_sku = isset( WooCommerce_Sensor::get_old_data()['sku'] ) ? WooCommerce_Sensor::get_old_data()['sku'] : false; $new_sku = isset( WooCommerce_Sensor::get_new_data()['sku'] ) ? WooCommerce_Sensor::get_new_data()['sku'] : false; } if ( $new_sku && ( $old_sku !== $new_sku ) ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event( 9017, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldSku' => ! empty( $old_sku ) ? $old_sku : 0, 'NewSku' => $new_sku, $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9018 * * @param object $oldpost - Old product object. * @param string $old_status - Old status. * @param string $new_status - New status. * @return int * * @since 4.6.0 */ public static function check_stock_status_change( $oldpost, $old_status = '', $new_status = '' ) { if ( '' === $old_status && '' === $new_status ) { $old_status = isset( WooCommerce_Sensor::get_old_data()['stock_status'] ) ? WooCommerce_Sensor::get_old_data()['stock_status'] : false; $new_status = isset( WooCommerce_Sensor::get_new_data()['stock_status'] ) ? WooCommerce_Sensor::get_new_data()['stock_status'] : false; } if ( ( $old_status && $new_status ) && ( $old_status !== $new_status ) ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); Alert_Manager::trigger_event( 9018, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldStatus' => sanitize_text_field( self::get_stock_status_name( $old_status ) ), 'NewStatus' => sanitize_text_field( self::get_stock_status_name( $new_status ) ), $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9157, 9158 * * @param object $oldproduct - Old product object. * * @return int * * @since 5.3.0 */ public static function check_sold_individualy_change( $oldproduct ) { $old_product_data = WooCommerce_Sensor_Helper_Second::get_product_data( $oldproduct ); $old_status = $old_product_data['sold_individually']; $new_status = WooCommerce_Sensor::get_new_data()['sold_individually']; if ( ( isset( $old_status ) && isset( $new_status ) ) && ( $old_status !== $new_status ) ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( WooCommerce_Sensor::get_old_post() ); $data = array( 'PostID' => esc_attr( WooCommerce_Sensor::get_old_post()->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( WooCommerce_Sensor::get_old_post()->ID ) ), 'ProductTitle' => sanitize_text_field( WooCommerce_Sensor::get_old_post()->post_title ), 'ProductStatus' => sanitize_text_field( WooCommerce_Sensor::get_old_post()->post_status ), 'PostStatus' => sanitize_text_field( WooCommerce_Sensor::get_old_post()->post_status ), 'OldStatus' => ( $old_status ) ? __( 'Enabled', 'wp-security-audit-log' ) : __( 'Disabled', 'wp-security-audit-log' ), 'NewStatus' => ( $new_status ) ? __( 'Enabled', 'wp-security-audit-log' ) : __( 'Disabled', 'wp-security-audit-log' ), $editor_link['name'] => $editor_link['value'], ); $event_id = 9158; if ( $new_status ) { $event_id = 9157; } Alert_Manager::trigger_event( $event_id, $data ); return 1; } return 0; } /** * Trigger events 9019 * * @param object $oldpost - Old product object. * @param mixed $old_value - Old stock quantity. * @param mixed $new_value - New stock quantity. * @return int * * @since 4.6.0 */ public static function check_stock_quantity_change( $oldpost, $old_value = false, $new_value = false ) { if ( false === $old_value && false === $new_value ) { if ( WooCommerce_Sensor::get_old_data()['manage_stock'] ) { $old_value = isset( WooCommerce_Sensor::get_old_data()['stock_quantity'] ) ? WooCommerce_Sensor::get_old_data()['stock_quantity'] : false; } else { $old_value = false; } if ( WooCommerce_Sensor::get_old_data()['manage_stock'] ) { $new_value = isset( WooCommerce_Sensor::get_new_data()['stock_quantity'] ) ? WooCommerce_Sensor::get_new_data()['stock_quantity'] : false; } else { $new_value = false; } } if ( $new_value && ( $old_value !== $new_value ) ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); // WC does not like data being accessed directly. $post_id = method_exists( $oldpost, 'get_id' ) ? $oldpost->get_id() : $oldpost->ID; Alert_Manager::trigger_event( 9019, array( 'PostID' => $post_id, 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post_id ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldValue' => ! empty( $old_value ) ? $old_value : '0', 'NewValue' => $new_value, $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9020 * * @param object $oldpost - Old product object. * @param object $newpost - New product object. * @param mixed $virtual - Product virtual data. * @param mixed $download - Product downloadable data. * @return int * * @since 4.6.0 */ public static function check_type_change( $oldpost, $newpost = null, $virtual = false, $download = false ) { if ( 'trash' === $oldpost->post_status ) { return 0; } if ( $newpost && $newpost instanceof \WP_Post && 'trash' === $newpost->post_status ) { return 0; } // Set initial variables. $old_virtual = false; $new_virtual = false; $old_download = false; $new_download = false; // Get simple product virtual data. if ( false === $virtual ) { $old_virtual = isset( WooCommerce_Sensor::get_old_data()['virtual'] ) ? WooCommerce_Sensor::get_old_data()['virtual'] : false; $new_virtual = isset( WooCommerce_Sensor::get_new_data()['virtual'] ) ? WooCommerce_Sensor::get_new_data()['virtual'] : false; } elseif ( is_array( $virtual ) ) { $old_virtual = ( isset( $virtual['old'] ) && $virtual['old'] ) ? 'yes' : 'no'; $new_virtual = ( isset( $virtual['new'] ) && $virtual['new'] ) ? 'yes' : 'no'; } // Get simple product downloadable data. if ( false === $download ) { $old_download = isset( WooCommerce_Sensor::get_old_data()['downloadable'] ) ? WooCommerce_Sensor::get_old_data()['downloadable'] : false; $new_download = isset( WooCommerce_Sensor::get_new_data()['downloadable'] ) ? WooCommerce_Sensor::get_new_data()['downloadable'] : false; } elseif ( is_array( $download ) ) { $old_download = ( isset( $download['old'] ) && $download['old'] ) ? 'yes' : 'no'; $new_download = ( isset( $download['new'] ) && $download['new'] ) ? 'yes' : 'no'; } // Return variable. $result = 0; if ( $old_virtual && $new_virtual && $old_virtual !== $new_virtual ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); // WC does not like data being accessed directly. $post_id = method_exists( $oldpost, 'get_id' ) ? $oldpost->get_id() : $oldpost->ID; Alert_Manager::trigger_event( 9020, array( 'PostID' => $post_id, 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post_id ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldType' => 'yes' === $old_virtual ? 'Virtual' : 'Non-Virtual', 'NewType' => 'yes' === $new_virtual ? 'Virtual' : 'Non-Virtual', $editor_link['name'] => $editor_link['value'], ) ); $result = 1; } if ( $old_download && $new_download && $old_download !== $new_download ) { $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); // WC does not like data being accessed directly. $post_id = method_exists( $oldpost, 'get_id' ) ? $oldpost->get_id() : $oldpost->ID; Alert_Manager::trigger_event( 9020, array( 'PostID' => esc_attr( $post_id ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post_id ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldType' => ( 'yes' === $old_download ) ? 'Downloadable' : 'Non-Downloadable', 'NewType' => ( 'yes' === $new_download ) ? 'Downloadable' : 'Non-Downloadable', $editor_link['name'] => $editor_link['value'], ) ); $result = 1; } return $result; } /** * Trigger events 9021 * * @param object $oldpost - Old product object. * @param string $old_weight - (Optional) Old weight. * @param string $new_weight - (Optional) New weight. * @return int * * @since 4.6.0 */ public static function check_weight_change( $oldpost, $old_weight = '', $new_weight = '' ) { if ( '' === $old_weight && '' === $new_weight ) { $old_weight = isset( WooCommerce_Sensor::get_old_data()['weight'] ) ? WooCommerce_Sensor::get_old_data()['weight'] : false; $new_weight = isset( WooCommerce_Sensor::get_new_data()['weight'] ) ? WooCommerce_Sensor::get_new_data()['weight'] : false; } if ( $new_weight && ( $old_weight !== $new_weight ) ) { $weight_unit = WooCommerce_Sensor_Helper_Second::get_config( 'weight_unit' ); $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); // WC does not like data being accessed directly. $post_id = method_exists( $oldpost, 'get_id' ) ? $oldpost->get_id() : $oldpost->ID; Alert_Manager::trigger_event( 9021, array( 'PostID' => $post_id, 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post_id ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldWeight' => ! empty( $old_weight ) ? $old_weight . ' ' . $weight_unit : 0, 'NewWeight' => $new_weight . ' ' . $weight_unit, $editor_link['name'] => $editor_link['value'], ) ); return 1; } return 0; } /** * Trigger events 9022 * * @param object $oldpost - Old product object. * @param mixed $length - (Optional) Product lenght. * @param mixed $width - (Optional) Product width. * @param mixed $height - (Optional) Product height. * @return int * * @since 4.6.0 */ public static function check_dimensions_change( $oldpost, $length = false, $width = false, $height = false ) { // Get product dimensions data. $result = 0; $old_length = false; $new_length = false; $old_width = false; $new_width = false; $old_height = false; $new_height = false; // Length. if ( false === $length ) { $old_length = isset( WooCommerce_Sensor::get_old_data()['length'] ) ? WooCommerce_Sensor::get_old_data()['length'] : false; $new_length = isset( WooCommerce_Sensor::get_new_data()['length'] ) ? WooCommerce_Sensor::get_new_data()['length'] : false; } elseif ( is_array( $length ) ) { $old_length = isset( $length['old'] ) ? $length['old'] : false; $new_length = isset( $length['new'] ) ? $length['new'] : false; } // Width. if ( false === $width ) { $old_width = isset( WooCommerce_Sensor::get_old_data()['width'] ) ? WooCommerce_Sensor::get_old_data()['width'] : false; $new_width = isset( WooCommerce_Sensor::get_new_data()['width'] ) ? WooCommerce_Sensor::get_new_data()['width'] : false; } elseif ( is_array( $width ) ) { $old_width = isset( $width['old'] ) ? $width['old'] : false; $new_width = isset( $width['new'] ) ? $width['new'] : false; } // Height. if ( false === $height ) { $old_height = isset( WooCommerce_Sensor::get_old_data()['height'] ) ? WooCommerce_Sensor::get_old_data()['height'] : false; $new_height = isset( WooCommerce_Sensor::get_new_data()['height'] ) ? WooCommerce_Sensor::get_new_data()['height'] : false; } elseif ( is_array( $height ) ) { $old_height = isset( $height['old'] ) ? $height['old'] : false; $new_height = isset( $height['new'] ) ? $height['new'] : false; } if ( $new_length && ( $old_length !== $new_length ) ) { $result = self::event_dimension( $oldpost, 'Length', $old_length, $new_length ); } if ( $new_width && ( $old_width !== $new_width ) ) { $result = self::event_dimension( $oldpost, 'Width', $old_width, $new_width ); } if ( $new_height && ( $old_height !== $new_height ) ) { $result = self::event_dimension( $oldpost, 'Height', $old_height, $new_height ); } return $result; } /** * Group the Dimension changes in one function. * * @param object $oldpost - Old Product object. * @param string $type - Dimension type. * @param string $old_dimension - Old dimension. * @param string $new_dimension - New dimension. * @return int * * @since 4.6.0 */ public static function event_dimension( $oldpost, $type, $old_dimension, $new_dimension ) { $dimension_unit = WooCommerce_Sensor_Helper_Second::get_config( 'dimension_unit' ); $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); // WC does not like data being accessed directly. $post_id = method_exists( $oldpost, 'get_id' ) ? $oldpost->get_id() : $oldpost->ID; Alert_Manager::trigger_event( 9022, array( 'PostID' => $post_id, 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post_id ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'DimensionType' => $type, 'OldDimension' => ! empty( $old_dimension ) ? $old_dimension . ' ' . $dimension_unit : 0, 'NewDimension' => $new_dimension . ' ' . $dimension_unit, $editor_link['name'] => $editor_link['value'], ) ); return 1; } /** * Trigger events 9023, 9024, 9025, 9026 * * @param object $oldpost - Old product object. * @param mixed $file_names - (Optional) New product file names. * @param mixed $file_urls - (Optional) New product file urls. * @return int * * @since 4.6.0 */ public static function check_downloadable_file_change( $oldpost, $file_names = false, $file_urls = false ) { // Get product data. $result = 0; $is_url_changed = false; $editor_link = WooCommerce_Sensor_Helper_Second::get_editor_link( $oldpost ); if ( false === $file_names ) { $old_file_names = isset( WooCommerce_Sensor::get_old_data()['file_names'] ) ? WooCommerce_Sensor::get_old_data()['file_names'] : array(); $new_file_names = isset( WooCommerce_Sensor::get_new_data()['file_names'] ) ? WooCommerce_Sensor::get_new_data()['file_names'] : array(); } else { $old_file_names = isset( $file_names['old'] ) ? $file_names['old'] : array(); $new_file_names = isset( $file_names['new'] ) ? $file_names['new'] : array(); } if ( false === $file_urls ) { $old_file_urls = isset( WooCommerce_Sensor::get_old_data()['file_urls'] ) ? WooCommerce_Sensor::get_old_data()['file_urls'] : array(); $new_file_urls = isset( WooCommerce_Sensor::get_new_data()['file_urls'] ) ? WooCommerce_Sensor::get_new_data()['file_urls'] : array(); } else { $old_file_urls = isset( $file_urls['old'] ) ? $file_urls['old'] : array(); $new_file_urls = isset( $file_urls['new'] ) ? $file_urls['new'] : array(); } $added_urls = array_diff( $new_file_urls, $old_file_urls ); $removed_urls = array_diff( $old_file_urls, $new_file_urls ); $added_names = array_diff( $new_file_names, $old_file_names ); // Added files to the product. if ( count( $added_urls ) > 0 ) { // If the file has only changed URL. if ( count( $new_file_urls ) === count( $old_file_urls ) ) { $is_url_changed = true; } else { // WC does not like data being accessed directly. $post_id = method_exists( $oldpost, 'get_id' ) ? $oldpost->get_id() : $oldpost->ID; foreach ( $added_urls as $key => $url ) { Alert_Manager::trigger_event( 9023, array( 'PostID' => $post_id, 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $post_id ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'FileName' => sanitize_text_field( $new_file_names[ $key ] ), 'FileUrl' => $url, $editor_link['name'] => $editor_link['value'], ) ); } $result = 1; } } // Removed files from the product. if ( count( $removed_urls ) > 0 ) { // If the file has only changed URL. if ( count( $new_file_urls ) === count( $old_file_urls ) ) { $is_url_changed = true; } else { foreach ( $removed_urls as $key => $url ) { Alert_Manager::trigger_event( 9024, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'FileName' => sanitize_text_field( $old_file_names[ $key ] ), 'FileUrl' => $url, $editor_link['name'] => $editor_link['value'], ) ); } $result = 1; } } if ( count( $added_names ) > 0 ) { // If the file has only changed Name. if ( count( $new_file_names ) === count( $old_file_names ) ) { foreach ( $added_names as $key => $name ) { Alert_Manager::trigger_event( 9025, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'OldName' => sanitize_text_field( $old_file_names[ $key ] ), 'NewName' => sanitize_text_field( $name ), $editor_link['name'] => $editor_link['value'], ) ); } $result = 1; } } if ( $is_url_changed ) { foreach ( $added_urls as $key => $url ) { Alert_Manager::trigger_event( 9026, array( 'PostID' => esc_attr( $oldpost->ID ), 'SKU' => esc_attr( WooCommerce_Sensor::get_product_sku( $oldpost->ID ) ), 'ProductTitle' => sanitize_text_field( $oldpost->post_title ), 'ProductStatus' => sanitize_text_field( $oldpost->post_status ), 'PostStatus' => sanitize_text_field( $oldpost->post_status ), 'FileName' => sanitize_text_field( $new_file_names[ $key ] ), 'OldUrl' => $removed_urls[ $key ], 'NewUrl' => $url, $editor_link['name'] => $editor_link['value'], ) ); } $result = 1; } return $result; } /** * Trigger events Settings: 9027, 9028, 9029, 9030, 9031, 9032, 9033 * * @param string $option - Option name. * @param string|array $old_value - Previous value. * @param mixed $value - New value. * * @return void * * @since 4.6.0 */ public static function settings_updated( $option, $old_value, $value ) { // Verify WooCommerce settings page nonce. if ( isset( $_POST['_wpnonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ), 'woocommerce-settings' ) ) { // Verify settings page via $_GET array. if ( isset( $_GET['page'] ) && 'wc-settings' === sanitize_text_field( wp_unslash( $_GET['page'] ) ) ) { if ( isset( $_GET['tab'] ) && 'products' === sanitize_text_field( wp_unslash( $_GET['tab'] ) ) ) { // Check weight unit event. if ( isset( $_POST['woocommerce_weight_unit'] ) && 'woocommerce_weight_unit' === $option ) { $old_unit = $old_value; $new_unit = sanitize_text_field( wp_unslash( $value ) ); if ( $old_unit !== $new_unit ) { Alert_Manager::trigger_event( 9027, array( 'OldUnit' => sanitize_text_field( $old_unit ), 'NewUnit' => sanitize_text_field( $new_unit ), ) ); } } // Check dimension unit event. if ( isset( $_POST['woocommerce_dimension_unit'] ) && 'woocommerce_dimension_unit' === $option ) { $old_unit = $old_value; $new_unit = sanitize_text_field( wp_unslash( $value ) ); if ( $old_unit !== $new_unit ) { Alert_Manager::trigger_event( 9028, array( 'OldUnit' => sanitize_text_field( $old_unit ), 'NewUnit' => sanitize_text_field( $new_unit ), ) ); } } // Check dimension unit event. if ( 'woocommerce_enable_reviews' === $option ) { $old_unit = $old_value; $new_unit = sanitize_text_field( wp_unslash( $value ) ); if ( $old_unit !== $new_unit ) { $event_type = ( 'yes' == $value ) ? 'enabled' : 'disabled'; Alert_Manager::trigger_event( 9100, array( 'EventType' => $event_type, ) ); } } if ( 'woocommerce_review_rating_verification_label' === $option ) { $old_unit = $old_value; $new_unit = sanitize_text_field( wp_unslash( $value ) ); if ( $old_unit !== $new_unit ) { $event_type = ( 'yes' == $value ) ? 'enabled' : 'disabled'; Alert_Manager::trigger_event( 9107, array( 'EventType' => $event_type, ) ); } } if ( 'woocommerce_review_rating_verification_required' === $option ) { $old_unit = $old_value; $new_unit = sanitize_text_field( wp_unslash( $value ) ); if ( $old_unit !== $new_unit ) { $event_type = ( 'yes' == $value ) ? 'enabled' : 'disabled'; Alert_Manager::trigger_event( 9108, array( 'EventType' => $event_type, ) ); } } if ( 'woocommerce_enable_review_rating' === $option ) { $old_unit = $old_value; $new_unit = sanitize_text_field( wp_unslash( $value ) ); if ( $old_unit !== $new_unit ) { $event_type = ( 'yes' == $value ) ? 'enabled' : 'disabled'; Alert_Manager::trigger_event( 9109, array( 'EventType' => $event_type, ) ); } } if ( 'woocommerce_review_rating_required' === $option ) { $old_unit = $old_value; $new_unit = sanitize_text_field( wp_unslash( $value ) ); if ( $old_unit !== $new_unit ) { $event_type = ( 'yes' == $value ) ? 'enabled' : 'disabled'; Alert_Manager::trigger_event( 9110, array( 'EventType' => $event_type, ) ); } } } elseif ( isset( $_GET['tab'] ) && 'account' === sanitize_text_field( wp_unslash( $_GET['tab'] ) ) ) { // Guest Checkout event. if ( 'woocommerce_enable_guest_checkout' === $option ) { $old_enable_guest_checkout = $old_value; $new_enable_guest_checkout = isset( $_POST['woocommerce_enable_guest_checkout'] ) ? 'yes' : 'no'; if ( $old_enable_guest_checkout !== $new_enable_guest_checkout ) { $status = ( 'yes' === $new_enable_guest_checkout ) ? 'enabled' : 'disabled'; Alert_Manager::trigger_event( 9033, array( 'EventType' => $status ) ); } } if ( 'woocommerce_enable_checkout_login_reminder' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9144, array( 'EventType' => ( 'yes' === $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_enable_signup_and_login_from_checkout' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9145, array( 'EventType' => ( 'yes' === $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_enable_myaccount_registration' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9146, array( 'EventType' => ( 'yes' === $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_registration_generate_username' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9147, array( 'EventType' => ( 'yes' === $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_registration_generate_password' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9148, array( 'EventType' => ( 'yes' === $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_erasure_request_removes_order_data' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9149, array( 'EventType' => ( 'yes' === $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_erasure_request_removes_download_data' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9150, array( 'EventType' => ( 'yes' === $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_allow_bulk_remove_personal_data' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9151, array( 'EventType' => ( 'yes' === $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_registration_privacy_policy_text' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9152, array( 'old_setting' => $old_value, 'new_setting' => $value, ) ); } } if ( 'woocommerce_checkout_privacy_policy_text' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9153, array( 'old_setting' => $old_value, 'new_setting' => $value, ) ); } } } if ( isset( $_GET['tab'] ) && 'tax' === sanitize_text_field( wp_unslash( $_GET['tab'] ) ) ) { // Check prices entered with tax setting. if ( isset( $_POST['woocommerce_prices_include_tax'] ) && 'woocommerce_prices_include_tax' === $option ) { $old_price_tax = $old_value; $new_price_tax = sanitize_text_field( wp_unslash( $_POST['woocommerce_prices_include_tax'] ) ); if ( $old_price_tax !== $new_price_tax ) { Alert_Manager::trigger_event( 9078, array( 'TaxStatus' => 'yes' === $new_price_tax ? 'including' : 'excluding' ) ); } } // Check calculate tax based on setting. if ( isset( $_POST['woocommerce_tax_based_on'] ) && 'woocommerce_tax_based_on' === $option ) { $old_tax_base = $old_value; $new_tax_base = sanitize_text_field( wp_unslash( $_POST['woocommerce_tax_based_on'] ) ); if ( $old_tax_base !== $new_tax_base ) { $setting = ''; if ( 'shipping' === $new_tax_base ) { $setting = __( 'Customer shipping address', 'wp-security-audit-log' ); } elseif ( 'billing' === $new_tax_base ) { $setting = __( 'Customer billing address', 'wp-security-audit-log' ); } elseif ( 'base' === $new_tax_base ) { $setting = __( 'Shop base address', 'wp-security-audit-log' ); } else { $setting = __( 'Customer shipping address', 'wp-security-audit-log' ); } Alert_Manager::trigger_event( 9079, array( 'Setting' => sanitize_text_field( $setting ), 'OldTaxBase' => sanitize_text_field( $old_tax_base ), 'NewTaxBase' => sanitize_text_field( $new_tax_base ), ) ); } } // Check shipping tax class setting. if ( isset( $_POST['woocommerce_shipping_tax_class'] ) && 'woocommerce_shipping_tax_class' === $option ) { $old_tax_class = $old_value; $new_tax_class = sanitize_text_field( wp_unslash( $_POST['woocommerce_shipping_tax_class'] ) ); if ( $old_tax_class !== $new_tax_class ) { $setting = ''; if ( 'inherit' === $new_tax_class ) { $setting = __( 'Shipping tax class based on cart items', 'wp-security-audit-log' ); } elseif ( 'reduced-rate' === $new_tax_class ) { $setting = __( 'Reduced rate' ); } elseif ( 'zero-rate' === $new_tax_class ) { $setting = __( 'Zero rate', 'wp-security-audit-log' ); } elseif ( empty( $new_tax_class ) ) { $setting = __( 'Standard', 'wp-security-audit-log' ); } else { $setting = __( 'Shipping tax class based on cart items', 'wp-security-audit-log' ); } Alert_Manager::trigger_event( 9080, array( 'Setting' => sanitize_text_field( $setting ), 'OldTaxClass' => sanitize_text_field( $old_tax_class ), 'NewTaxClass' => sanitize_text_field( $new_tax_class ), ) ); } } // Check rounding of tax setting. if ( 'woocommerce_tax_round_at_subtotal' === $option ) { $old_tax_round = $old_value; $new_tax_round = isset( $_POST['woocommerce_tax_round_at_subtotal'] ) ? 'yes' : 'no'; if ( $old_tax_round !== $new_tax_round ) { Alert_Manager::trigger_event( 9081, array( 'EventType' => 'yes' === $new_tax_round ? 'enabled' : 'disabled' ) ); } } } elseif ( empty( $_GET['tab'] ) || 'general' === sanitize_text_field( wp_unslash( $_GET['tab'] ) ) ) { // "Enable Coupon" event. if ( 'woocommerce_enable_coupons' === $option ) { $old_enable_coupons = $old_value; $new_enable_coupons = isset( $_POST['woocommerce_enable_coupons'] ) ? 'yes' : 'no'; if ( $old_enable_coupons !== $new_enable_coupons ) { $status = 'yes' === $new_enable_coupons ? 'enabled' : 'disabled'; Alert_Manager::trigger_event( 9032, array( 'EventType' => $status ) ); } } if ( isset( $_POST['woocommerce_store_address'] ) && 'woocommerce_store_address' === $option || isset( $_POST['woocommerce_store_address_2'] ) && 'woocommerce_store_address_2' === $option || isset( $_POST['woocommerce_store_city'] ) && 'woocommerce_store_city' === $option || isset( $_POST['woocommerce_default_country'] ) && 'woocommerce_default_country' === $option || isset( $_POST['woocommerce_store_postcode'] ) && 'woocommerce_store_postcode' === $option ) { // Default country event. if ( 'woocommerce_store_address' === $option ) { WooCommerce_Sensor::set_old_location_data( $old_value . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address_2' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_city' ) . ', ' . WC()->countries->countries[ strtok( WooCommerce_Sensor_Helper_Second::get_config( 'default_country' ), ':' ) ] . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_postcode' ) ); WooCommerce_Sensor::set_new_location_data( sanitize_text_field( wp_unslash( $_POST['woocommerce_store_address'] ) ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address_2' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_city' ) . ', ' . WC()->countries->countries[ strtok( WooCommerce_Sensor_Helper_Second::get_config( 'default_country' ), ':' ) ] . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_postcode' ) ); } if ( 'woocommerce_store_address_2' === $option ) { WooCommerce_Sensor::set_old_location_data( WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . $old_value . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_city' ) . ', ' . WC()->countries->countries[ strtok( WooCommerce_Sensor_Helper_Second::get_config( 'default_country' ), ':' ) ] . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_postcode' ) ); WooCommerce_Sensor::set_new_location_data( WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . sanitize_text_field( wp_unslash( $_POST['woocommerce_store_address_2'] ) ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_city' ) . ', ' . WC()->countries->countries[ strtok( WooCommerce_Sensor_Helper_Second::get_config( 'default_country' ), ':' ) ] . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_postcode' ) ); } if ( 'woocommerce_store_city' === $option ) { WooCommerce_Sensor::set_old_location_data( WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address_2' ) . ', ' . $old_value . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'default_country' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_postcode' ) ); WooCommerce_Sensor::set_new_location_data( WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address_2' ) . ', ' . sanitize_text_field( wp_unslash( $_POST['woocommerce_store_city'] ) ) . ', ' . WC()->countries->countries[ strtok( WooCommerce_Sensor_Helper_Second::get_config( 'default_country' ), ':' ) ] . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_postcode' ) ); } if ( 'woocommerce_default_country' === $option ) { WooCommerce_Sensor::set_old_location_data( WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address_2' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . WC()->countries->countries[ strtok( $old_value, ':' ) ] . ', ' . $old_value ); WooCommerce_Sensor::set_new_location_data( WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address_2' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . WC()->countries->countries[ strtok( sanitize_text_field( wp_unslash( $_POST['woocommerce_default_country'] ) ), ':' ) ] . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_postcode' ) ); } if ( 'woocommerce_store_postcode' === $option ) { WooCommerce_Sensor::set_old_location_data( WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address_2' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'default_country' ) . ', ' . $old_value ); WooCommerce_Sensor::set_new_location_data( WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address_2' ) . ', ' . WooCommerce_Sensor_Helper_Second::get_config( 'store_address' ) . ', ' . WC()->countries->countries[ strtok( WooCommerce_Sensor_Helper_Second::get_config( 'default_country' ), ':' ) ] . ', ' . sanitize_text_field( wp_unslash( $_POST['woocommerce_store_postcode'] ) ) ); } if ( WooCommerce_Sensor::get_old_location_data() !== WooCommerce_Sensor::get_new_location_data() ) { sleep( 1 ); WooCommerce_Sensor::set_new_location_data( sanitize_text_field( wp_unslash( $_POST['woocommerce_store_address'] ) ) . ', ' . sanitize_text_field( wp_unslash( $_POST['woocommerce_store_address_2'] ) ) . ', ' . sanitize_text_field( wp_unslash( $_POST['woocommerce_store_city'] ) ) . ', ' . WC()->countries->countries[ strtok( sanitize_text_field( wp_unslash( $_POST['woocommerce_default_country'] ) ), ':' ) ] . ', ' . sanitize_text_field( wp_unslash( $_POST['woocommerce_store_postcode'] ) ) ); if ( ! Alert_Manager::was_triggered_recently( 9029 ) ) { Alert_Manager::trigger_event( 9029, array( 'OldLocation' => sanitize_text_field( WooCommerce_Sensor::get_old_location_data() ), 'NewLocation' => sanitize_text_field( WooCommerce_Sensor::get_new_location_data() ), ) ); } } } if ( 'woocommerce_allowed_countries' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9085, array( 'old' => sanitize_text_field( $old_value ), 'new' => sanitize_text_field( $value ), ) ); } } if ( 'woocommerce_specific_allowed_countries' === $option ) { if ( $old_value !== $value ) { // Check if any old values are present. if ( ! empty( $old_value ) ) { $old_country_codes = ''; // add each old country to a string to output in alert. foreach ( $old_value as $old_country_code ) { $old_country_codes .= WC()->countries->countries[ $old_country_code ] . ', '; } } else { $old_country_codes = __( 'None, ', 'wp-security-audit-log' ); } // Check if any new values are present. if ( ! empty( $value ) ) { $country_codes = ''; foreach ( $value as $country_code ) { $country_codes .= WC()->countries->countries[ $country_code ] . ', '; } } else { $country_codes = __( 'None', 'wp-security-audit-log' ); } Alert_Manager::trigger_event( 9087, array( 'old' => rtrim( $old_country_codes, ', ' ), 'new' => rtrim( $country_codes, ', ' ), ) ); } } if ( 'woocommerce_all_except_countries' === $option ) { if ( $old_value !== $value ) { // Check if any old values are present. if ( ! empty( $old_value ) ) { $old_country_codes = ''; // add each old country to a string to output in alert. foreach ( $old_value as $old_country_code ) { $old_country_codes .= WC()->countries->countries[ $old_country_code ] . ', '; } } else { $old_country_codes = __( 'None, ', 'wp-security-audit-log' ); } // Check if any new values are present. if ( ! empty( $value ) ) { $country_codes = ''; foreach ( $value as $country_code ) { $country_codes .= WC()->countries->countries[ $country_code ] . ', '; } } else { $country_codes = __( 'None', 'wp-security-audit-log' ); } Alert_Manager::trigger_event( 9086, array( 'old' => rtrim( $old_country_codes, ', ' ), 'new' => rtrim( $country_codes, ', ' ), ) ); } } if ( 'woocommerce_ship_to_countries' === $option && 'NULL' !== $value ) { if ( $old_value !== $value ) { $value = ( '' === $value ) ? __( 'Ship to all countries you sell to', 'wp-security-audit-log' ) : $value; $old_value = ( '' === $old_value ) ? __( 'Ship to all countries you sell to', 'wp-security-audit-log' ) : $old_value; Alert_Manager::trigger_event( 9088, array( 'old' => $old_value, 'new' => $value, ) ); } } if ( 'woocommerce_specific_ship_to_countries' === $option && 'NULL' !== $value ) { if ( $old_value !== $value ) { // Check if any old values are present. if ( ! empty( $old_value ) ) { $old_country_codes = ''; // add each old country to a string to output in alert. foreach ( $old_value as $old_country_code ) { $old_country_codes .= WC()->countries->countries[ $old_country_code ] . ', '; } } else { $old_country_codes = __( 'None, ', 'wp-security-audit-log' ); } // Check if any new values are present. if ( ! empty( $value ) ) { $country_codes = ''; foreach ( $value as $country_code ) { $country_codes .= WC()->countries->countries[ $country_code ] . ', '; } } else { $country_codes = __( 'None', 'wp-security-audit-log' ); } Alert_Manager::trigger_event( 9089, array( 'old' => rtrim( $old_country_codes, ', ' ), 'new' => rtrim( $country_codes, ', ' ), ) ); } } if ( 'woocommerce_default_customer_address' === $option ) { if ( $old_value !== $value ) { $value = ( '' === $value ) ? __( 'No default location', 'wp-security-audit-log' ) : $value; $old_value = ( '' === $old_value ) ? __( 'No default location', 'wp-security-audit-log' ) : $old_value; Alert_Manager::trigger_event( 9090, array( 'old' => sanitize_text_field( $old_value ), 'new' => sanitize_text_field( $value ), ) ); } } // Calculate taxes event. if ( 'woocommerce_calc_taxes' === $option ) { $old_calc_taxes = $old_value; $new_calc_taxes = isset( $_POST['woocommerce_calc_taxes'] ) ? 'yes' : 'no'; if ( $old_calc_taxes !== $new_calc_taxes ) { $status = 'yes' === $new_calc_taxes ? 'enabled' : 'disabled'; Alert_Manager::trigger_event( 9030, array( 'EventType' => $status ) ); } } if ( 'woocommerce_currency_pos' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9115, array( 'old_setting' => $old_value, 'new_setting' => $value, ) ); } } if ( 'woocommerce_price_thousand_sep' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9116, array( 'old_setting' => $old_value, 'new_setting' => $value, ) ); } } if ( 'woocommerce_price_decimal_sep' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9117, array( 'old_setting' => $old_value, 'new_setting' => $value, ) ); } } if ( 'woocommerce_price_num_decimals' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9118, array( 'old_setting' => $old_value, 'new_setting' => $value, ) ); } } // Store current event. if ( 'woocommerce_currency' === $option ) { if ( isset( $_POST['woocommerce_currency'] ) ) { if ( 'NULL' === $old_value ) { $old_value = get_option( ' woocommerce_currency' ); } else { $old_currency = $old_value; } $new_currency = sanitize_text_field( wp_unslash( $_POST['woocommerce_currency'] ) ); if ( $old_currency !== $new_currency ) { Alert_Manager::trigger_event( 9031, array( 'OldCurrency' => sanitize_text_field( $old_currency ), 'NewCurrency' => sanitize_text_field( $new_currency ), ) ); } } } } elseif ( empty( $_GET['tab'] ) || 'advanced' === sanitize_text_field( wp_unslash( $_GET['tab'] ) ) ) { if ( 'woocommerce_cart_page_id' === $option ) { if ( $old_value !== $value ) { if ( 'NULL' === $old_value ) { $old_value = get_option( ' woocommerce_cart_page_id' ); } else { $old_value = get_the_title( $old_value ); } Alert_Manager::trigger_event( 9091, array( 'old' => sanitize_text_field( $old_value ), 'new' => get_the_title( $value ), ) ); } } if ( 'woocommerce_checkout_page_id' === $option ) { if ( $old_value !== $value ) { if ( 'NULL' === $old_value ) { $old_value = get_option( ' woocommerce_cart_page_id' ); } else { $old_value = get_the_title( $old_value ); } Alert_Manager::trigger_event( 9092, array( 'old' => sanitize_text_field( $old_value ), 'new' => get_the_title( $value ), ) ); } } if ( 'woocommerce_myaccount_page_id' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9093, array( 'old' => get_the_title( $old_value ), 'new' => get_the_title( $value ), ) ); } } if ( 'woocommerce_terms_page_id' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9094, array( 'old' => get_the_title( $old_value ), 'new' => get_the_title( $value ), ) ); } } if ( strpos( $option, 'woocommerce_checkout' ) !== false ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9111, array( 'endpoint_name' => str_replace( 'woocommerce_checkout_', '', str_replace( '_endpoint', '', $option ) ), 'old' => $old_value, 'new_value' => $value, ) ); } } if ( strpos( $option, 'woocommerce_myaccount' ) !== false ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9112, array( 'endpoint_name' => str_replace( 'woocommerce_myaccount_', '', str_replace( '_endpoint', '', $option ) ), 'old' => $old_value, 'new_value' => $value, ) ); } } } elseif ( empty( $_GET['tab'] ) || 'shipping' === sanitize_text_field( wp_unslash( $_GET['tab'] ) ) ) { if ( 'woocommerce_enable_shipping_calc' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9140, array( 'EventType' => ( 'yes' === $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_shipping_cost_requires_address' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9141, array( 'EventType' => ( $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_shipping_debug_mode' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9143, array( 'EventType' => ( $value ) ? 'enabled' : 'disabled', ) ); } } if ( 'woocommerce_ship_to_destination' === $option ) { if ( $old_value !== $value ) { Alert_Manager::trigger_event( 9142, array( 'old_setting' => $old_value, 'new_setting' => $value, ) ); } } } elseif ( empty( $_GET['tab'] ) || 'site-visibility' === sanitize_text_field( wp_unslash( $_GET['tab'] ) ) ) { if ( 'woocommerce_coming_soon' === $option ) { $old_unit = $old_value; $new_unit = sanitize_text_field( wp_unslash( $value ) ); if ( $old_unit !== $new_unit ) { $event_type = ( 'yes' == $new_unit ) ? __( 'Coming soon', 'wp-security-audit-log' ) : __( 'Live', 'wp-security-audit-log' ); $old_staus = ( 'yes' == $old_unit ) ? __( 'Coming soon', 'wp-security-audit-log' ) : __( 'Live', 'wp-security-audit-log' ); Alert_Manager::trigger_event( 9159, array( 'EventType' => 'modified', 'old_status' => $old_staus, 'new_status' => $event_type, ) ); } } } } } } /** * Trigger events Settings: 9027, 9028, 9029, 9030, 9031, 9032, 9033 * * @since 4.6.0 */ public static function check_settings_change() { // Verify WooCommerce settings page nonce. if ( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ), 'woocommerce-settings' ) ) { // Verify settings page via $_GET array. if ( isset( $_GET['page'] ) && 'wc-settings' === sanitize_text_field( wp_unslash( $_GET['page'] ) ) ) { if ( isset( $_GET['tab'] ) && 'checkout' === sanitize_text_field( wp_unslash( $_GET['tab'] ) ) ) { // Get payment method. $gateway = isset( $_GET['section'] ) ? sanitize_text_field( wp_unslash( $_GET['section'] ) ) : false; // Set to true if payment gateways are enabled or disabled. $status_change = false; // Check Cash On Delivery section. if ( $gateway && 'cod' === sanitize_text_field( wp_unslash( $gateway ) ) ) { // Check COD event. $old_cash_on_delivery = WooCommerce_Sensor_Helper_Second::get_config( 'cod_settings' ); $old_cash_on_delivery = isset( $old_cash_on_delivery['enabled'] ) ? $old_cash_on_delivery['enabled'] : ''; $new_cash_on_delivery = isset( $_POST['woocommerce_cod_enabled'] ) ? 'yes' : 'no'; // Check status change. if ( $old_cash_on_delivery !== $new_cash_on_delivery ) { $status = 'yes' === $new_cash_on_delivery ? 'enabled' : 'disabled'; Alert_Manager::trigger_event( 9034, array( 'EventType' => $status ) ); $status_change = true; } } elseif ( $gateway ) { // Get old gateway settings. $gateway_settings = WooCommerce_Sensor_Helper_Second::get_config( $gateway . '_settings' ); $old_gateway_status = isset( $gateway_settings['enabled'] ) ? $gateway_settings['enabled'] : false; $new_gateway_status = isset( $_POST[ 'woocommerce_' . $gateway . '_enabled' ] ) ? 'yes' : 'no'; // Check status change. if ( $old_gateway_status !== $new_gateway_status ) { // Gateway enabled. Alert_Manager::trigger_event( 9074, array( 'GatewayID' => sanitize_text_field( $gateway ), 'GatewayName' => isset( $gateway_settings['title'] ) ? $gateway_settings['title'] : false, 'EventType' => 'yes' === $new_gateway_status ? 'enabled' : 'disabled', ) ); $status_change = true; } } if ( $gateway && ! $status_change ) { $gateway_settings = WooCommerce_Sensor_Helper_Second::get_config( $gateway . '_settings' ); Alert_Manager::trigger_event_if( 9076, array( 'GatewayID' => sanitize_text_field( $gateway ), 'GatewayName' => isset( $gateway_settings['title'] ) ? $gateway_settings['title'] : false, ), Alert_Manager::will_or_has_triggered( 9074 ) ); } } } $webhook_id = ( isset( $_POST['webhook_id'] ) ) ? \sanitize_text_field( wp_unslash( $_POST['webhook_id'] ) ) : false; if ( $webhook_id ) { // Gather POSTed (freshest) data. $new_webhook_data = array( 'id' => $webhook_id, 'name' => isset( $_POST['webhook_name'] ) ? \sanitize_text_field( wp_unslash( $_POST['webhook_name'] ) ) : '', 'delivery_url' => isset( $_POST['webhook_delivery_url'] ) ? \sanitize_text_field( wp_unslash( $_POST['webhook_delivery_url'] ) ) : '', 'topic' => isset( $_POST['webhook_topic'] ) ? \sanitize_text_field( wp_unslash( $_POST['webhook_topic'] ) ) : '', 'status' => isset( $_POST['webhook_status'] ) ? \sanitize_text_field( wp_unslash( $_POST['webhook_status'] ) ) : '', 'secret' => isset( $_POST['webhook_secret'] ) ? \sanitize_text_field( wp_unslash( $_POST['webhook_secret'] ) ) : '', ); // Get a current copy of the soon to be "old" version for comparison. $data_store = \WC_Data_Store::load( 'webhook' ); $webhooks = $data_store->search_webhooks( array( 'limit' => -1 ) ); $old_hook_found = false; foreach ( $webhooks as $wc_webkook_key => $lookup_id ) { $id_we_want = intval( $webhook_id ); if ( $id_we_want === $lookup_id && ! $old_hook_found ) { $old_hook_found = true; $old_webhook = wc_get_webhook( $id_we_want ); continue; } } if ( ! $old_hook_found ) { return; } $alert_needed = false; if ( isset( $old_webhook ) ) { // Tidy up data for comparison. $old_webhook_data = array( 'id' => $webhook_id, 'name' => $old_webhook->get_name(), 'delivery_url' => $old_webhook->get_delivery_url(), 'topic' => $old_webhook->get_topic(), 'status' => $old_webhook->get_status(), 'secret' => $old_webhook->get_secret(), ); foreach ( $new_webhook_data as $key => $data ) { if ( $old_webhook_data[ $key ] !== $new_webhook_data[ $key ] ) { $alert_needed = true; } } if ( $alert_needed ) { $editor_link = Woocommerce_Helper::create_webhook_editor_link( $webhook_id ); Alert_Manager::trigger_event( 9122, array( 'HookName' => $new_webhook_data['name'], 'OldHookName' => $old_webhook_data['name'], 'DeliveryURL' => $new_webhook_data['delivery_url'], 'OldDeliveryURL' => $old_webhook_data['delivery_url'], 'Topic' => $new_webhook_data['topic'], 'OldTopic' => $old_webhook_data['topic'], 'Status' => $new_webhook_data['status'], 'OldStatus' => $old_webhook_data['status'], 'Secret' => $new_webhook_data['secret'], 'OldSecret' => $old_webhook_data['secret'], 'EditorLinkWebhook' => $editor_link, ) ); } } } } // Verify nonce for payment gateways. if ( isset( $_POST['security'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['security'] ) ), 'woocommerce-toggle-payment-gateway-enabled' ) ) { if ( isset( $_POST['action'] ) && 'woocommerce_toggle_gateway_enabled' === sanitize_text_field( wp_unslash( $_POST['action'] ) ) ) { // Get payment gateways. $payment_gateways = WC()->payment_gateways->payment_gateways(); if ( ! empty( $payment_gateways ) ) { foreach ( $payment_gateways as $gateway ) { // Get gateway ID. $gateway_id = isset( $_POST['gateway_id'] ) ? sanitize_text_field( wp_unslash( $_POST['gateway_id'] ) ) : false; // Check if the gateway id matches any available gateway ids. if ( ! in_array( $gateway_id, array( $gateway->id, sanitize_title( get_class( $gateway ) ) ), true ) ) { continue; } $enabled = $gateway->get_option( 'enabled', 'no' ); if ( 'cod' === $gateway->id ) { $status = ! wc_string_to_bool( $enabled ) ? 'enabled' : 'disabled'; Alert_Manager::trigger_event( 9034, array( 'EventType' => $status ) ); } else { // Gateway enabled. Alert_Manager::trigger_event( 9074, array( 'GatewayID' => sanitize_text_field( $gateway->id ), 'GatewayName' => sanitize_text_field( $gateway->title ), 'EventType' => ! wc_string_to_bool( $enabled ) ? 'enabled' : 'disabled', ) ); } } } } } // Verify nonce for shipping zones events. if ( isset( $_POST['wc_shipping_zones_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['wc_shipping_zones_nonce'] ) ), 'wc_shipping_zones_nonce' ) ) { if ( isset( $_POST['changes'] ) && ! empty( $_POST['changes'] ) ) { $changes = $_POST['changes']; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized foreach ( $changes as $key => $zone ) { if ( ! is_integer( $key ) ) { continue; } if ( isset( $zone['zone_id'], $zone['deleted'] ) && 'deleted' === $zone['deleted'] ) { $zone_obj = new \WC_Shipping_Zone( sanitize_text_field( $zone['zone_id'] ) ); Alert_Manager::trigger_event( 9082, array( 'ShippingZoneID' => sanitize_text_field( $zone['zone_id'] ), 'EventType' => 'deleted', 'ShippingZoneName' => sanitize_text_field( $zone_obj->get_zone_name() ), ) ); } } } } } /** * Get Stock Status Name. * * @param string $slug - Stock slug. * @return string * * @since 4.6.0 */ public static function get_stock_status_name( $slug ) { if ( 'instock' === $slug ) { return __( 'In stock', 'wp-security-audit-log' ); } elseif ( 'outofstock' === $slug ) { return __( 'Out of stock', 'wp-security-audit-log' ); } elseif ( 'onbackorder' === $slug ) { return __( 'On backorder', 'wp-security-audit-log' ); } } /** * Return: Product Categories. * * @param object $post - Product post object. * @return array * * @since 4.6.0 */ public static function get_product_categories( $post ) { return wp_get_post_terms( $post->ID, 'product_cat', array( 'fields' => 'names' ) ); } } }
Submit
FILE
FOLDER
Name
Size
Permission
Action
Alerts
---
0755
Helpers
---
0755
.DS_Store
6148 bytes
0644
class-acf-meta-sensor.php
5398 bytes
0644
class-acf-sensor.php
18555 bytes
0644
class-bbpress-sensor.php
27193 bytes
0644
class-bbpress-system-sensor.php
3777 bytes
0644
class-bbpress-user-sensor.php
11135 bytes
0644
class-gravity-forms-sensor.php
49475 bytes
0644
class-main-wp-sensor.php
14131 bytes
0644
class-mainwp-server-sensor.php
26058 bytes
0644
class-memberpress-sensor.php
52670 bytes
0644
class-multisite-sign-up-sensor.php
3722 bytes
0644
class-rank-math-sensor.php
11911 bytes
0644
class-redirection-sensor.php
14254 bytes
0644
class-tablepress-sensor.php
17655 bytes
0644
class-termly-sensor.php
9341 bytes
0644
class-woocommerce-public-sensor.php
24098 bytes
0644
class-woocommerce-sensor-helper-second.php
103733 bytes
0644
class-woocommerce-sensor-helper-third.php
4406 bytes
0644
class-woocommerce-sensor-helper.php
98594 bytes
0644
class-woocommerce-sensor.php
48936 bytes
0644
class-wp-2fa-sensor.php
11628 bytes
0644
class-wp-comments-sensor.php
7104 bytes
0644
class-wp-content-sensor.php
58785 bytes
0644
class-wp-database-sensor.php
17912 bytes
0644
class-wp-files-sensor.php
4531 bytes
0644
class-wp-log-in-out-sensor.php
20101 bytes
0644
class-wp-menus-sensor.php
24986 bytes
0644
class-wp-metadata-sensor.php
23063 bytes
0644
class-wp-multisite-sensor.php
13562 bytes
0644
class-wp-plugins-themes-sensor.php
37203 bytes
0644
class-wp-register-sensor.php
3808 bytes
0644
class-wp-request-sensor.php
3390 bytes
0644
class-wp-system-sensor.php
45784 bytes
0644
class-wp-user-profile-sensor.php
21796 bytes
0644
class-wp-widgets-sensor.php
10878 bytes
0644
class-wpforms-sensor.php
52009 bytes
0644
class-yoast-seo-sensor.php
71603 bytes
0644
index.php
58 bytes
0644
N4ST4R_ID | Naxtarrr