__( '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() {
?>