addons = []; $this->addons = apply_filters('age_gate_addons', $this->addons); $this->addons = array_unique($this->addons, SORT_REGULAR); $this->get = $this->validation->sanitize($_GET); if(isset($this->get['addon']) && isset($this->addons[$this->get['addon']])){ $this->addon = $this->addons[$this->get['addon']]; $this->addon['id'] = $this->get['addon']; } } public function register_addons() { if($this->addons){ add_action('admin_menu', [$this, 'addons_page'], 11); add_filter('age_gate_admin_tabs', [$this, 'addons_tab']); } } public function addons_tab($tabs) { return array_merge($tabs, [ 'age-gate-addons' => array( 'cap' => 'ag_manage_appearance', 'title' => _x('Addons', 'Admin tab title', 'age-gate') ), ]); } public function addons_page() { add_submenu_page( 'age-gate', __('Age Gate Addons', 'age-gate'), __('Addons', 'age-gate'), 'ag_manage_appearance', 'age-gate-addons', [$this, 'addon_page'] ); } public function addon_page() { include AGE_GATE_PATH . 'admin/partials/age-gate-admin-addons.php'; } public function _check_cap() { if(is_admin() && isset($this->get['page']) && $this->get['page'] === 'age-gate-addons' && isset($this->get['addon']) && !empty($this->get['addon']) ){ $id = $this->get['addon']; if(!isset($this->addons[$id]['has_options']) || $this->addons[$id]['has_options'] !== true){ $this->_deny_access(); } if(!isset($this->addons[$id]['cap'])){ $this->_deny_access(); } if(!current_user_can($this->addons[$id]['cap'])){ $this->_deny_access(); } } } /** * Handle settings post from form * @return mixed * @since 2.0.0 */ public function handle_form_submission() { $post = $this->validation->sanitize($_POST); if ( ! isset( $post['nonce'] ) || ! wp_verify_nonce( $post['nonce'], 'age_gate_addon' ) ) { $this->_set_admin_notice( array('message' => __('Sorry, your nonce did not verify.', 'age-gate'), 'status' => 'error') ); // set_transient( 'age_gate_admin_notice', ); wp_redirect($post['_wp_http_referer']); exit; } $validation = []; $validation = apply_filters("age_gate_addon_{$post['addon']}_validation", $validation); $is_valid = $this->validation->is_valid($post['ag_settings'], $validation); if($is_valid !== true){ $errors = ''; foreach ($is_valid as $key => $value) { $errors .= $value['message'] . '
'; } $this->_set_admin_notice( array('message' => __($errors, 'age-gate'), 'status' => 'error') ); } else { update_option("wp_age_gate_addon_{$post['addon']}", $post['ag_settings']); $this->_set_admin_notice( array('message' => __('Settings saved successfully.', 'age-gate'), 'status' => 'success') ); } wp_redirect($post['_wp_http_referer']); exit; // add validation rules } private function _addon_icon($addon) { if(isset($addon['icon']) && !empty($addon['icon'])){ $img = '%s'; return sprintf($img, $addon['icon'], $addon['name']); } } private function _deny_access() { do_action( 'admin_page_access_denied' ); wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } }