[ 'SITE_TITLE' => 'Site Title', 'SITE_TAGLINE' => 'Site Tagline', 'SITE_URL' => 'Site URL', 'CURRENT_DATE' => 'Current date', 'CURRENT_TIME' => 'Current time' ], 'Post/Page' => [ 'POST_ID' => 'Post ID', 'POST_TITLE' => 'Post title', 'POST_CATEGORY' => 'Post category', 'POST_FEATURED_IMAGE' => 'Post Featured image', 'POST_EXCERPT' => 'Post excerpt', 'POST_URL' => 'Post URL', 'POST_DATE' => 'Post date', 'POST_TIME' => 'Post time', 'POST_COMMENTS_NUMBER' => 'Number of comments' ], 'Archive' => [ 'ARCHIVE_ID' => 'Archive ID', 'ARCHIVE_TITLE' => 'Archive title', 'ARCHIVE_URL' => 'Archive URL' ], 'Author' => [ 'AUTHOR_ID' => 'Author ID', 'AUTHOR_FIRST_NAME' => 'Author first name', 'AUTHOR_LAST_NAME' => 'Author last name', 'AUTHOR_DISPLAY_NAME' => 'Author display name', 'AUTHOR_EMAIL' => 'Author e-mail', 'AUTHOR_URL' => 'Author Profile URL', 'AUTHOR_POSTS_URL' => 'Author Posts URL' ] ]; public function __construct() { if (isset($_GET['adv-vis-ele-library-reset']) && $_GET['adv-vis-ele-library-reset'] === 'true') { update_option('adv_vis_ele_library_info_v2', []); } $library_info = array_filter(get_option('adv_vis_ele_library_info_v2', [])); if (!empty($library_info)) { $this->library_info = $library_info; } else { $data = ['request' => 'elements-json']; $response = wp_safe_remote_post(ADV_VIS_ELE_PLUGIN_WEBSITE . '/adv-vis-ele/v2/index.php', ['body' => $data, 'timeout' => 10]); $output = wp_remote_retrieve_body($response); if (!empty($output)) { $decoded = json_decode($output); if (is_object($decoded)) { if (isset($decoded->response) && $decoded->response === 'success' && isset($decoded->data->elements_json) && !empty($decoded->data->elements_json)) { if (Adv_Vis_Ele_Admin::is_dev() && isset($_GET['adv-vis-ele-library-dev']) && $_GET['adv-vis-ele-library-dev'] === 'true' && isset($decoded->data_dev->elements_json) && !empty($decoded->data_dev->elements_json)) { $decoded->data->elements_json = array_merge($decoded->data->elements_json, $decoded->data_dev->elements_json); } $this->library_info = $decoded->data->elements_json; update_option('adv_vis_ele_library_info_v2', array_filter($decoded->data->elements_json)); } } } } // WooCommerce dynamic settings array if (class_exists('woocommerce')) { Adv_Vis_Ele_Library::$dynamic_settings['WooCommerce'] = [ 'WOO_PRODUCT_SKU' => 'Product SKU', 'WOO_PRODUCT_IMAGE' => 'Product image', 'WOO_PRODUCT_SHORT_DESCRIPTION' => 'Product short description', 'WOO_PRODUCT_LONG_DESCRIPTION' => 'Product long description', 'WOO_PRODUCT_REGULAR_PRICE' => 'Product regular price', 'WOO_PRODUCT_SALE_PRICE' => 'Product sale price', 'WOO_CURRENCY_SYMBOL' => 'WooCommerce currency symbol', 'WOO_PRODUCT_STOCK_STATUS' => 'Product stock status', 'WOO_PRODUCT_STOCK_QUANTITY' => 'Product stock quantity', 'WOO_PRODUCT_SHIPPING_CLASS' => 'Product shipping class', 'WOO_ADD_TO_CART_TEXT' => 'WooCommerce "Add to cart" text' ]; } // Make meta field last array value Adv_Vis_Ele_Library::$dynamic_settings['Meta/ACF'] = [ 'META_FIELD' => 'Meta or ACF field' ]; } /** * Get library info */ public function get_library_info($limit = false, $page = false) { $library_ordering = get_user_meta(get_current_user_id(), 'adv_vis_ele_library_ordering', true); if (empty($library_ordering)) { $library_ordering = 'asc'; add_user_meta(get_current_user_id(), 'adv_vis_ele_library_ordering', $library_ordering); } if (empty($this->library_info)) { update_option('adv_vis_ele_library_info_v2', []); // reset for the next constructor return []; // should never happen } array_multisort(array_column($this->library_info, 'name'), SORT_NATURAL, $this->library_info); if ($library_ordering === 'desc') { $library_info = array_reverse($this->library_info); } else { $library_info = $this->library_info; } if (is_int($limit) && is_int($page)) { return array_slice($library_info, ($page * $limit) - $limit, $limit); } return $library_info; } /** * Get all element IDs */ public function get_all_element_ids() { $all_elements = []; if (!empty($this->library_info)) { foreach ($this->library_info as $e) { $all_elements[] = $e->id; } } return $all_elements; } /** * Get element info from local library */ public function get_element($element_id) { $info = $this->get_library_info(); $key = array_search($element_id, array_column($info, 'id')); if ($key === false) { return false; } if (is_object($info[$key])) { return $info[$key]; } return false; } /** * Get element options from local library */ public function get_element_setting($element_id, $setting_name) { $element = $this->get_element($element_id); if ($element) { $key = array_search($setting_name, array_column($element->settings, 'id')); if ($key !== false) { return $element->settings[$key]; } } return false; } /** * Get elements HTML */ public function get_element_html($element) { ob_start(); ?>
name); ?>
id . '/'; ?> settings) && is_array($element->settings)) { foreach ($element->settings as $setting) { $settings_string .= '
'; $mobile_string = ''; if (isset($setting->mobile) && $setting->mobile === true) { $mobile_string .= ' ' . __('(mobile)', 'wp-ave'); } if ($element->license !== 'free') { $settings_string .= '' . esc_attr($setting->name . $mobile_string) . '' . 'PRO'; } else { $settings_string .= '' . esc_attr($setting->name . $mobile_string) . '' . 'license === 'free' ? '' : 'adv-vis-ele-settings-popup-single-setting-pro') . '">' . ($setting->license === 'free' ? 'Free' : 'PRO') . ''; } $settings_string .= '
'; } } if (empty($settings_string)) { $settings_string = __('No options listed.', 'wp-ave'); } ?>
<?php echo esc_attr($element->name); ?> license != 'free') { ?>
is__premium_only() ? 'PRO' : 'PRO'; ?>
performance_heavy) && $element->performance_heavy === true) { ?> ! license !== 'free' && !wpave_fs()->is__premium_only()) { ?>
get_library_info(); } else { $elements = $this->get_library_info($limit, $page); } $filtered_elements = []; if (!empty($search)) { foreach ($elements as $element) { if (stristr($element->name, $search) !== false || stristr($element->id, $search) !== false) { $filtered_elements[] = $element; } } $elements = array_slice($filtered_elements, ($page * $limit) - $limit, $limit); if (empty($elements)) { $r = ['message' => 'No search results.']; $r['hide'] = true; wp_send_json_error($r); } } else { if (empty($elements)) { $r = ['message' => 'Loaded all elements.']; $r['hide'] = true; wp_send_json_error($r); } } $html = ''; foreach ($elements as $element) { $element->new_element = in_array($element->id, ADV_VIS_ELE_NEW_ELEMENTS); $html .= $this->get_element_html($element); } $r = ['message' => wp_kses_post($html)]; if (!empty($search)) { if (count($filtered_elements) > ($page * $limit)) { $r['hide'] = false; } else { $r['hide'] = true; } } else { if (count($this->library_info) > ($page * $limit)) { $r['hide'] = false; } else { $r['hide'] = true; } } wp_send_json_success($r); } /** * Render setting field */ public function render_setting_field($setting) { ob_start(); echo ''; if ($setting->type === 'color') { $color_format = $setting->format === 'rgba' ? ' data-alpha-enabled="true"' : ''; echo ''; } else if ($setting->type === 'text') { echo ''; } else if ($setting->type === 'number') { $min = ''; $max = ''; if (isset($setting->min)) { $min = 'min="' . esc_attr($setting->min) . '"'; } if (isset($setting->max)) { $max = 'max="' . esc_attr($setting->max) . '"'; } echo ''; } else if ($setting->type === 'float') { $min = ''; $max = ''; if (isset($setting->min)) { $min = 'min="' . esc_attr($setting->min) . '"'; } if (isset($setting->max)) { $max = 'max="' . esc_attr($setting->max) . '"'; } $step = '0.1'; if (isset($setting->step)) { $step = $setting->step; } echo ''; } else if ($setting->type === 'select') { if (isset($setting->multiple) && $setting->multiple) { $size = Adv_Vis_Ele_Helpers::clamp(count($setting->options), 1, 10); echo ''; } else { echo ''; } } else if ($setting->type === 'boolean') { echo ''; // this is needed to submit FALSE value echo ''; } else if ($setting->type === 'content') { wp_editor(wp_kses_post(wpautop($setting->value)), esc_attr($setting->id), ['wpautop' => false, 'textarea_name' => 'adv-vis-ele-editor-settings[' . esc_attr($setting->id) . ']', 'editor_height' => 150]); } else if ($setting->type === 'image') { echo ''; echo '' . __('Choose Image', 'adv-vis-ele') . ''; } else if ($setting->type === 'video') { echo ''; echo '' . __('Choose Video', 'adv-vis-ele') . ''; } // dynamic post values if ($setting->type === 'text' || $setting->type === 'content' || $setting->type === 'image') { echo ''; } return ob_get_clean(); } /** * Save library ordering (AJAX) */ public function ajax_save_ordering() { $nonce_verified = isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'ave_ajax'); if (!$nonce_verified) { wp_send_json_error(['code' => '010']); } $ordering = sanitize_text_field($_POST['ordering']); update_user_meta(get_current_user_id(), 'adv_vis_ele_library_ordering', $ordering); wp_send_json_success(); } /** * Full import (AJAX) */ public function ajax_full_import() { $nonce_verified = isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'ave_ajax'); if (!$nonce_verified) { wp_send_json_error(['code' => '010']); } $current_user = wp_get_current_user(); $author = $current_user->ID; $settings = []; foreach ($_POST['settings'] as $key => $setting) { $key = sanitize_text_field($key); if (is_array($setting)) { $settings[$key] = array_map('wp_kses_post', $setting); } else { $settings[$key] = wp_kses_post($setting); } if ($settings[$key] === 'true') { $settings[$key] = 'on'; } } if (!empty($settings)) { $element_id = $settings['adv-vis-ele-element_id']; unset($settings['adv-vis-ele-element_id']); // remove the Element ID because we want only settings $post = [ 'post_title' => 'Imported Element (' . $element_id . ')', 'post_status' => 'draft', 'post_type' => 'adv-vis-element', 'post_author' => $author ]; $new_post_id = wp_insert_post($post); if (is_int($new_post_id) && $new_post_id > 0) { add_post_meta($new_post_id, 'adv-vis-ele-element_id', $element_id); $saving = $this->get_saving_settings($settings, $element_id); Adv_Vis_Ele_Admin::save_element_meta_settings($saving, $new_post_id); $redirection_url = admin_url() . 'post.php?post=' . $new_post_id . '&action=edit'; wp_send_json_success(['redirection_url' => $redirection_url]); } } wp_send_json_error(); } /** * Get Element options for saving */ public function get_saving_settings($settings, $element_id) { $saving = []; foreach ($settings as $setting_name => $setting_value) { $setting = $this->get_element_setting($element_id, $setting_name); if ($setting) { if ($setting->license !== 'free') { if (wpave_fs()->is__premium_only()) { $saving[$setting_name] = Adv_Vis_Ele_Admin::filter_setting($setting, $setting_value); } else { $saving[$setting_name] = $setting->default; } } else { $saving[$setting_name] = Adv_Vis_Ele_Admin::filter_setting($setting, $setting_value); } } } return $saving; } /** * Quick save preview (AJAX) */ public function ajax_quick_save() { $nonce_verified = isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'ave_ajax'); if (!$nonce_verified) { wp_send_json_error(['code' => '010']); } if (!isset($_POST['id'])) { return; } $post_id = (int)$_POST['id']; $element_id = sanitize_text_field($_POST['element-id']); $settings = []; foreach ($_POST['settings'] as $key => $setting) { $key = sanitize_text_field($key); if (is_array($setting)) { $settings[$key] = array_map('wp_kses_post', $setting); } else { $settings[$key] = wp_kses_post($setting); } } $meta_settings = Adv_Vis_Ele_Admin::get_element_meta_settings($post_id); if (!empty($meta_settings)) { foreach ($settings as $name => $setting) { if (in_array($name, array_keys($meta_settings))) { $meta_settings[$name] = $setting; } } } else { $meta_settings = $settings; } $saving = $this->get_saving_settings($meta_settings, $element_id); Adv_Vis_Ele_Admin::save_element_meta_settings($saving, $post_id); $saving['adv-vis-ele-element_id'] = $element_id; wp_send_json_success(['export' => json_encode($saving)]); } }