__( 'Access denied', 'jet-engine' ) ) ); } $nonce = ! empty( $_REQUEST['nonce'] ) ? $_REQUEST['nonce'] : false; if ( ! $nonce || ! wp_verify_nonce( $nonce, $this->nonce_key ) ) { wp_send_json_error( array( 'message' => __( 'Nonce validation failed', 'jet-engine' ) ) ); } $item_id = ! empty( $_REQUEST['item_id'] ) ? absint( $_REQUEST['item_id'] ) : false; if ( ! $item_id ) { wp_send_json_error( array( 'message' => __( 'Item ID not found in the request', 'jet-engine' ) ) ); } jet_engine()->glossaries->data->set_request( array( 'id' => $item_id ) ); if ( jet_engine()->glossaries->data->delete_item( false ) ) { return wp_send_json_success( array( 'message' => __( 'Item settings updated', 'jet-engine' ) ) ); } else { return wp_send_json_error( Module::instance()->get_notices() ); } } /** * Ajax callback to save settings * * @return [type] [description] */ public function save_item() { if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( array( 'message' => __( 'Access denied', 'jet-engine' ) ) ); } $nonce = ! empty( $_REQUEST['nonce'] ) ? $_REQUEST['nonce'] : false; if ( ! $nonce || ! wp_verify_nonce( $nonce, $this->nonce_key ) ) { wp_send_json_error( array( 'message' => __( 'Nonce validation failed', 'jet-engine' ) ) ); } $item = ! empty( $_REQUEST['item'] ) ? $_REQUEST['item'] : array(); $item_id = ! empty( $_REQUEST['item_id'] ) ? absint( $_REQUEST['item_id'] ) : false; if ( $item_id ) { $item['id'] = $item_id; } jet_engine()->glossaries->data->set_request( $item ); if ( ! $item_id ) { $done = jet_engine()->glossaries->data->create_item( false ); } else { $done = jet_engine()->glossaries->data->edit_item( false ); } if ( ! empty( $done ) ) { $message = __( 'Item settings updated', 'jet-engine' ); wp_send_json_success( array( 'item_id' => $done, 'message' => $message, ) ); } else { $raw_notices = array(); $notices = jet_engine()->glossaries->get_notices(); if ( ! empty( $notices ) ) { foreach ( $notices as $notice ) { $raw_notices[] = $notice['message']; } } wp_send_json_error( array( 'message' => implode( ', ', $raw_notices ), ) ); } } public function save_orders() { if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( array( 'message' => __( 'Access denied', 'jet-engine' ) ) ); } $nonce = ! empty( $_REQUEST['nonce'] ) ? $_REQUEST['nonce'] : false; if ( ! $nonce || ! wp_verify_nonce( $nonce, $this->nonce_key ) ) { wp_send_json_error( array( 'message' => __( 'Nonce validation failed', 'jet-engine' ) ) ); } $orders = ! empty( $_REQUEST['orders'] ) ? $_REQUEST['orders'] : array(); $done = update_option( $this->order_option_name, $orders ); if ( ! empty( $done ) ) { wp_send_json_success( array( 'message' => __( 'Order of items updated', 'jet-engine' ), ) ); } else { wp_send_json_error( array( 'message' => __( 'Items orders not updated', 'jet-engine' ), ) ); } } /** * Register settings JS file * * @return [type] [description] */ public function register_settings_js() { wp_enqueue_style( 'jet-engine-media', jet_engine()->glossaries->component_url( 'assets/css/admin/media.css' ), array(), jet_engine()->get_version() ); wp_enqueue_script( 'vue-slicksort', jet_engine()->plugin_url( 'assets/lib/vue-slicksort/vue-slicksort.min.js' ), array(), jet_engine()->get_version(), true ); wp_enqueue_script( 'jet-engine-glossaries', jet_engine()->glossaries->component_url( 'assets/js/admin/settings.js' ), array( 'cx-vue-ui', 'vue-slicksort' ), jet_engine()->get_version(), true ); $items = $this->get(); wp_enqueue_media(); wp_localize_script( 'jet-engine-glossaries', 'JetEngineGlossariesConfig', array( 'items' => $items, '_nonce' => wp_create_nonce( $this->nonce_key ), 'save_label' => __( 'Save', 'jet-engine' ), 'saving_label' => __( 'Saving...', 'jet-engine' ), ) ); add_action( 'admin_footer', array( $this, 'print_templates' ) ); } /** * Print VU template for maps settings * * @return [type] [description] */ public function print_templates() { ?> items ) { $this->items = jet_engine()->glossaries->data->get_item_for_register(); if ( empty( $this->items ) ) { $this->items = array(); } foreach ( $this->items as $index => $item ) { if ( empty( $item['source'] ) ) { $item['source'] = 'manual'; $this->items[ $index ] = $item; } } $orders = get_option( $this->order_option_name, array() ); if ( empty( $orders ) ) { usort( $this->items, function( $a, $b ) { if ( $a['id'] === $b['id'] ) { return 0; } return ( $a['id'] < $b['id'] ) ? -1 : 1; } ); } else { $items_ids = wp_list_pluck( $this->items, 'id' ); $diff_ids = array_diff( $items_ids, $orders ); $orders = array_flip( $orders ); if ( empty( $diff_ids ) ) { usort( $this->items, function ( $a, $b ) use ( $orders ) { return $orders[ $a['id'] ] - $orders[ $b['id'] ]; } ); } else { $items = array_combine( $items_ids, $this->items ); $intersect_items = array_intersect_key( $items, $orders ); $diff_items = array_diff_key( $items, $orders ); usort( $intersect_items, function ( $a, $b ) use ( $orders ) { return $orders[ $a['id'] ] - $orders[ $b['id'] ]; } ); usort( $diff_items, function( $a, $b ) { if ( $a['id'] === $b['id'] ) { return 0; } return ( $a['id'] < $b['id'] ) ? -1 : 1; } ); $this->items = array_merge( $intersect_items, $diff_items ); } } } if ( false === $item_id ) { $result = array(); foreach ( $this->items as $item ) { $result[] = $this->unslah_fields( $item ); } return $result; } else { foreach ( $this->items as $item ) { if ( $item['id'] === $item_id ) { return $this->unslah_fields( $item ); } } return false; } } /** * Unslash fields of glossary * * @param [type] $item [description] * @return [type] [description] */ public function unslah_fields( $item ) { if ( empty( $item['fields'] ) ) { return $item; } $item['fields'] = array_map( function ( $field ) { $field['value'] = wp_unslash( $field['value'] ); $field['label'] = wp_unslash( $field['label'] ); return $field; }, $item['fields'] ); return $item; } /** * Register settings tab * * @return [type] [description] */ public function register_settings_tab() { ?>