, Wow-Company * @copyright 2024 Dmytro Lobov * @license GPL-2.0+ */ namespace FloatMenuLite\Admin; defined( 'ABSPATH' ) || exit; use FloatMenuLite\WOWP_Plugin; class Settings { public function __construct() { // add_action('wp_ajax_'.WOWP_Plugin::PREFIX . '_ajax_settings', [$this, 'save_item']); } public static function init(): void { $pages = DashboardHelper::get_files( 'settings' ); $options = self::get_options(); $checked = $options['setting_tab'] ?? 1; echo '

'; foreach ( $pages as $key => $page ) { $class = ( absint( $checked ) === $key ) ? ' selected' : ''; echo ''; } echo '

'; echo '
'; foreach ( $pages as $key => $page ) { $file = DashboardHelper::get_folder_path( 'settings' ) . '/' . $key . '.' . $page['file'] . '.php'; echo ''; if ( file_exists( $file ) ) { echo '
'; require_once $file; echo '
'; } } echo '
'; } public static function save_item() { $raw_data = file_get_contents('php://input'); $request = json_decode($raw_data, true); if (json_last_error() !== JSON_ERROR_NONE) { wp_send_json_error(['message' => 'Invalid JSON']); } if (!isset($request['security']) || !wp_verify_nonce($request['security'], WOWP_Plugin::PREFIX . '_settings')) { wp_send_json_error(['message' => 'Invalid nonce'], 400); } if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( [ 'message' => 'Permission denied' ], 403 ); } $info = ( isset( $request['info'] ) && is_array( $request['info'] ) ) ? $request['info'] : []; $id = isset( $info['tool_id'] ) ? absint( $info['tool_id'] ) : 0; $param = ( isset( $info['param'] ) && is_array( $info['param'] ) ) ? $info['param'] : []; $settings = apply_filters( WOWP_Plugin::PREFIX . '_save_settings', $param ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound $data = [ 'title' => isset( $info['title'] ) ? sanitize_text_field( wp_unslash( $info['title'] ) ) : '', 'status' => isset( $info['status'] ) ? 1 : 0, 'mode' => isset( $info['mode'] ) ? 1 : 0, 'tag' => isset( $info['tag'] ) ? sanitize_text_field( wp_unslash( $info['tag'] ) ) : '', 'param' => maybe_serialize( $settings ), ]; $formats = [ '%s', '%d', '%d', '%s', '%s' ]; if ( empty( $id ) ) { $id_item = DBManager::insert( $data, $formats ); } else { $where = [ 'id' => absint( $id ), ]; DBManager::update( $data, $where, $formats ); $id_item = $id; } wp_send_json_success(['id' => absint($id_item) ]); exit; // phpcs:enable } public static function deactivate_item( $id = 0 ): void { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $id = isset( $_GET['id'] ) ? absint( $_GET['id'] ) : $id; if ( ! empty( $id ) ) { DBManager::update( [ 'status' => '1' ], [ 'id' => $id ], [ '%d' ] ); } } public static function activate_item( $id = 0 ): void { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $id = isset( $_GET['id'] ) ? absint( $_GET['id'] ) : $id; if ( ! empty( $id ) ) { DBManager::update( [ 'status' => '' ], [ 'id' => $id ], [ '%d' ] ); } } public static function deactivate_mode( $id = 0 ): void { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $id = isset( $_GET['id'] ) ? absint( $_GET['id'] ) : $id; if ( ! empty( $id ) ) { DBManager::update( [ 'mode' => '' ], [ 'id' => $id ], [ '%d' ] ); } } public static function activate_mode( $id = 0 ): void { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $id = isset( $_GET['id'] ) ? absint( $_GET['id'] ) : $id; if ( ! empty( $id ) ) { DBManager::update( [ 'mode' => '1' ], [ 'id' => $id ], [ '%d' ] ); } } public static function get_options() { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $id = isset( $_REQUEST['id'] ) ? absint( $_REQUEST['id'] ) : 0; if ( empty( $id ) ) { return false; } // phpcs:ignore WordPress.Security.NonceVerification.Recommended $action = isset( $_REQUEST['action'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['action'] ) ) : 'update'; $result = DBManager::get_data_by_id( $id ); if ( empty( $result ) ) { return false; } $param = ( ! empty( $result->param ) ) ? maybe_unserialize( $result->param ) : []; $param['tag'] = $result->tag; $param['status'] = $result->status; $param['mode'] = $result->mode; if ( $action === 'duplicate' ) { $param['id'] = ''; $param['title'] = ''; } else { $param['id'] = $id; $param['title'] = $result->title; } return $param; } public static function option( $name, $options ) { return $options[ $name ] ?? ''; } }