wpdb->get_row( $this->wpdb->prepare( 'SELECT * FROM ' . $this->table_name( 'wp_logs' ) . ' WHERE log_id = %d ', $log_id ) ); //phpcs:ignore -- ok. } /** * Method update_log(). * * @param array $data Log data. * * @return mixed */ public function update_log( $data ) { if ( empty( $data ) || ! is_array( $data ) || empty( $data['log_id'] ) ) { return false; } $log_id = $data['log_id']; unset( $data['log_id'] ); return $this->wpdb->update( $this->table_name( 'wp_logs' ), $data, array( 'log_id' => $log_id ) ); } /** * Method remove_logs_by(). * * @param int $site_id Site ID. * * @return void. */ public function remove_logs_by( $site_id ) { //phpcs:ignore -- NOSONAR -complex. //phpcs:disable $this->wpdb->query( $this->wpdb->prepare( 'DELETE lo, me FROM ' . $this->table_name( 'wp_logs' ) . ' lo JOIN ' . $this->table_name( 'wp_logs_meta' ) . ' me ON lo.log_id = me.meta_log_id WHERE lo.site_id = %d', $site_id ) ); //phpcs:enable } /** * Method dismiss_all_changes(). * * Handle dismiss all sites changes. * * @return mixed */ public function dismiss_all_changes() { return $this->wpdb->update( $this->table_name( 'wp_logs' ), array( 'dismiss' => 1 ), array( 'dismiss' => 0 ) ); } /** * Method count_events(). * * @return mixed Count events. */ public function count_events() { return $this->wpdb->get_var( 'SELECT count(*) FROM ' . $this->table_name( 'wp_logs' ) . ' WHERE dismiss = 0 ' ); //phpcs:ignore -- ok. } /** * Method get_logs_users(). * * @return array Users list. */ public function get_logs_users() { //phpcs:ignore -- NOSONAR -complex. $where = MainWP_DB::instance()->get_sql_where_allow_access_sites( 'wp' ); $sql = 'SELECT lo.log_id, lo.site_id, lo.user_id, lo.connector, wp.name, me.meta_log_id, me.meta_key, me.meta_value ' . ', CASE WHEN connector != "non-mainwp-changes" THEN "dashboard" ELSE "wpadmin" END AS log_source ' . ' FROM ' . $this->table_name( 'wp_logs' ) . ' lo ' . ' LEFT JOIN ' . $this->table_name( 'wp' ) . ' wp ON lo.site_id = wp.id ' . ' LEFT JOIN ' . $this->table_name( 'wp_logs_meta' ) . ' me ON lo.log_id = me.meta_log_id ' . ' WHERE me.meta_key = "user_meta_json" ' . $where . ' GROUP BY site_id, user_id, log_source '; $users_sites_logs = $this->wpdb->get_results( $sql ); //phpcs:ignore -- ok. if ( $users_sites_logs ) { $logs_users = array(); $dash_users = array(); foreach ( $users_sites_logs as $item ) { if ( ! empty( $item->site_id ) && ! empty( $item->name ) && ! empty( $item->meta_value ) ) { $info = json_decode( $item->meta_value, true ); if ( is_array( $info ) ) { if ( ! empty( $info['wp_user_id'] ) ) { // child site users. $logs_users[ $item->log_id ] = array( 'id' => $item->user_id, 'site_id' => $item->site_id, 'login' => $info['action_user'], 'nicename' => $info['display_name'], 'source' => ! empty( $item->name ) ? $item->name : '', 'wp_user_id' => $info['wp_user_id'], ); } elseif ( isset( $info['user_login'] ) ) { // dashboard users. // to prevent add double dashboard users in the users selection. if ( in_array( $item->user_id, $dash_users ) ) { continue; } $dash_users[] = $item->user_id; $nicename = ! empty( $info['user_login'] ) ? $info['user_login'] : ''; if ( empty( $nicename ) ) { if ( ! empty( $info['agent'] ) ) { $nicename = $info['agent']; } else { $nicename = 'N/A'; } } $logs_users[ $item->log_id ] = array( 'id' => (int) $item->user_id, 'site_id' => $item->site_id, 'login' => $info['user_login'], 'nicename' => $nicename, 'source' => 'dashboard', ); } } } } return $logs_users; } return array(); } }