Files
szkoleniauryzaj.pl/wp-content/plugins/password-protected/includes/activity-report-email/class-password-protected-activity-logs.php
2026-04-26 23:47:49 +02:00

241 lines
5.8 KiB
PHP

<?php
defined( 'ABSPATH' ) || exit;
if ( ! class_exists( 'Password_Protected_Activity_Logs' ) ) {
class Password_Protected_Activity_Logs {
/**
* table
*
* @var mixed
*/
private static $table;
/**
* now
*
* @var int
*/
public static $now = 0;
/**
* Method __construct
*/
public function __construct() {
self::$now = current_time( 'timestamp' );
self::$table = 'pp_activity_logs';
$database_updated = get_option( 'pp_activity_logs_db_updated' );
if ( ! $database_updated ) {
if ( ! function_exists( 'maybe_add_column' ) ) {
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
}
global $wpdb;
$table_name = $wpdb->prefix . self::$table;
$used_password_col = maybe_add_column(
$table_name,
'used_password',
'ALTER TABLE ' . $table_name . ' ADD `used_password` VARCHAR ( 255 ) NULL AFTER `status`'
);
$password_id_col = maybe_add_column(
$table_name,
'password_id',
'ALTER TABLE ' . $table_name . ' ADD `password_id` VARCHAR( 255 ) NULL AFTER `id`'
);
$object_type_col = maybe_add_column(
$table_name,
'object_type',
'ALTER TABLE ' . $table_name . ' ADD `object_type` VARCHAR( 255 ) NULL AFTER `status`'
);
if ( $used_password_col && $password_id_col && $object_type_col ) {
update_option( 'pp_activity_logs_db_updated', true );
}
}
}
/**
* Method get_items
*
* @return array|object|stdClass[]|null
*/
public static function get_items() {
global $wpdb;
$table_name = $wpdb->prefix . self::$table;
$search_term = self::check_for_search();
$filter = self::check_for_filter();
$timestamp = self::get_time_from_keyword( $filter );
if( $filter != NULL && !empty( $timestamp ) )
$query = " WHERE `created_at` BETWEEN " . reset( $timestamp ) . " AND " . end( $timestamp );
else
$query = "";
if( $search_term == NULL ) {
$search = $query . " ORDER BY `id` DESC";
} else {
$query = empty($query) ? '' : str_replace( "WHERE", "and", $query );
$search = "WHERE CONCAT_WS( ' ', `ip`, `browser`, `status` ) LIKE '%$search_term%'" . $query;
}
$logs = $wpdb->get_results(
" SELECT * FROM $table_name " . $search,
ARRAY_A
);
if( !is_wp_error( $logs ) && count( $logs ) > 0 )
return $logs;
else
return array();
}
/**
* Method add_item
*
* @param $request $request
*
* @return bool|int|mysqli_result|null
*/
public static function add_item( $request ) {
global $wpdb;
$table_name = $wpdb->prefix . self::$table;
$data = array(
'ip' => $request['ip'],
'browser' => $request['browser'],
'status' => $request['status'],
'created_at' => $request['created_at'],
'used_password' => $request['used_password'],
'password_id' => $request['password_id'],
'object_type' => $request['object_type'],
);
$format = array( '%s', '%s', '%s', '%s' );
return $wpdb->insert( $table_name, $data, $format );
}
/**
* delete_item
*
* @param mixed $id
*
* @return bool|int|mysqli_result|null
*/
public static function delete_item( $id ) {
global $wpdb;
return $wpdb->delete(
$wpdb->prefix . self::$table,
['id' => $id],
['%d']
);
}
/**
* delete_items
*
* @param mixed $ids
*/
public static function delete_items( $ids ) {
global $wpdb;
$table_name = $wpdb->prefix . self::$table;
$wpdb->query( "DELETE FROM `{$table_name}` WHERE ID IN( $ids )" );
}
/**
* delete_all_items
*/
public static function delete_all_items() {
global $wpdb;
$table_name = $wpdb->prefix . self::$table;
$wpdb->query("TRUNCATE TABLE $table_name");
}
/**
* check_for_search
*
* @return string|null
*/
public static function check_for_search() {
if( isset( $_POST['s'] ) ) {
if ( ! isset( $_POST['search_activity_logs_nonce'] ) || ! wp_verify_nonce( $_POST['search_activity_logs_nonce'], 'password_protected_search_activity_logs' ) ) {
wp_die('Sorry, your nonce did not verify.');
}
return trim( sanitize_text_field( $_POST['s'] ) );
} else {
return null;
}
}
/**
* check_for_filter
*
* @return string|null
*/
public static function check_for_filter() {
if( isset( $_GET['show_logs'] ) ) {
$nonce = sanitize_text_field( $_GET['_wpnonce'] );
if( ! wp_verify_nonce( $nonce, 'activity-logs-filter' ) ) {
wp_die( __( 'Security check: Your nonce did not verify!', 'password-protected-pro' ) );
} else {
return sanitize_text_field( $_GET['show_logs'] );
}
}
return null;
}
/**
* get_time_from_keyword
*
* @param mixed $keyword
*
* @return array
*/
public static function get_time_from_keyword( $keyword = '' ) {
$today = strtotime( date( 'Y-m-d' ) . ' midnight', self::$now );
$todays_date = date( 'd', self::$now );
$weekday = date( 'w', self::$now );
$result = array();
$keyword = strtolower( (string) $keyword );
// Today
if ( $keyword === 'today' ) {
$result[] = $today;
$result[] = self::$now;
}
// Yesterday
elseif ( $keyword === 'yesterday' ) {
$result[] = strtotime( '-1 day midnight', self::$now );
$result[] = strtotime( 'today midnight', self::$now );
}
// This week
elseif ( $keyword === 'thisweek' ) {
$thisweek = strtotime( '-' . ( $weekday+1 ) . ' days midnight', self::$now );
if ( get_option( 'start_of_week' ) == $weekday )
$thisweek = $today;
$result[] = $thisweek;
$result[] = self::$now;
}
// This month
elseif ( $keyword === 'thismonth' ) {
$result[] = strtotime( date( 'Y-m-01' ) . ' midnight', self::$now );
$result[] = self::$now;
}
return $result;
}
}
}
new Password_Protected_Activity_Logs();