Submit
Path:
~
/
home
/
getwphos
/
www
/
deerguard
/
wp-content
/
plugins
/
wp-security-audit-log
/
classes
/
WPSensors
/
File Content:
class-gravity-forms-sensor.php
<?php /** * Custom Sensors for Gravity Forms plugin. * * Class file for alert manager. * * @since 1.0.0 * * @package wsal * @subpackage wsal-gravity-forms */ declare(strict_types=1); namespace WSAL\WP_Sensors; use WSAL\Helpers\Settings_Helper; use WSAL\Controllers\Alert_Manager; use WSAL\WP_Sensors\Helpers\GravityForms_Helper; // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( '\WSAL\WP_Sensors\Gravity_Forms_Sensor' ) ) { /** * Custom sensor for Gravity Forms plugin. * * @since 4.6.0 */ class Gravity_Forms_Sensor { /** * Holds a cached value if the checked alert has recently fired. * * @var array|null * * @since 4.6.0 */ private static $old_form = null; /** * Hook events related to sensor. * * @since 4.6.0 */ public static function init() { if ( GravityForms_Helper::is_gravityforms_active() && is_user_logged_in() ) { add_action( 'gform_form_post_get_meta', array( __CLASS__, 'get_before_post_edit_data' ) ); // Forms. add_action( 'gform_after_save_form', array( __CLASS__, 'event_form_saved' ), 10, 2 ); add_action( 'gform_post_form_trashed', array( __CLASS__, 'event_form_trashed' ), 10, 1 ); add_action( 'gform_before_delete_form', array( __CLASS__, 'event_form_deleted' ) ); add_action( 'gform_post_form_duplicated', array( __CLASS__, 'event_form_duplicated' ), 10, 2 ); add_action( 'gform_post_update_form_meta', array( __CLASS__, 'event_form_meta_updated' ), 10, 3 ); add_action( 'gform_forms_post_import', array( __CLASS__, 'event_forms_imported' ), 10, 1 ); add_action( 'gform_post_form_activated', array( __CLASS__, 'event_form_activated' ), 10, 1 ); add_action( 'gform_post_form_deactivated', array( __CLASS__, 'event_form_deactivated' ), 10, 1 ); // Confirmations. add_action( 'gform_pre_confirmation_save', array( __CLASS__, 'event_form_confirmation_saved' ), 10, 3 ); add_action( 'gform_pre_confirmation_deleted', array( __CLASS__, 'event_form_confirmation_deleted' ), 10, 2 ); // Notifications. add_action( 'gform_pre_notification_deleted', array( __CLASS__, 'event_form_notification_deleted' ), 10, 2 ); add_action( 'gform_pre_notification_activated', array( __CLASS__, 'event_form_notification_activated' ), 10, 2 ); add_action( 'gform_pre_notification_deactivated', array( __CLASS__, 'event_form_notification_deactivated' ), 10, 2 ); // Entries. add_action( 'gform_delete_entry', array( __CLASS__, 'event_form_entry_deleted' ), 10, 1 ); add_action( 'gform_update_status', array( __CLASS__, 'event_form_entry_trashed' ), 10, 3 ); add_action( 'gform_post_note_added', array( __CLASS__, 'event_form_entry_note_added' ), 10, 6 ); add_action( 'gform_pre_note_deleted', array( __CLASS__, 'event_form_entry_note_deleted' ), 10, 2 ); add_action( 'gform_post_update_entry_property', array( __CLASS__, 'event_form_entry_updated' ), 10, 4 ); // Global Settings. add_action( 'updated_option', array( __CLASS__, 'event_settings_updated' ), 10, 3 ); add_action( 'gform_post_export_entries', array( __CLASS__, 'event_process_export' ), 10, 5 ); add_action( 'gform_form_export_filename', array( __CLASS__, 'event_process_export_forms' ), 10, 2 ); } // Form submitted. add_action( 'gform_after_submission', array( __CLASS__, 'event_form_submitted' ), 10, 2 ); } /** * That needs to be registered as a frontend sensor, when the admin sets the plugin to monitor the login from 3rd parties. * * @return boolean * * @since 4.5.1 */ public static function is_frontend_sensor(): bool { $frontend_events = Settings_Helper::get_frontend_events(); $should_load = ( isset( $frontend_events['gravityforms'] ) && $frontend_events['gravityforms'] ); if ( $should_load ) { return true; } return false; } /** * Loads all the plugin dependencies early. * * @return void * * @since 4.6.0 */ public static function early_init() { \add_filter( 'wsal_event_objects', array( GravityForms_Helper::class, 'wsal_gravityforms_add_custom_event_objects' ), 10, 2 ); \add_filter( 'wsal_save_settings_disabled_events', array( GravityForms_Helper::class, 'save_settings_disabled_events', ), 10, 4 ); \add_filter( 'wsal_event_type_data', array( GravityForms_Helper::class, 'wsal_gravityforms_add_custom_event_type' ), 10, 2 ); \add_filter( 'wsal_togglealerts_sub_category_events', array( GravityForms_Helper::class, 'wsal_gravityforms_extension_togglealerts_sub_category_events' ) ); \add_filter( 'wsal_togglealerts_sub_category_titles', array( GravityForms_Helper::class, 'wsal_gravityforms_extension_togglealerts_sub_category_titles' ), 10, 2 ); \add_filter( 'wsal_load_public_sensors', array( GravityForms_Helper::class, 'wsal_gravityforms_extension_load_public_sensors' ) ); \add_action( 'wsal_togglealerts_append_content_to_toggle', array( GravityForms_Helper::class, 'append_content_to_toggle' ) ); \add_filter( 'wsal_load_on_frontend', array( GravityForms_Helper::class, 'wsal_gravityforms_allow_sensor_on_frontend' ), 10, 2 ); } /** * Trigger event when an entry is modified. * * @param int $entry_id - Entry ID. * @param string $property_name - Value being updated. * @param string $property_value - New value. * @param string $previous_value - Old value. * * @return void * * @since 4.6.0 */ public static function event_form_entry_updated( $entry_id, $property_name, $property_value, $previous_value ) { if ( isset( $_POST['gforms_save_entry'] ) || isset( $_POST['name'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing $item_being_updated = isset( $_POST['name'] ) ? sanitize_text_field( wp_unslash( $_POST['name'] ) ) : false; // phpcs:ignore WordPress.Security.NonceVerification.Missing $entry = \GFAPI::get_entry( $entry_id ); $form = \GFAPI::get_form( $entry['form_id'] ); $entry_name = self::determine_entry_name( $entry ); $editor_link = esc_url( add_query_arg( array( 'view' => 'entry', 'id' => $entry['form_id'], 'lid' => $entry_id, ), admin_url( 'admin.php?page=gf_entries' ) ) ); if ( 'is_starred' === $item_being_updated ) { // Starred. if ( $previous_value !== $property_value && $property_value ) { $variables = array( 'EventType' => 'starred', 'entry_title' => $entry_name, 'form_name' => $form['title'], 'form_id' => $form['id'], 'EntryLink' => $editor_link, ); Alert_Manager::trigger_event( 5710, $variables ); } // Unstarred. if ( $previous_value !== $property_value && ! $property_value ) { $variables = array( 'EventType' => 'unstarred', 'entry_title' => $entry_name, 'form_name' => $form['title'], 'form_id' => $form['id'], 'EntryLink' => $editor_link, ); Alert_Manager::trigger_event( 5710, $variables ); } } elseif ( 'is_read' === $item_being_updated ) { // Starred. if ( $property_value ) { $variables = array( 'EventType' => 'read', 'entry_title' => $entry_name, 'form_name' => $form['title'], 'form_id' => $form['id'], 'EntryLink' => $editor_link, ); Alert_Manager::trigger_event( 5711, $variables ); } // Unstarred. if ( ! $property_value ) { $variables = array( 'EventType' => 'unread', 'entry_title' => $entry_name, 'form_name' => $form['title'], 'form_id' => $form['id'], 'EntryLink' => $editor_link, ); Alert_Manager::trigger_event( 5711, $variables ); } } else { $variables = array( 'entry_name' => sanitize_text_field( $entry_name ), 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], 'EntryLink' => $editor_link, ); Alert_Manager::trigger_event( 5717, $variables ); } } } /** * Handles forms being imported. * * @param array $forms - new form data. * * @return void * * @since 4.6.0 */ public static function event_forms_imported( $forms ) { foreach ( $forms as $form ) { $variables = array( 'EventType' => 'imported', 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], ); Alert_Manager::trigger_event( 5719, $variables ); } } /** * Handles triggering an event during export of fields. * * @param array $form The Form object to get the entries from. * @param string $start_date The start date for when the export of entries should take place. * @param string $end_date The end date for when the export of entries should stop. * @param array $fields The specified fields where the entries should be exported from. * @param string $export_id A unique ID for the export. * * @since 4.6.0 */ public static function event_process_export( $form, $start_date, $end_date, $fields, $export_id ) { if ( isset( $_POST['export_form'] ) && check_admin_referer( 'rg_start_export', 'rg_start_export_nonce' ) ) { $form = \GFAPI::get_form( sanitize_text_field( wp_unslash( $_POST['export_form'] ) ) ); $variables = array( 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => sanitize_text_field( wp_unslash( $_POST['export_form'] ) ), 'start' => ( ! empty( $start_date ) ) ? sanitize_text_field( wp_unslash( $start_date ) ) : esc_html__( 'Not supplied', 'wsal-gravityforms' ), 'end' => ( ! empty( $end_date ) ) ? sanitize_text_field( wp_unslash( $end_date ) ) : esc_html__( 'Not supplied', 'wsal-gravityforms' ), ); Alert_Manager::trigger_event( 5718, $variables ); } } /** * Report event when forms are exported. * * @param string $filename - Export filename. * @param array $form_ids - Ids being exported. * * @return string $filename - Original filename. * * @since 4.6.0 */ public static function event_process_export_forms( $filename, $form_ids ) { foreach ( $form_ids as $form_id ) { $form = \GFAPI::get_form( $form_id ); $alert_code = 5719; $variables = array( 'EventType' => 'exported', 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form_id, ); Alert_Manager::trigger_event( $alert_code, $variables ); } return $filename; } /** * Gather form data during an edit so we know what the old form was. * * @param object $form - Form data. * * @return object $form - Form data, passed back so things can continue as normal. * * @since 4.6.0 */ public static function get_before_post_edit_data( $form ) { if ( isset( $form ) ) { if ( ! isset( self::$old_form ) ) { self::$old_form = $form; } } return $form; } /** * Forms created,. * * @param array $form New form data. * @param bool $is_new Is a new form or an update. * * @return void * * @since 4.6.0 */ public static function event_form_saved( $form, $is_new ) { $editor_link = esc_url( add_query_arg( array( 'id' => $form['id'], ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); if ( $is_new ) { // If we are here, then the form being saved is fresh. $variables = array( 'EventType' => 'created', 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5700, $variables ); } } /** * Trigger event when a form is sent to trash. * * @param int $form_id Form ID. * * @return int $form_id Form ID. * * @since 4.6.0 */ public static function event_form_trashed( $form_id ) { $form = \GFAPI::get_form( $form_id ); $editor_link = esc_url( add_query_arg( array( 'id' => $form['id'], ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $variables = array( 'EventType' => 'deleted', 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5701, $variables ); return $form_id; } /** * Trigger an event when a form is deleted. * * @param int $form_id Form ID. * * @return void * * @since 4.6.0 */ public static function event_form_deleted( $form_id ) { $form = \GFAPI::get_form( $form_id ); $variables = array( 'EventType' => 'deleted', 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], ); Alert_Manager::trigger_event( 5702, $variables ); } /** * Trigger an event when a form is duplicated. * * @param int $form_id Form ID. * @param int $new_id New form ID. * * @return void * * @since 4.6.0 */ public static function event_form_duplicated( $form_id, $new_id ) { $original_form = \GFAPI::get_form( $form_id ); $new_form = \GFAPI::get_form( $new_id ); $editor_link = esc_url( add_query_arg( array( 'id' => $new_form['id'], ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $variables = array( 'EventType' => 'duplicated', 'original_form_name' => sanitize_text_field( $original_form['title'] ), 'new_form_name' => sanitize_text_field( $new_form['title'] ), 'original_form_id' => sanitize_text_field( $original_form['id'] ), 'new_form_id' => sanitize_text_field( $new_form['id'] ), 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5704, $variables ); } /** * Trigger an event when a form is activated. * * @param int $form_id Form ID. * * @return void * * @since 5.1.0 */ public static function event_form_activated( $form_id ) { $original_form = \GFAPI::get_form( $form_id ); $editor_link = \esc_url( \add_query_arg( array( 'id' => $form_id, ), \network_admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $variables = array( 'EventType' => 'activated', 'form_name' => sanitize_text_field( $original_form['title'] ), 'form_id' => sanitize_text_field( $original_form['id'] ), 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5720, $variables ); } /** * Trigger an event when a form is deactivated. * * @param int $form_id Form ID. * * @return void * * @since 4.6.0 */ public static function event_form_deactivated( $form_id ) { $original_form = \GFAPI::get_form( $form_id ); $editor_link = \esc_url( \add_query_arg( array( 'id' => $form_id, ), \network_admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $variables = array( 'EventType' => 'deactivated', 'form_name' => sanitize_text_field( $original_form['title'] ), 'form_id' => sanitize_text_field( $original_form['id'] ), 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5720, $variables ); } /** * Trigger an event when a form us updated. * * @param array $form_meta - Form metadata. * @param int $form_id - Form id. * @param string $meta_name - Changes item name. * * @return void * * @since 4.6.0 */ public static function event_form_meta_updated( $form_meta, $form_id, $meta_name ) { if ( isset( self::$old_form ) ) { $form = (array) \GFAPI::get_form( $form_id ); // Compare the 2 arrays and create array of changed. $compare_changed_items = array_diff_assoc( array_map( 'serialize', $form ), array_map( 'serialize', self::$old_form ) ); $changed_data = array_map( 'unserialize', $compare_changed_items ); foreach ( $changed_data as $changed_setting => $value ) { if ( 'confirmations' === $changed_setting ) { $old_confirmations = self::$old_form['confirmations']; $compare_changed_items = array_diff_assoc( array_map( 'serialize', $value ), array_map( 'serialize', $old_confirmations ) ); $changed_items = array_map( 'unserialize', $compare_changed_items ); $alert_code = 5708; $editor_link = esc_url( add_query_arg( array( 'id' => $form['id'], ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); foreach ( $changed_items as $confirmation ) { if ( ! Alert_Manager::was_triggered_recently( 5705 ) ) { if ( empty( $confirmation['isActive'] ) ) { $active_state = 'deactivated'; } else { $active_state = 'activated'; } $variables = array( 'EventType' => $active_state, 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], 'confirmation_name' => sanitize_text_field( $confirmation['name'] ), 'confirmation_type' => $confirmation['type'], 'confirmation_message' => $confirmation['message'], 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event_if( $alert_code, $variables, array( __CLASS__, 'check_if_new_confirmation' ) ); } } } // Handle form notifications. if ( 'notifications' === $changed_setting ) { $old_fields = self::$old_form[ $changed_setting ]; $alert_code = 5706; $event_type = false; $new_fields_count = count( json_decode( $form_meta, true ) ); $old_fields_count = count( $old_fields ); if ( $new_fields_count > $old_fields_count ) { $event_type = 'created'; } if ( $new_fields_count === $old_fields_count ) { $event_type = 'modified'; } $notification_id = ( 'created' !== $event_type ) ? rgpost( 'gform_notification_id' ) : key( array_slice( $value, -1, 1, true ) ); $editor_link = esc_url( add_query_arg( array( 'id' => $form['id'], 'nid' => $notification_id, 'view' => 'settings', 'subview' => 'notification', ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); if ( 'created' === $event_type ) { $notification = $value[ $notification_id ]; } else { // If there is no such notification (notificationId is the key) then notification has been deleted, // that event wont be triggered and array with empy name is just to fulfill the logic later on. $notification = ( isset( $value[ $notification_id ] ) ) ? $value[ $notification_id ] : array( 'name' => '' ); } if ( isset( $_REQUEST['action'] ) && 'duplicate' === $_REQUEST['action'] && count( $value ) > count( $old_fields ) ) { $event_type = 'duplicated'; } $title = $notification['name']; if ( '' === trim( $title ) ) { $title = esc_html__( '-- UNTITLED --', 'wsal-gravityforms' ); } $variables = array( 'EventType' => $event_type, 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], 'notification_name' => sanitize_text_field( $title ), 'EditorLinkForm' => $editor_link, ); if ( $event_type ) { Alert_Manager::trigger_event_if( $alert_code, $variables, /** * The WSAL alert manager. * * @return bool */ function () { // don't fire if there's already an event 5707. return ! Alert_Manager::will_or_has_triggered( 5707 ); } ); } } if ( 'fields' === $changed_setting ) { $notification_id = rgpost( 'gform_notification_id' ); $notification_data = array(); if ( $notification_id && '' !== trim( $notification_id ) && isset( $form['notifications'][ $notification_id ] ) ) { $notification_data = $form['notifications'][ $notification_id ]; } $old_fields = self::$old_form['fields']; $current_fields = $value; $compare_added_items = array_diff( array_map( 'serialize', $current_fields ), array_map( 'serialize', $old_fields ) ); $added_items = array_map( 'unserialize', $compare_added_items ); $compare_removed_items = array_diff( array_map( 'serialize', $old_fields ), array_map( 'serialize', $current_fields ) ); $removed_items = array_map( 'unserialize', $compare_removed_items ); $compare_changed_items = array_diff_assoc( array_map( 'serialize', $current_fields ), array_map( 'serialize', $old_fields ) ); $changed_items = array_map( 'unserialize', $compare_changed_items ); // Handle added items. if ( ! empty( $added_items ) && ( count( $current_fields ) > count( $old_fields ) ) ) { foreach ( $added_items as $item ) { // Make sure this field is not a modified field. $ok_to_alert = true; foreach ( $old_fields as $old => $value ) { if ( $value->id === $item->id ) { $ok_to_alert = false; } } if ( $ok_to_alert ) { $editor_link = esc_url( add_query_arg( array( 'id' => $form_id, ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $variables = array( 'EventType' => 'added', 'field_name' => $item->label, 'field_type' => $item->type, 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form_id, 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event_if( 5715, $variables, array( __CLASS__, 'must_not_duplicated_form' ) ); } } } if ( ! empty( $changed_items ) && ( count( $old_fields ) === count( $current_fields ) ) ) { foreach ( $changed_items as $item ) { $ok_to_alert = true; foreach ( $removed_items as $removed => $value ) { if ( $item->id === $value->id ) { unset( $removed_items[ $removed ] ); } } if ( $ok_to_alert ) { $editor_link = esc_url( add_query_arg( array( 'id' => $form_id, ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $variables = array( 'EventType' => 'modified', 'field_name' => $item->label, 'field_type' => $item->type, 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form_id, 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event_if( 5715, $variables, array( __CLASS__, 'must_not_duplicated_form' ) ); } } } if ( ! empty( $removed_items ) && ( count( $old_fields ) > count( $current_fields ) ) ) { foreach ( $removed_items as $item ) { // Make sure this field is not a modified field. $ok_to_alert = true; foreach ( $current_fields as $old => $value ) { if ( $value->id === $item->id && $value->label === $item->label ) { $ok_to_alert = false; } } if ( $ok_to_alert ) { $editor_link = esc_url( add_query_arg( array( 'id' => $form_id, ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $variables = array( 'EventType' => 'removed', 'field_name' => $item->label, 'field_type' => $item->type, 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form_id, 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5715, $variables ); } } } } // Handle personal data settings. if ( 'personalData' === $changed_setting ) { $editor_link = esc_url( add_query_arg( array( 'id' => $form_id, ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); if ( isset( self::$old_form[ $changed_setting ] ) ) { $old_fields = self::$old_form[ $changed_setting ]; } else { $old_fields = array(); } $compare_changed_items = array_diff_assoc( array_map( 'serialize', $value ), array_map( 'serialize', $old_fields ) ); $changed_items = array_map( 'unserialize', $compare_changed_items ); foreach ( $changed_items as $name => $value ) { if ( 'preventIP' === $name ) { $name = 'Prevent the storage of IP addresses'; } elseif ( 'retention' === $name ) { $name = 'Retention policy'; $value = $value['policy']; } elseif ( 'exportingAndErasing' === $name ) { $name = 'Enable integration for exporting and erasing personal data'; $value = $value['enabled']; } $event_type = 'modified'; $old_value = self::$old_form[ $changed_setting ]; if ( is_array( $value ) ) { $value = self::recursive_implode( $value, ' | ', true, false ); } if ( is_array( $old_value ) ) { $old_value = self::recursive_implode( $old_value, ' | ', true, false ); } // Give the value a more useful label. if ( empty( $value ) || 0 === $value ) { $value = 'Disabled'; $event_type = 'disabled'; } elseif ( 1 === $value ) { $value = 'Enabled'; $event_type = 'enabled'; } elseif ( 'retain' === $value ) { $value = 'Retain entries indefinitely'; } elseif ( 'trash' === $value ) { $value = 'Trash entries automatically'; } elseif ( 'delete' === $value ) { $value = 'Delete entries permanently automatically'; } if ( ! Alert_Manager::was_triggered_recently( 5703 ) ) { $variables = array( 'EventType' => $event_type, 'setting_name' => sanitize_text_field( str_replace( '_', ' ', ucfirst( preg_replace( '/([a-z0-9])([A-Z])/', '$1 $2', (string) $name ) ) ) ), 'old_setting_value' => ( isset( self::$old_form[ $changed_setting ] ) && self::$old_form[ $changed_setting ] ) ? $old_value : 'N/A', 'setting_value' => sanitize_text_field( $value ), 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form_id, 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5703, $variables ); } } } else { // Ensure we dont process fields we dont want at this stage. if ( 'is_active' === $changed_setting || 'is_trash' === $changed_setting || 'date_created' === $changed_setting || 'confirmations' === $changed_setting || 'nextFieldId' === $changed_setting || 'notifications' === $changed_setting || 'fields' === $changed_setting ) { continue; } // Handle everything else. if ( isset( self::$old_form[ $changed_setting ] ) ) { $editor_link = esc_url( add_query_arg( array( 'id' => $form_id, ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $old_value = self::$old_form[ $changed_setting ]; $value_unmodified = $value; if ( is_array( $value ) ) { $value = self::recursive_implode( $value, ' | ', true, false ); } if ( is_array( $old_value ) ) { $old_value = self::recursive_implode( $old_value, ' | ', true, false ); } $event_type = 'modified'; switch ( $changed_setting ) { case 'title': $setting_name = esc_html__( 'Form title', 'wsal-gravityforms' ); break; case 'cssClass': $setting_name = esc_html__( 'CSS Class', 'wsal-gravityforms' ); break; case 'description': $setting_name = esc_html__( 'Form title', 'wsal-gravityforms' ); break; case 'enableAnimation': case 'enableHoneypot': case 'requireLogin': case 'scheduleForm': $setting_name = str_replace( '_', ' ', ucfirst( preg_replace( '/([a-z0-9])([A-Z])/', '$1 $2', (string) $changed_setting ) ) ); $event_type = ( 1 === $value ) ? 'enabled' : 'disabled'; // Tidy up bools. if ( ! $old_value && 1 === $value || 1 === $old_value && ! $value ) { $old_value = esc_html__( 'Disabled', 'wsal-gravityforms' ); $value = esc_html__( 'Enabled', 'wsal-gravityforms' ); } break; case 'save': $setting_name = str_replace( '_', ' ', ucfirst( preg_replace( '/([a-z0-9])([A-Z])/', '$1 $2', (string) $changed_setting ) ) ); $event_type = ( isset( $value_unmodified['enabled'] ) && $value_unmodified['enabled'] ) ? 'enabled' : 'disabled'; break; default: $setting_name = sanitize_text_field( str_replace( '_', ' ', ucfirst( preg_replace( '/([a-z0-9])([A-Z])/', '$1 $2', (string) $changed_setting ) ) ) ); } $variables = array( 'EventType' => $event_type, 'setting_name' => $setting_name, 'old_setting_value' => ( $old_value ) ? $old_value : 'N/A', 'setting_value' => ( $value ) ? $value : 'N/A', 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form_id, 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event_if( 5703, $variables, array( __CLASS__, 'must_not_duplicated_form' ) ); } } } } } /** * Check if another relevant event has triggered. * * @return bool * * @since 4.6.0 */ public static function must_not_duplicated_form() { if ( Alert_Manager::will_or_has_triggered( 5704 ) ) { return false; } if ( Alert_Manager::will_or_has_triggered( 5705 ) ) { return false; } if ( Alert_Manager::will_or_has_triggered( 5706 ) ) { return false; } return true; } /** * Check if 5705 specifically has been fired. * * @return bool * * @since 4.6.0 */ public static function check_if_new_confirmation() { if ( Alert_Manager::will_or_has_triggered( 5705 ) ) { return false; } return true; } /** * Trigger an event when a confirmation has been saved. * * @param array $confirmation - Confirmation data. * @param array $form - Form data. * * @return array $confirmation - Confirmation data. * * @since 4.6.0 */ public static function event_form_confirmation_saved( $confirmation, $form ) { $is_an_update = false; // Handle modified confirmations. if ( isset( self::$old_form['confirmations'] ) ) { foreach ( self::$old_form['confirmations'] as $old_confirmation ) { $id_to_lookup = $old_confirmation['id']; // Check if confirmation is found in old form, if so, we know its a modification. if ( $id_to_lookup === $confirmation['id'] ) { $is_an_update = true; } } if ( $is_an_update ) { $editor_link = esc_url( add_query_arg( array( 'id' => $form['id'], ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $message = $confirmation['message']; if ( '' === trim( $message ) ) { $message = esc_html__( '-- NO MESSAGE TEXT --', 'wsal-gravityforms' ); } $variables = array( 'EventType' => 'modified', 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], 'confirmation_name' => sanitize_text_field( $confirmation['name'] ), 'confirmation_type' => $confirmation['type'], 'confirmation_message' => $message, 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5705, $variables ); } else { $editor_link = esc_url( add_query_arg( array( 'id' => $form['id'], ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $message = $confirmation['message']; if ( '' === trim( $message ) ) { $message = esc_html__( '-- NO MESSAGE TEXT --', 'wsal-gravityforms' ); } $variables = array( 'EventType' => 'created', 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], 'confirmation_name' => sanitize_text_field( $confirmation['name'] ), 'confirmation_type' => $confirmation['type'], 'confirmation_message' => $message, 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5705, $variables ); } } return $confirmation; } /** * Trigger event if confirmation is deleted. * * @param array $confirmation - Confirmation data. * @param array $form - Form data. * * @return array $confirmation - Confirmation data. * * @since 4.6.0 */ public static function event_form_confirmation_deleted( $confirmation, $form ) { $editor_link = esc_url( add_query_arg( array( 'id' => $form['id'], ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $message = $confirmation['message']; if ( '' === trim( $message ) ) { $message = esc_html__( '-- NO MESSAGE TEXT --', 'wsal-gravityforms' ); } $variables = array( 'EventType' => 'deleted', 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], 'confirmation_name' => sanitize_text_field( $confirmation['name'] ), 'confirmation_type' => $confirmation['type'], 'confirmation_message' => $message, 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5705, $variables ); return $confirmation; } /** * Trigger event if notification is deleted. * * @param array $notification - Notification data. * @param array $form - Form data. * * @return array $notification - Notification data. * * @since 4.6.0 */ public static function event_form_notification_deleted( $notification, $form ) { $editor_link = esc_url( add_query_arg( array( 'id' => $form['id'], ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $title = $notification['name']; if ( '' === trim( $title ) ) { $title = esc_html__( '-- UNTITLED --', 'wsal-gravityforms' ); } $variables = array( 'EventType' => 'deleted', 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], 'notification_name' => sanitize_text_field( $title ), 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5706, $variables ); return $notification; } /** * Process and triggers the event loging. * * @param array $notification - Notification data. * @param GFFormsModel $form - Form data. * @param string $event_type - Current event type. * * @return array $notification - Notification data. * * @since 4.6.0 */ private static function form_activation_deactivation_event_log( $notification, $form, string $event_type ) { $editor_link = esc_url( add_query_arg( array( 'id' => $form['id'], ), admin_url( 'admin.php?page=gf_edit_forms' ) ) ); $variables = array( 'EventType' => $event_type, 'form_name' => sanitize_text_field( $form['title'] ), 'form_id' => $form['id'], 'notification_name' => sanitize_text_field( $notification['name'] ), 'EditorLinkForm' => $editor_link, ); Alert_Manager::trigger_event( 5707, $variables, true ); return $notification; } /** * A notificationw as activated. * * @param array $notification - Notification data. * @param GFFormsModel $form - Form data. * * @return array $notification - Notification data. * * @since 4.6.0 */ public static function event_form_notification_activated( $notification, $form ) { return self::form_activation_deactivation_event_log( $notification, $form, 'activated' ); } /** * A notification is deactivated. * * @param array $notification - Notification data. * @param GFFormsModel $form - Form data. * * @return array $notification - Notification data. * * @since 4.6.0 */ public static function event_form_notification_deactivated( $notification, $form ) { return self::form_activation_deactivation_event_log( $notification, $form, 'deactivated' ); } /** * Trigger event when an entry is deleted. * * @param int $entry_id - Entry ID. * * @return void * * @since 4.6.0 */ public static function event_form_entry_deleted( $entry_id ) { $entry = \GFAPI::get_entry( $entry_id ); if ( ! \is_wp_error( $entry ) ) { $form = \GFAPI::get_form( $entry['form_id'] ); $entry_name = self::determine_entry_name( $entry ); $variables = array( 'EventType' => 'deleted', 'entry_title' => $entry_name, 'form_name' => $form['title'], 'form_id' => $form['id'], ); Alert_Manager::trigger_event( 5713, $variables ); } } /** * Trigger an event when an entry is trashed. * * @param int $entry_id - Entry ID. * @param string $property_value - New value. * @param string $previous_value - Old value. * * @return void * * @since 4.6.0 */ public static function event_form_entry_trashed( $entry_id, $property_value, $previous_value ) { if ( $previous_value !== $property_value && 'trash' === $property_value ) { $entry = \GFAPI::get_entry( $entry_id ); if ( ! \is_wp_error( $entry ) ) { $form = \GFAPI::get_form( $entry['form_id'] ); $entry_name = self::determine_entry_name( $entry ); $editor_link = esc_url( add_query_arg( array( 'view' => 'entry', 'id' => $entry['form_id'], 'lid' => $entry_id, ), admin_url( 'admin.php?page=gf_entries' ) ) ); $variables = array( 'EventType' => 'deleted', 'event_desc' => esc_html__( 'moved to trash', 'wp-security-audit-log' ), 'entry_title' => $entry_name, 'form_name' => $form['title'], 'form_id' => $form['id'], 'EntryLink' => $editor_link, ); Alert_Manager::trigger_event( 5712, $variables ); } } if ( $previous_value !== $property_value && 'active' === $property_value ) { $entry = \GFAPI::get_entry( $entry_id ); if ( ! \is_wp_error( $entry ) ) { $form = \GFAPI::get_form( $entry['form_id'] ); $entry_name = self::determine_entry_name( $entry ); $editor_link = esc_url( add_query_arg( array( 'view' => 'entry', 'id' => $entry['form_id'], 'lid' => $entry_id, ), admin_url( 'admin.php?page=gf_entries' ) ) ); $variables = array( 'EventType' => 'restored', 'event_desc' => esc_html__( 'restored', 'wp-security-audit-log' ), 'entry_title' => $entry_name, 'form_name' => $form['title'], 'form_id' => $form['id'], 'EntryLink' => $editor_link, ); Alert_Manager::trigger_event( 5712, $variables ); } } } /** * Trigger an event when a note is added to an entry. * * @param int $insert_id - Note ID. * @param int $entry_id - Entry ID. * @param int $user_id - User ID. * @param string $user_name - User name. * @param string $note - Note content. * @param string $note_type - Note type. * * @return void * * @since 4.6.0 */ public static function event_form_entry_note_added( $insert_id, $entry_id, $user_id, $user_name, $note, $note_type ) { if ( 'user' === $note_type ) { $entry = \GFAPI::get_entry( $entry_id ); if ( ! \is_wp_error( $entry ) ) { $form = \GFAPI::get_form( $entry['form_id'] ); $entry_name = self::determine_entry_name( $entry ); $editor_link = esc_url( add_query_arg( array( 'view' => 'entry', 'id' => $entry['form_id'], 'lid' => $entry_id, ), admin_url( 'admin.php?page=gf_entries' ) ) ); $variables = array( 'EventType' => 'added', 'entry_note' => $note, 'entry_title' => $entry_name, 'form_name' => $form['title'], 'form_id' => $form['id'], 'EntryLink' => $editor_link, ); Alert_Manager::trigger_event( 5714, $variables ); } } } /** * Handle entry notes being deleted. * * @param int $note_id - Note ID. * @param int $lead_id - Lead ID. * * @since 4.6.0 */ public static function event_form_entry_note_deleted( $note_id, $lead_id ) { $entry = \GFAPI::get_entry( $lead_id ); if ( ! \is_wp_error( $entry ) ) { $form = \GFAPI::get_form( $entry['form_id'] ); $note = \GFAPI::get_note( $note_id ); $entry_name = self::determine_entry_name( $entry ); $editor_link = esc_url( add_query_arg( array( 'view' => 'entry', 'id' => $entry['form_id'], 'lid' => $lead_id, ), admin_url( 'admin.php?page=gf_entries' ) ) ); $variables = array( 'EventType' => 'deleted', 'entry_note' => $note->value, 'entry_title' => $entry_name, 'form_name' => $form['title'], 'form_id' => $form['id'], 'EntryLink' => $editor_link, ); Alert_Manager::trigger_event( 5714, $variables ); } } /** * Handle global settings changes. * * @param string $option_name - Option being changed. * @param string $old_value - Old value. * @param string $value - New value. * * @since 4.6.0 */ public static function event_settings_updated( $option_name, $old_value, $value ) { if ( ( false !== strpos( $option_name, 'gform' ) || false !== strpos( $option_name, 'gravityforms' ) ) && ( 'gform_version_info' !== $option_name ) || false !== strpos( $option_name, 'gravityformsaddon' ) ) { // Skip settings we dont want. if ( 'rg_gforms_key' === $option_name || 'rg_gforms_message' === $option_name || 'gform_sticky_admin_messages' === $option_name || 'gform_email_count' === $option_name || 'gform_installation_wizard_license_key' === $option_name || 'gform_pending_installation' === $option_name ) { return; } $event_type = 'modified'; $option_found = false; if ( 'rg_gforms_disable_css' === $option_name ) { $option_found = true; $option_name = 'Output CSS'; $event_type = ( 1 === $value['enabled'] ) ? 'enabled' : 'disabled'; $value = ( 1 === $value ) ? 'No' : 'Yes'; $old_value = ( 1 === $old_value ) ? 'No' : 'Yes'; } if ( 'rg_gforms_enable_html5' === $option_name ) { $option_found = true; $option_name = 'Output HTML5'; $event_type = ( 1 === $value['enabled'] ) ? 'enabled' : 'disabled'; $value = ( 1 === $value ) ? 'Yes' : 'No'; $old_value = ( 1 === $old_value ) ? 'Yes' : 'No'; } if ( 'gform_enable_noconflict' === $option_name ) { $option_found = true; $option_name = 'No-Conflict Mode'; $event_type = ( 1 === $value['enabled'] ) ? 'enabled' : 'disabled'; $value = ( 1 === $value ) ? 'On' : 'Off'; $old_value = ( 1 === $old_value ) ? 'On' : 'Off'; } if ( 'rg_gforms_currency' === $option_name ) { $option_found = true; $option_name = 'Currency'; } if ( 'gform_enable_background_updates' === $option_name ) { $option_found = true; $option_name = 'Background updates'; $event_type = ( $value ) ? 'enabled' : 'disabled'; $value = ( 1 === $value ) ? 'On' : 'Off'; $old_value = ( 1 === $old_value ) ? 'On' : 'Off'; } if ( 'gform_enable_toolbar_menu' === $option_name ) { $option_found = true; $option_name = 'Toolbar menu'; $event_type = ( 1 === $value['enabled'] ) ? 'enabled' : 'disabled'; $value = ( 1 === $value ) ? 'On' : 'Off'; $old_value = ( 1 === $old_value ) ? 'On' : 'Off'; } if ( 'gform_enable_logging' === $option_name ) { $option_found = true; $option_name = 'Logging'; $event_type = ( 1 === $value['enabled'] ) ? 'enabled' : 'disabled'; $value = ( 1 === $value ) ? 'On' : 'Off'; $old_value = ( 1 === $old_value ) ? 'On' : 'Off'; } if ( 'rg_gforms_captcha_type' === $option_name ) { $option_found = true; $option_name = 'Captcha type'; } if ( 'gravityformsaddon_gravityformswebapi_settings' === $option_name ) { $option_found = true; $option_name = 'Gravity Forms API Settings'; $event_type = ( 1 === $value['enabled'] ) ? 'enabled' : 'disabled'; $value = ( 1 === $value['enabled'] ) ? 'On' : 'Off'; $old_value = ( 1 === $old_value['enabled'] ) ? 'On' : 'Off'; } if ( 'rg_gforms_enable_akismet' === $option_name ) { $option_found = true; if ( ! isset( $old_value['enabled'] ) ) { return; } $option_name = 'Enable akisment'; $event_type = ( 1 === $value['enabled'] ) ? 'enabled' : 'disabled'; $value = ( isset( $value['enabled'] ) && 1 === $value['enabled'] ) ? 'On' : 'Off'; $old_value = ( isset( $old_value['enabled'] ) && 1 === $old_value['enabled'] ) ? 'On' : 'Off'; } if ( $option_found ) { $alert_code = 5716; $variables = array( 'EventType' => $event_type, 'setting_name' => $option_name, 'old_value' => $old_value, 'new_value' => $value, ); Alert_Manager::trigger_event( $alert_code, $variables ); } } } /** * Handle form submission. * * @param array $entry - Entry data. * @param string $form - From data. * * @since 4.6.0 */ public static function event_form_submitted( $entry, $form ) { // Determine from address by validating entry items. $from_addresss = ''; foreach ( $entry as $entry_item => $item ) { if ( filter_var( $item, FILTER_VALIDATE_EMAIL ) ) { $from_addresss = $item; } } if ( empty( $from_addresss ) ) { $from_addresss = esc_html__( 'Not provided', 'wp-security-audit-log' ); } $editor_link = esc_url( add_query_arg( array( 'view' => 'entry', 'id' => $form['id'], 'lid' => $entry['id'], ), admin_url( 'admin.php?page=gf_entries' ) ) ); $variables = array( 'EventType' => 'submitted', 'form_name' => $form['title'], 'form_id' => $form['id'], 'email' => $from_addresss, 'EntryLink' => $editor_link, ); Alert_Manager::trigger_event( 5709, $variables ); } /** * Recursively implodes an array with optional key inclusion. * * Example of $include_keys output: key, value, key, value, key, value * * @param array $array multi-dimensional array to recursively implode. * @param string $glue Thing to stick the results together with. * @param bool $include_keys include keys before their values. * @param bool $trim_all trim ALL whitespace from string. * * @return string imploded array * * @since 4.6.0 */ public static function recursive_implode( array $array, $glue = ',', $include_keys = false, $trim_all = true ) { $glued_string = ''; // Recursively iterates array and adds key/value to glued string. array_walk_recursive( $array, function ( $value, $key ) use ( $glue, $include_keys, &$glued_string ) { if ( $value ) { $tidy_key = str_replace( ',', '', str_replace( '_', ' ', ucfirst( preg_replace( '/([a-z0-9])([A-Z])/', '$1 $2', (string) $key ) ) ) ) . ': '; $include_keys && $glued_string .= $tidy_key; $glued_string .= $value . $glue; } } ); // Removes last $glue from string. strlen( $glue ) > 0 && $glued_string = substr( $glued_string, 0, -strlen( $glue ) ); // phpcs:ignore // Trim ALL whitespace. $trim_all && $glued_string = preg_replace( '/(\s)/ixsm', '', (string) $glued_string ); // phpcs:ignore return (string) $glued_string; } /** * Determine the name for a given, entry. * * @param array $entry - Entry to determine name of. * * @return string $entry_name - The name. * * @since 4.6.0 */ public static function determine_entry_name( $entry ) { $property_ids = array( '1', '2', '3', ); foreach ( $property_ids as $id ) { $have_name = \rgar( $entry, $id ); if ( ! empty( $have_name ) ) { return $have_name; } } return esc_html__( 'Not found', 'wp-security-audit-log' ); } } }
Edit
Rename
Chmod
Delete
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