array(
'id' => 1,
'title' => 'Blue message',
'name' => 'blue-message',
'identifyColor' => '#3399ff',
'css' => 'background: none repeat scroll 0 0 #3399ff;
color: #ffffff;
text-shadow: none;
font-size: 14px;
line-height: 24px;
padding: 10px;'
),
1 => array(
'id' => 2,
'title' => 'Green message',
'name' => 'green-message',
'identifyColor' => '#8cc14c',
'css' => 'background: none repeat scroll 0 0 #8cc14c;
color: #ffffff;
text-shadow: none;
font-size: 14px;
line-height: 24px;
padding: 10px;'
),
2 => array(
'id' => 3,
'title' => 'Orange message',
'name' => 'orange-message',
'identifyColor' => '#faa732',
'css' => 'background: none repeat scroll 0 0 #faa732;
color: #ffffff;
text-shadow: none;
font-size: 14px;
line-height: 24px;
padding: 10px;'
),
3 => array(
'id' => 4,
'title' => 'Red message',
'name' => 'red-message',
'identifyColor' => '#da4d31',
'css' => 'background: none repeat scroll 0 0 #da4d31;
color: #ffffff;
text-shadow: none;
font-size: 14px;
line-height: 24px;
padding: 10px;'
),
4 => array(
'id' => 5,
'title' => 'Grey message',
'name' => 'grey-message',
'identifyColor' => '#53555c',
'css' => 'background: none repeat scroll 0 0 #53555c;
color: #ffffff;
text-shadow: none;
font-size: 14px;
line-height: 24px;
padding: 10px;'
),
5 => array(
'id' => 6,
'title' => 'Left block',
'name' => 'left-block',
'identifyColor' => '#ff00ff',
'css' => 'background: none repeat scroll 0 0px, radial-gradient(ellipse at center center, #ffffff 0%, #f2f2f2 100%) repeat scroll 0 0 rgba(0, 0, 0, 0);
color: #8b8e97;
padding: 10px;
margin: 10px;
float: left;'
),
6 => array(
'id' => 7,
'title' => 'Right block',
'name' => 'right-block',
'identifyColor' => '#00ddff',
'css' => 'background: none repeat scroll 0 0px, radial-gradient(ellipse at center center, #ffffff 0%, #f2f2f2 100%) repeat scroll 0 0 rgba(0, 0, 0, 0);
color: #8b8e97;
padding: 10px;
margin: 10px;
float: right;'
),
7 => array(
'id' => 8,
'title' => 'Blockquotes',
'name' => 'blockquotes',
'identifyColor' => '#cccccc',
'css' => 'background: none;
border-left: 5px solid #f1f1f1;
color: #8B8E97;
font-size: 14px;
font-style: italic;
line-height: 22px;
padding-left: 15px;
padding: 10px;
width: 60%;
float: left;'
)
);
/**
* Store original editor settings value, before we modify it to allow/hide blocks based on profiles
*
* @var string Original settings
*/
protected static $original_block_editor_settings;
/**
* Activated profile to get activated blocks array
*
* @var null ID profiles
*/
protected $active_profile = null;
/**
* AdvancedGutenbergMain constructor.
*/
public function __construct()
{
add_action('admin_init', array($this, 'registerStylesScripts'));
add_action('wp_enqueue_scripts', array($this, 'registerStylesScriptsFrontend'));
add_action('enqueue_block_assets', array($this, 'addEditorAndFrontendStyles'), 9999);
add_action('plugins_loaded', array($this, 'advgbBlockLoader'));
add_action('rest_api_init', array($this, 'registerRestAPI'));
add_action('admin_print_scripts', array($this, 'disableAllAdminNotices')); // Disable all admin notice for page belong to plugin
add_filter('safe_style_css', array($this, 'addAllowedInlineStyles'), 10, 1);
add_filter('wp_kses_allowed_html', array($this, 'addAllowedTags'), 1);
// Front-end ajax
add_action('wp_ajax_advgb_contact_form_save', array($this, 'saveContactFormData'));
add_action('wp_ajax_nopriv_advgb_contact_form_save', array($this, 'saveContactFormData'));
add_action('wp_ajax_advgb_newsletter_save', array($this, 'saveNewsletterData'));
add_action('wp_ajax_nopriv_advgb_newsletter_save', array($this, 'saveNewsletterData'));
if (is_admin()) {
add_action('init', array($this, 'registerAdvgbProfile'));
add_action('admin_footer', array($this, 'initBlocksList'));
add_action('admin_menu', array($this, 'registerMainMenu'));
add_action('admin_menu', array($this, 'registerBlockConfigPage'));
add_action('load-toplevel_page_advgb_main', array($this, 'saveAdvgbData'));
add_filter('block_editor_settings', array($this, 'replaceEditorSettings'), 9999);
add_action('enqueue_block_editor_assets', array($this, 'addEditorAssets'), 9999);
add_filter('mce_external_plugins', array($this, 'addTinyMceExternal'));
add_filter('mce_buttons_2', array($this, 'addTinyMceButtons'));
add_filter('block_categories', array($this, 'addAdvBlocksCategory'));
// Ajax
add_action('wp_ajax_advgb_update_blocks_list', array($this, 'updateBlocksList'));
add_action('wp_ajax_advgb_get_users', array($this, 'getUsers'));
add_action('wp_ajax_advgb_custom_styles_ajax', array($this, 'customStylesAjax'));
add_action('wp_ajax_advgb_delete_profiles', array($this, 'deleteProfiles'));
add_action('wp_ajax_advgb_block_config_save', array($this, 'saveBlockConfig'));
} else {
// Front-end
add_filter('the_content', array($this, 'contentPreRender'), 5);
add_filter('the_content', array($this, 'addFrontendContentAssets'), 9);
}
}
/**
* Disable all admin notices in our page
*
* @return void
*/
public function disableAllAdminNotices()
{
global $wp_filter;
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- No action, nonce is not required
if ((!empty($_GET['page']) && in_array($_GET['page'], array('advgb_main')))) {
if (is_user_admin()) {
if (isset($wp_filter['user_admin_notices'])) {
unset($wp_filter['user_admin_notices']);
}
} elseif (isset($wp_filter['admin_notices'])) {
unset($wp_filter['admin_notices']);
}
if (isset($wp_filter['all_admin_notices'])) {
unset($wp_filter['all_admin_notices']);
}
}
}
/**
* Add blocks category
*
* @param array $categories List of current blocks categories
*
* @return array New array include our category
*/
public function addAdvBlocksCategory($categories)
{
return array_merge(
$categories,
array(
array(
'slug' => 'advgb-category',
'title' => __('Advanced Gutenberg', 'advanced-gutenberg'),
),
)
);
}
/**
* Add inline styles allowed for user without unfiltered_html capability
*
* @param array $styles List of current allowed styles
*
* @return array New list of allowed styles
*/
public function addAllowedInlineStyles($styles)
{
return array_merge(
$styles,
array('justify-content', 'align-items', 'border-radius')
);
}
/**
* Add allowed tags for user without unfiltered_html capability
*
* @param array $tags List of current allowed tags
*
* @return array New list of allowed tags
*/
public function addAllowedTags($tags)
{
$tags['svg'] = array(
'width' => true,
'height' => true,
'viewbox' => true,
'xmlns' => true,
'fill' => true,
'styles' => true,
'preserveAspectRatio' => true,
);
$tags['g'] = array(
'fill' => true,
'fill-rule' => true,
'fill-opacity' => true,
'stroke' => true,
'stroke-width' => true,
);
$tags['path'] = array(
'd' => true,
'fill' => true,
'fill-opacity' => true,
);
return $tags;
}
/**
* Replaces if needed editor settings to allow/hide blocks
*
* @param array $settings Editor settings
*
* @return array
*/
public function replaceEditorSettings($settings)
{
self::$original_block_editor_settings = $settings;
$advgb_blocks_vars = array();
$advgb_blocks_vars['blocks'] = $this->getUserBlocksForGutenberg();
if (is_array($settings['allowedBlockTypes'])) {
// Remove blocks from the list that are not allowed
// Note that we do not add missing blocks, because another plugin may have used the hook to remove some of them
foreach ($settings['allowedBlockTypes'] as $key => $type) {
if (in_array($type, $advgb_blocks_vars['blocks']['inactive_blocks'])) {
unset($settings['allowedBlockTypes']);
}
}
} elseif ($settings['allowedBlockTypes'] === true) {
// All was allowed, only return what the profile allows
if (count($advgb_blocks_vars['blocks']['active_blocks']) || count($advgb_blocks_vars['blocks']['inactive_blocks'])) {
$settings['allowedBlockTypes'] = $advgb_blocks_vars['blocks']['active_blocks'];
}
}
$current_screen = get_current_screen();
if (method_exists($current_screen, 'is_block_editor') && $current_screen->is_block_editor()
&& (!defined('GUTENBERG_VERSION') || (defined('GUTENBERG_VERSION') && version_compare(GUTENBERG_VERSION, '5.3.0', '>=')))) {
// WP 5 and Gutenberg 5.3.0 fires enqueue_block_editor_assets before block_editor_settings, Gutenberg plugin do the contrary
// Gutenberg WP5 core feature is used and we are in the block editor page, we must enqueue our assets after retrieving editor settings
$this->addEditorAssets(true);
}
return $settings;
}
/**
* Enqueue styles and scripts for gutenberg
*
* @param boolean $force_loading Should force loading assets
*
* @return void
*/
public function addEditorAssets($force_loading = false)
{
$current_screen = get_current_screen();
if (!$force_loading && method_exists($current_screen, 'is_block_editor') && $current_screen->is_block_editor()
&& (!defined('GUTENBERG_VERSION') || (defined('GUTENBERG_VERSION') && version_compare(GUTENBERG_VERSION, '5.3.0', '>=')))) {
// This function will be called manually in the block_editor_settings filter
// WP 5 and Gutenberg 5.3.0 fires enqueue_block_editor_assets before block_editor_settings, Gutenberg plugin do the contrary
return;
}
wp_enqueue_script(
'advgb_blocks',
plugins_url('assets/blocks/blocks.js', dirname(__FILE__)),
array( 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-data', 'wp-editor' ),
ADVANCED_GUTENBERG_VERSION,
true
);
// Include needed JS libraries
wp_enqueue_script('jquery-ui-accordion');
wp_enqueue_script('jquery-ui-tabs');
wp_enqueue_script('jquery-ui-sortable');
wp_enqueue_script('slick_js');
// Include needed CSS styles
wp_enqueue_style('slick_style');
wp_enqueue_style('slick_theme_style');
$advgb_blocks_vars = array();
$advgb_blocks_vars['blocks'] = $this->getUserBlocksForGutenberg();
global $post;
if ($post) {
$advgb_blocks_vars['post_id'] = $post->ID;
$advgb_blocks_vars['post_type'] = $post->post_type;
}
$advgb_blocks_vars['original_settings'] = self::$original_block_editor_settings;
$advgb_blocks_vars['ajaxurl'] = admin_url('admin-ajax.php');
$advgb_blocks_vars['nonce'] = wp_create_nonce('advgb_update_blocks_list');
wp_localize_script('advgb_blocks', 'advgb_blocks_vars', $advgb_blocks_vars);
// Set variable needed by blocks editor
$avatarHolder = plugins_url('assets/blocks/testimonial/avatar-placeholder.png', dirname(__FILE__));
$default_thumb = plugins_url('assets/blocks/recent-posts/recent-post-default.png', ADVANCED_GUTENBERG_PLUGIN);
$saved_settings = get_option('advgb_settings');
$custom_styles_data = get_option('advgb_custom_styles');
$recaptcha_config = get_option('advgb_recaptcha_config');
$recaptcha_config = $recaptcha_config !== false ? $recaptcha_config : array('recaptcha_enable' => 0);
$blocks_icon_color = isset($saved_settings['blocks_icon_color']) ? $saved_settings['blocks_icon_color'] : '';
$rp_default_thumb = isset($saved_settings['rp_default_thumb']) ? $saved_settings['rp_default_thumb'] : array('url' => $default_thumb, 'id' => 0);
wp_localize_script('wp-blocks', 'advgbBlocks', array(
'color' => $blocks_icon_color,
'post_thumb' => $rp_default_thumb['url'],
'avatarHolder' => $avatarHolder,
'config_url' => admin_url('admin.php?page=advgb_main'),
'customStyles' => !$custom_styles_data ? array() : $custom_styles_data,
'captchaEnabled' => $recaptcha_config['recaptcha_enable']
));
// Setup default config data for blocks
$blocks_config_saved = get_option('advgb_blocks_default_config');
$blocks_config_saved = $blocks_config_saved !== false ? $blocks_config_saved : array();
wp_localize_script('wp-blocks', 'advgbDefaultConfig', $blocks_config_saved);
}
/**
* Enqueue styles for gutenberg editor and front-end
*
* @return mixed
*/
public function addEditorAndFrontendStyles()
{
$custom_styles_url = wp_get_upload_dir();
$custom_styles_url = $custom_styles_url['baseurl'] . '/advgb/';
wp_enqueue_style(
'advgb_custom_styles',
$custom_styles_url . 'custom_styles.css'
);
wp_enqueue_style('dashicons');
if (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG === true) {
wp_enqueue_style(
'advgb_blocks_styles',
plugins_url('assets/css/blocks_styles/blocks.css', dirname(__FILE__))
);
} else {
wp_enqueue_style(
'advgb_blocks_styles_min',
plugins_url('assets/css/blocks_styles/blocks.min.css', dirname(__FILE__))
);
}
if (!function_exists('advgbAddScriptAttributes')) {
/**
* Add attributes to script tag
*
* @param string $tag Script tag
* @param string $handle Handle name
*
* @return mixed
*/
function advgbAddScriptAttributes($tag, $handle)
{
if ('advgb_map_api' === $handle) {
return str_replace(' src', ' defer src', $tag);
} elseif ('advgb_recaptcha_js' === $handle) {
return str_replace(' src', ' async defer src', $tag);
}
return $tag;
}
}
add_filter('script_loader_tag', 'advgbAddScriptAttributes', 10, 2);
$saved_settings = get_option('advgb_settings');
if (isset($saved_settings['google_api_key']) && !empty($saved_settings['google_api_key'])) {
wp_enqueue_script(
'advgb_map_api',
'https://maps.googleapis.com/maps/api/js?key='. $saved_settings['google_api_key']
);
}
$recaptcha_config = get_option('advgb_recaptcha_config');
if (!is_admin() && isset($recaptcha_config['recaptcha_enable']) && $recaptcha_config['recaptcha_enable']) {
$lang = $recaptcha_config['recaptcha_language'] ? '&hl='.$recaptcha_config['recaptcha_language'] : '';
wp_enqueue_script(
'advgb_recaptcha_js',
'https://www.google.com/recaptcha/api.js?onload=advgbRecaptchaInit&render=explicit' . $lang
);
if (isset($recaptcha_config['recaptcha_site_key']) && $recaptcha_config['recaptcha_site_key']) {
wp_enqueue_script(
'advgb_recaptcha_init_js',
plugins_url('assets/js/recaptcha.js', dirname(__FILE__))
);
wp_localize_script('advgb_recaptcha_init_js', 'advgbGRC', array(
'site_key' => $recaptcha_config['recaptcha_site_key'],
'theme' => $recaptcha_config['recaptcha_theme'],
));
}
}
}
/**
* Update the blocks list for first time install
*
* @return void
*/
public function initBlocksList()
{
if (get_option('advgb_blocks_list') === false
|| (defined('GUTENBERG_VERSION') && version_compare(get_option('advgb_gutenberg_version'), GUTENBERG_VERSION, '<'))) {
$advgb_nonce = wp_create_nonce('advgb_update_blocks_list');
wp_enqueue_script('wp-blocks');
wp_enqueue_script('wp-element');
wp_enqueue_script('wp-data');
wp_enqueue_script('wp-components');
wp_enqueue_script('wp-block-library');
wp_enqueue_script('wp-editor');
do_action('enqueue_block_editor_assets');
wp_enqueue_script(
'advgb_update_list',
plugins_url('assets/js/update-block-list.js', dirname(__FILE__)),
array('jquery'),
ADVANCED_GUTENBERG_VERSION
);
$blockCategories = array();
if (function_exists('gutenberg_get_block_categories')) {
$blockCategories = gutenberg_get_block_categories(get_post());
} elseif (function_exists('get_block_categories')) {
$blockCategories = get_block_categories(get_post());
}
wp_add_inline_script(
'wp-blocks',
sprintf('wp.blocks.setCategories( %s );', wp_json_encode($blockCategories)),
'after'
);
wp_localize_script('advgb_update_list', 'updateListNonce', array('nonce' => $advgb_nonce));
}
}
/**
* Load block that required server side render
*
* @return void
*/
public function advgbBlockLoader()
{
// Block Recent Posts
require_once(plugin_dir_path(dirname(__FILE__)) . 'assets/blocks/recent-posts/block.php');
}
/**
* Register REST API
*
* @return void
*/
public function registerRestAPI()
{
// Add author info
register_rest_field(
'post',
'author_meta',
array(
'get_callback' => array($this, 'getAuthorInfo'),
'update_callback' => null,
'schema' => null,
)
);
// Add post featured img
register_rest_field(
'post',
'featured_img',
array(
'get_callback' => array($this, 'getFeaturedImg'),
'update_callback' => null,
'schema' => null,
)
);
// Register router to get data for Woo Products block
if (class_exists('WC_REST_Products_Controller')) {
include_once(plugin_dir_path(dirname(__FILE__)) . 'assets/blocks/woo-products/controller.php');
$controller = new AdvgbProductsController();
$controller->register_routes();
}
}
/**
* Get post author info for REST API
*
* @param array $object API Object
*
* @return mixed
*/
public function getAuthorInfo($object)
{
// Get the author name
$author['display_name'] = get_the_author_meta('display_name', $object['author']);
// Get the author link
$author['author_link'] = get_author_posts_url($object['author']);
// Return the author data
return $author;
}
/**
* Get featured image link for REST API
*
* @param array $object API Object
*
* @return mixed
*/
public function getFeaturedImg($object)
{
$featured_img = wp_get_attachment_image_src(
$object['featured_media'],
'medium',
false
);
return $featured_img[0];
}
/**
* Ajax to update blocks list
*
* @return mixed
*/
public function updateBlocksList()
{
if (!current_user_can('activate_plugins')) {
wp_send_json('', 400);
}
if (!wp_verify_nonce($_POST['nonce'], 'advgb_update_blocks_list')
&& !wp_verify_nonce($_POST['nonce'], 'advgb_nonce')
) {
wp_send_json('', 400);
}
/**
* Remove slashes on svg icon
*
* @param array $block Block to remove slashes
*
* @return mixed
*/
function removeSlashes(array $block)
{
$block['icon'] = htmlentities(stripslashes($block['icon']), ENT_QUOTES);
return $block;
}
if (is_array($_POST['blocksList'])) {
$blocksList = array_map('removeSlashes', $_POST['blocksList']);
} else {
$blocksList = json_decode(stripslashes($_POST['blocksList']));
}
$savedBlocksList = get_option('advgb_blocks_list');
if (!is_array($savedBlocksList)) {
$savedBlocksList = array();
}
$blocksListName = array();
$savedBlocksListName = array();
foreach ($blocksList as &$block) {
// Convert object to array
$block = (array)$block;
$blocksListName[] = $block['name'];
}
foreach ($savedBlocksList as $block) {
// Convert object to array
$block = (array)$block;
$savedBlocksListName[] = $block['name'];
}
// Check if we have new blocks installed
$newBlocks = array_diff($blocksListName, $savedBlocksListName);
if (count($newBlocks)) {
update_option('advgb_blocks_list', $blocksList);
}
// Check that profile blocks are up to date
$args = array(
'fields' => 'ids',
'post_type' => 'advgb_profiles',
'publish' => true
);
$postIDs = get_posts($args);
foreach ($postIDs as $postID) {
$allBlocksMeta = get_post_meta($postID, 'blocks', true);
if (is_array($allBlocksMeta) && is_array($allBlocksMeta['active_blocks']) && is_array($allBlocksMeta['inactive_blocks'])) {
$allProfileBlocks = array_merge($allBlocksMeta['active_blocks'], $allBlocksMeta['inactive_blocks']);
$newAllowedBlocks = array_diff($blocksListName, $allProfileBlocks);
$newAllowedBlocks = array_unique($newAllowedBlocks);
if ($newAllowedBlocks) {
$allBlocksMeta['active_blocks'] = array_merge($allBlocksMeta['active_blocks'], $newAllowedBlocks);
update_post_meta($postID, 'blocks', $allBlocksMeta);
}
}
}
if ((defined('GUTENBERG_VERSION')
&& version_compare(get_option('advgb_gutenberg_version'), GUTENBERG_VERSION, '<'))
) {
update_option('advgb_gutenberg_version', GUTENBERG_VERSION);
}
wp_send_json(array(
'blocks_list' => $blocksList
), 200);
}
/**
* Ajax to get list of users
*
* @return boolean,void Return false if failure, echo json on success
*/
public function getUsers()
{
// Check users permissions
if (! current_user_can('create_advgb_profiles')) {
wp_send_json(__('No permission!', 'advanced-gutenberg'), 403);
return false;
}
// phpcs:disable WordPress.Security.NonceVerification.Recommended -- View request, no action
$usersearch = isset($_REQUEST['search']) ? wp_unslash(trim($_REQUEST['search'])) : '';
$role = isset($_REQUEST['role']) ? $_REQUEST['role'] : '';
$users_per_page = 20;
$pagenum = 1;
if ($role === 'none') {
$args_all = array(
'include' => wp_get_users_with_no_role(),
'search' => $usersearch,
'fields' => 'all_with_meta'
);
} else {
$args_all = array(
'role' => $role,
'search' => $usersearch,
'fields' => 'all_with_meta'
);
}
if ($args_all['search'] !== '') {
$args_all['search'] = '*' . $args_all['search'] . '*';
}
$total_users = count(get_users($args_all));
$total_pages = (int)ceil($total_users / $users_per_page);
if (isset($_REQUEST['paged'])) {
if ($_REQUEST['paged'] === 'first') {
$pagenum = 1;
} elseif ($_REQUEST['paged'] === 'last') {
$pagenum = (int)$total_pages;
} else {
$pagenum = (int)$_REQUEST['paged'];
}
}
// phpcs:enable
$paged = max(1, $pagenum);
if ($role === 'none') {
$args = array(
'number' => $users_per_page,
'offset' => ($paged - 1) * $users_per_page,
'include' => wp_get_users_with_no_role(),
'search' => $usersearch,
'fields' => 'all_with_meta'
);
} else {
$args = array(
'number' => $users_per_page,
'offset' => ($paged - 1) * $users_per_page,
'role' => $role,
'search' => $usersearch,
'fields' => 'all_with_meta'
);
}
if ($args['search'] !== '') {
$args['search'] = '*' . $args['search'] . '*';
}
// Query the user IDs for this page
$wp_user_search = get_users($args);
$users_list = '';
$pages_list = '';
if (count($wp_user_search)) {
foreach ($wp_user_search as $userid => $user_object) {
$users_list .= '
';
$users_list .= '';
$users_list .= ' ';
$users_list .= ' ';
$users_list .= '';
$users_list .= '' . $user_object->display_name . ' ';
$users_list .= ' ';
$users_list .= '';
$users_list .= '' . $user_object->user_login . ' ';
$users_list .= ' ';
$users_list .= '' . $user_object->user_email . ' ';
$role_list = array();
global $wp_roles;
foreach ($user_object->roles as $role) {
if (isset($wp_roles->role_names[ $role ])) {
$role_list[ $role ] = translate_user_role($wp_roles->role_names[ $role ]);
}
}
if (empty($role_list)) {
$role_list['none'] = _x('None', 'no user roles', 'advanced-gutenberg');
}
$roles_list = implode(', ', $role_list);
$users_list .= '' . $roles_list . ' ';
$users_list .= ' ';
}
} else {
$users_list .= ' ';
$users_list .= __('No users found.', 'advanced-gutenberg');
$users_list .= ' ';
}
$doneLeft = false;
$doneRight = false;
$skipLeft = false;
$skipRight = false;
if ($total_pages > 1) {
for ($i = 1; $i <= $total_pages; $i ++) {
if ($i < $pagenum - 2) {
$skipLeft = true;
} elseif ($i > $pagenum + 2) {
$skipRight = true;
} else {
$skipLeft = false;
$skipRight = false;
}
if ($i === 1) {
if ($pagenum === 1) {
$pages_list .= ' ';
} else {
$pages_list .= ' ';
}
}
if (! $skipLeft && ! $skipRight) {
if ($i === $pagenum) {
$pages_list .= '' . $i . ' ';
} else {
$pages_list .= '' . $i . ' ';
}
} elseif ($skipLeft) {
if (! $doneLeft) {
$pages_list .= '... ';
$doneLeft = true;
}
} elseif ($skipRight) {
if (! $doneRight) {
$pages_list .= '... ';
$doneRight = true;
}
}
if ($i === $total_pages) {
if ($pagenum === $total_pages) {
$pages_list .= ' ';
} else {
$pages_list .= ' ';
}
}
}
}
$response = array('users_list' => $users_list, 'pages_list' => $pages_list);
wp_send_json($response);
}
/**
* Ajax for custom styles
*
* @return boolean,void Return false if failure, echo json on success
*/
public function customStylesAjax()
{
// Check users permissions
if (!current_user_can('activate_plugins')) {
wp_send_json(__('No permission!', 'advanced-gutenberg'), 403);
return false;
}
$regex = '/^[a-zA-Z0-9_\-]+$/';
$regexWithSpaces = '/^[\p{L}\p{N}_\- ]+$/u';
if (!wp_verify_nonce($_POST['nonce'], 'advgb_settings_nonce')) {
wp_send_json(__('Invalid nonce token!', 'advanced-gutenberg'), 400);
}
$check_exist = get_option('advgb_custom_styles');
if ($check_exist === false) {
update_option('advgb_custom_styles', $this::$default_custom_styles);
}
$custom_style_data = get_option('advgb_custom_styles');
$task = isset($_POST['task']) ? $_POST['task'] : '';
if ($task === '') {
return false;
} elseif ($task === 'new') {
$new_style_id = end($custom_style_data);
$new_style_id = $new_style_id['id'] + 1;
$new_style_array = array(
'id' => $new_style_id,
'title' => __('New class', 'advanced-gutenberg'),
'name' => __('new-class', 'advanced-gutenberg'),
'css' => '',
'identifyColor' => '#000000'
);
array_push($custom_style_data, $new_style_array);
update_option('advgb_custom_styles', $custom_style_data);
wp_send_json($new_style_array);
} elseif ($task === 'delete') {
$custom_style_data_delete = get_option('advgb_custom_styles');
$style_id = (int)$_POST['id'];
$new_style_deleted_array = array();
$done = false;
foreach ($custom_style_data_delete as $data) {
if ($data['id'] === $style_id) {
$done = true;
continue;
}
array_push($new_style_deleted_array, $data);
}
update_option('advgb_custom_styles', $new_style_deleted_array);
if ($done) {
wp_send_json(array('id' => $style_id), 200);
}
} elseif ($task === 'copy') {
$data_saved = get_option('advgb_custom_styles');
$style_id = (int)$_POST['id'];
$new_style_copied_array = get_option('advgb_custom_styles');
$copied_styles = array();
$new_id = end($new_style_copied_array);
foreach ($data_saved as $data) {
if ($data['id'] === $style_id) {
$copied_styles = array(
'id' => $new_id['id'] + 1,
'title' => sanitize_text_field($data['title']),
'name' => sanitize_text_field($data['name']),
'css' => $data['css'],
'identifyColor' => $data['identifyColor'],
);
array_push($new_style_copied_array, $copied_styles);
}
}
update_option('advgb_custom_styles', $new_style_copied_array);
wp_send_json($copied_styles);
} elseif ($task === 'preview') {
$style_id = (int)$_POST['id'];
$data_saved = get_option('advgb_custom_styles');
$get_style_array = array();
foreach ($data_saved as $data) {
if ($data['id'] === $style_id) {
foreach ($data as $key => $value) {
$data[$key] = esc_html($value);
}
$get_style_array = $data;
}
}
if (!empty($get_style_array)) {
wp_send_json($get_style_array);
} else {
wp_send_json(false, 404);
}
} elseif ($task === 'style_save') {
$style_id = (int)$_POST['id'];
$new_classname = sanitize_text_field($_POST['name']);
$new_identify_color = sanitize_text_field($_POST['mycolor']);
$new_css = $_POST['mycss'];
// Validate new name
if (!preg_match($regex, $new_classname)) {
wp_send_json('Invalid characters, please enter another!', 403);
return false;
}
$data_saved = get_option('advgb_custom_styles');
$new_data_array = array();
foreach ($data_saved as $data) {
if ($data['id'] === $style_id) {
$data['name'] = $new_classname;
$data['css'] = $new_css;
$data['identifyColor'] = $new_identify_color;
}
array_push($new_data_array, $data);
}
update_option('advgb_custom_styles', $new_data_array);
} elseif ($task === 'edit') {
$new_title = sanitize_text_field($_POST['title']);
$style_id = (int)$_POST['id'];
if (!preg_match($regexWithSpaces, $new_title)) {
wp_send_json('Invalid characters, please enter another!', 403);
return false;
}
$data_saved = get_option('advgb_custom_styles');
$new_data_array = array();
foreach ($data_saved as $data) {
if ($data['id'] === $style_id) {
$data['title'] = $new_title;
}
array_push($new_data_array, $data);
}
update_option('advgb_custom_styles', $new_data_array);
wp_send_json(array('title' => $new_title), 200);
} else {
wp_send_json(null, 404);
}
}
/**
* Ajax for delete profiles
*
* @return boolean,void Return false if failure, echo json on success
*/
public function deleteProfiles()
{
// Check users permissions
if (!current_user_can('delete_pages')) {
wp_send_json(__('No permission!', 'advanced-gutenberg'), 403);
return false;
}
if (!wp_verify_nonce($_POST['pNonce'], 'advgb_profiles_nonce')) {
wp_send_json(__('Fail to verify nonce!', 'advanced-gutenberg'), 400);
return false;
};
$profiles_to_delete = $_POST['ids'];
if (count($profiles_to_delete)) {
$deleted = array();
foreach ($profiles_to_delete as $profile) {
if (wp_delete_post($profile)) {
array_push($deleted, $profile);
}
}
wp_send_json(array('deleted' => $deleted), 200);
}
}
/**
* Ajax for saving block default config
*
* @return boolean,void Return false if failure, echo json on success
*/
public function saveBlockConfig()
{
// Check users permissions
if (!current_user_can('activate_plugins')) {
wp_send_json(__('No permission!', 'advanced-gutenberg'), 403);
return false;
}
if (!wp_verify_nonce($_POST['nonce'], 'advgb_block_config_nonce')) {
wp_send_json(__('Invalid nonce token!', 'advanced-gutenberg'), 400);
}
$blocks_config_saved = get_option('advgb_blocks_default_config');
if ($blocks_config_saved === false) {
$blocks_config_saved = array();
}
$blockType = sanitize_text_field($_POST['blockType']);
$settings = $_POST['settings'];
foreach ($settings as $key => $setting) {
foreach ($setting as $k => $option) {
$option = sanitize_text_field($option);
if (is_numeric($option)) {
if ($k !== 'lat' && $k !== 'lng') {
$option = floatval($option);
}
}
$settings[$key][$k] = $option;
}
}
// Modify settings for social links blocks config
if ($blockType === 'advgb-social-links') {
$items = array();
$settings[$blockType]['items'] = array();
foreach ($settings[$blockType] as $k => $option) {
if (strpos($k, '.')) {
$item = explode('.', $k);
$items[$item[0]][$item[1]] = $option;
}
}
foreach ($items as $item) {
array_push($settings[$blockType]['items'], $item);
}
}
$blocks_config_saved[$blockType] = $settings[$blockType];
update_option('advgb_blocks_default_config', $blocks_config_saved);
wp_send_json(true, 200);
}
/**
* Ajax for saving contact form data
*
* @return boolean,void Return false if failure, echo json on success
*/
public function saveContactFormData()
{
// phpcs:disable -- WordPress.Security.NonceVerification.Recommended - frontend form, no nonce
if (!isset($_POST['action'])) {
wp_send_json(__('Bad Request!', 'advanced-gutenberg'), 400);
return false;
}
if (isset($_POST['captcha'])) {
$recaptcha_config = get_option('advgb_recaptcha_config');
if (!isset($recaptcha_config['recaptcha_secret_key']) || !isset($recaptcha_config['recaptcha_site_key'])) {
wp_send_json(__('Server error. Try again later!', 'advanced-gutenberg'), 500);
}
$captcha = $_POST['captcha'];
$secret_key = $recaptcha_config['recaptcha_secret_key'];
$verify = wp_remote_get("https://www.google.com/recaptcha/api/siteverify?secret={$secret_key}&response={$captcha}");
if (!is_array($verify) || !isset($verify['body'])) {
wp_send_json(__('Cannot validate captcha', 'advanced-gutenberg'), 400);
}
$verified = json_decode($verify['body']);
if (!$verified->success) {
wp_send_json(__('Captcha validation error', 'advanced-gutenberg'), 400);
}
}
$contacts_saved = get_option('advgb_contacts_saved');
if (!$contacts_saved) $contacts_saved = array();
$contact_data = array(
'date' => sanitize_text_field($_POST['submit_date']),
'name' => sanitize_text_field($_POST['contact_name']),
'email' => sanitize_email($_POST['contact_email']),
'msg' => sanitize_textarea_field($_POST['contact_msg']),
);
array_push($contacts_saved, $contact_data);
$saved = update_option('advgb_contacts_saved', $contacts_saved);
if ($saved) {
$saved_settings = get_option('advgb_email_sender');
$website_title = get_option('blogname');
$admin_email = get_option('admin_email');
$sender_name = isset($saved_settings['contact_form_sender_name']) && $saved_settings['contact_form_sender_name'] ? $saved_settings['contact_form_sender_name'] : $website_title;
$sender_email = isset($saved_settings['contact_form_sender_email']) && $saved_settings['contact_form_sender_email'] ? $saved_settings['contact_form_sender_email'] : $admin_email;
$email_title = isset($saved_settings['contact_form_email_title']) && $saved_settings['contact_form_email_title'] ? $saved_settings['contact_form_email_title'] : __('Website Contact', 'advanced-gutenberg');
$email_receiver = isset($saved_settings['contact_form_email_receiver']) && $saved_settings['contact_form_email_receiver'] ? $saved_settings['contact_form_email_receiver'] : $admin_email;
$email_header[] = 'Content-Type: text/html; charset=UTF-8';
$email_header[] = 'From: '.$sender_name.' <'.$sender_email.'>';
$msg = '';
$msg .= ''. __('You have received a contact from your website.', 'advanced-gutenberg') .' ';
$msg .= '';
$msg .= ''. __('Name', 'advanced-gutenberg') .': '. $contact_data['name'] .' ';
$msg .= ''. __('Email', 'advanced-gutenberg') .': '. $contact_data['email'] .' ';
$msg .= ''. __('Date', 'advanced-gutenberg') .': '. $contact_data['date'] .' ';
$msg .= ''. __('Message', 'advanced-gutenberg') .': '. $contact_data['msg'] .' ';
$msg .= ' ';
$msg .= '';
wp_mail($email_receiver, $email_title, $msg, $email_header);
wp_send_json($contact_data, 200);
} else {
wp_send_json(__('Error while sending form. Try again!', 'advanced-gutenberg'), 500);
}
// phpcs:enable
}
/**
* Ajax for saving newsletter form data
*
* @return boolean,void Return false if failure, echo json on success
*/
public function saveNewsletterData()
{
// phpcs:disable -- WordPress.Security.NonceVerification.Recommended - frontend form, no nonce
if (!isset($_POST['action'])) {
wp_send_json(__('Bad Request!', 'advanced-gutenberg'), 400);
return false;
}
if (isset($_POST['captcha'])) {
$recaptcha_config = get_option('advgb_recaptcha_config');
if (!isset($recaptcha_config['recaptcha_secret_key']) || !isset($recaptcha_config['recaptcha_site_key'])) {
wp_send_json(__('Server error. Try again later!', 'advanced-gutenberg'), 500);
}
$captcha = $_POST['captcha'];
$secret_key = $recaptcha_config['recaptcha_secret_key'];
$verify = wp_remote_get("https://www.google.com/recaptcha/api/siteverify?secret={$secret_key}&response={$captcha}");
if (!is_array($verify) || !isset($verify['body'])) {
wp_send_json(__('Cannot validate captcha', 'advanced-gutenberg'), 400);
}
$verified = json_decode($verify);
if (!$verified->success) {
wp_send_json(__('Captcha validation error', 'advanced-gutenberg'), 400);
}
}
$newsletter_saved = get_option('advgb_newsletter_saved');
if (!$newsletter_saved) $newsletter_saved = array();
$newsletter_data = array(
'date' => sanitize_text_field($_POST['submit_date']),
'fname' => sanitize_text_field($_POST['f_name']),
'lname' => sanitize_text_field($_POST['l_name']),
'email' => sanitize_email($_POST['email']),
);
array_push($newsletter_saved, $newsletter_data);
update_option('advgb_newsletter_saved', $newsletter_saved);
wp_send_json($newsletter_data, 200);
// phpcs:enable
}
/**
* Register back-end styles and script for later use
*
* @return void
*/
public function registerStylesScripts()
{
if (!wp_doing_ajax()) {
// Register CSS
wp_register_style(
'ju_framework_styles',
plugins_url('assets/css/style.css', dirname(__FILE__))
);
wp_register_style(
'ju_framework_styles_min',
plugins_url('assets/css/style.min.css', dirname(__FILE__))
);
wp_register_style(
'advgb_main_style',
plugins_url('assets/css/main.css', dirname(__FILE__))
);
wp_register_style(
'advgb_profile_style',
plugins_url('assets/css/profile.css', dirname(__FILE__))
);
wp_register_style(
'advgb_settings_style',
plugins_url('assets/css/settings.css', dirname(__FILE__))
);
wp_register_style(
'advgb_qtip_style',
plugins_url('assets/css/jquery.qtip.css', dirname(__FILE__))
);
wp_register_style(
'advgb_quirk',
plugins_url('assets/css/quirk.css', dirname(__FILE__))
);
wp_register_style(
'codemirror_css',
plugins_url('assets/js/codemirror/lib/codemirror.css', dirname(__FILE__))
);
wp_register_style(
'codemirror_hint_style',
plugins_url('assets/js/codemirror/addon/hint/show-hint.css', dirname(__FILE__))
);
wp_register_style(
'minicolors_css',
plugins_url('assets/css/jquery.minicolors.css', dirname(__FILE__))
);
wp_register_style(
'waves_styles',
plugins_url('assets/css/waves.min.css', dirname(__FILE__))
);
wp_register_style(
'material_icon_font',
plugins_url('assets/css/fonts/material-icons.min.css', dirname(__FILE__))
);
wp_register_style(
'slick_style',
plugins_url('assets/css/slick.css', dirname(__FILE__))
);
wp_register_style(
'slick_theme_style',
plugins_url('assets/css/slick-theme.css', dirname(__FILE__))
);
// Register JS
wp_register_script(
'advgb_main_js',
plugins_url('assets/js/main.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'advgb_update_list',
plugins_url('assets/js/update-block-list.js', dirname(__FILE__)),
array('jquery'),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'advgb_profile_js',
plugins_url('assets/js/profile.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'advgb_settings_js',
plugins_url('assets/js/settings.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'velocity_js',
plugins_url('assets/js/velocity.min.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'waves_js',
plugins_url('assets/js/waves.min.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'tabs_js',
plugins_url('assets/js/tabs.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'qtip_js',
plugins_url('assets/js/jquery.qtip.min.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'advgb_codemirror_js',
plugins_url('assets/js/codemirror/lib/codemirror.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'codemirror_hint',
plugins_url('assets/js/codemirror/addon/hint/show-hint.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'codemirror_mode_css',
plugins_url('assets/js/codemirror/mode/css/css.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'codemirror_hint_css',
plugins_url('assets/js/codemirror/addon/hint/css-hint.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'less_js',
plugins_url('assets/js/less.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'minicolors_js',
plugins_url('assets/js/jquery.minicolors.min.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'slick_js',
plugins_url('assets/js/slick.min.js', dirname(__FILE__)),
array('jquery')
);
$saved_settings = get_option('advgb_settings');
if (isset($saved_settings['editor_width']) && $saved_settings['editor_width']) {
wp_add_inline_style(
'dashicons',
'#editor .editor-writing-flow {max-width: ' . $saved_settings['editor_width'] . '%}'
);
}
}
}
/**
* Register front-end styles and script for later use
*
* @return void
*/
public function registerStylesScriptsFrontend()
{
wp_register_style(
'colorbox_style',
plugins_url('assets/css/colorbox.css', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_register_style(
'slick_style',
plugins_url('assets/css/slick.css', dirname(__FILE__))
);
wp_register_style(
'slick_theme_style',
plugins_url('assets/css/slick-theme.css', dirname(__FILE__))
);
wp_register_script(
'colorbox_js',
plugins_url('assets/js/jquery.colorbox.min.js', dirname(__FILE__)),
array('jquery'),
ADVANCED_GUTENBERG_VERSION
);
wp_register_script(
'slick_js',
plugins_url('assets/js/slick.min.js', dirname(__FILE__)),
array('jquery')
);
$saved_settings = get_option('advgb_settings');
if (isset($saved_settings['enable_blocks_spacing']) && $saved_settings['enable_blocks_spacing']) {
$blocks_spacing = isset($saved_settings['blocks_spacing']) ? $saved_settings['blocks_spacing'] : 0;
wp_add_inline_style(
'dashicons',
'.entry-content > * {margin-bottom: ' . $blocks_spacing . 'px}'
);
}
}
/**
* Register main menu
*
* @return void
*/
public function registerMainMenu()
{
add_menu_page(
__('Advanced Gutenberg', 'advanced-gutenberg'),
__('Adv. Gutenberg', 'advanced-gutenberg'),
'manage_options',
'advgb_main',
array($this, 'advgbMainView'),
'dashicons-edit'
);
}
/**
* Load main view
*
* @return void
*/
public function advgbMainView()
{
wp_enqueue_style('roboto_font', 'https://fonts.googleapis.com/css?family=Roboto');
wp_enqueue_style('material_icon_font');
wp_enqueue_style('advgb_quirk');
wp_enqueue_style('waves_styles');
if (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG === true) {
wp_enqueue_style('ju_framework_styles');
} else {
wp_enqueue_style('ju_framework_styles_min');
}
wp_enqueue_style('advgb_main_style');
wp_enqueue_script('waves_js');
wp_enqueue_script('velocity_js');
wp_enqueue_script('tabs_js');
wp_enqueue_script('advgb_main_js');
$this->loadView('main-view');
}
/**
* Register profiles custom post type
*
* @return void
*/
public function registerAdvgbProfile()
{
$labels = array(
'name' => __('Advanced Gutenberg Profiles', 'advanced-gutenberg'), // Profile title
'singular_name' => __('Advanced Gutenberg Profiles', 'advanced-gutenberg'),
'add_new' => __('New Profile', 'advanced-gutenberg'), // New profile menu title
'add_new_item' => __('Add New Profile', 'advanced-gutenberg'), // New profile title
'edit_item' => __('Edit Profile', 'advanced-gutenberg'), // Edit profile title
'all_items' => __('Profiles', 'advanced-gutenberg'), // All profiles menu title
'view_item' => __('View Profile', 'advanced-gutenberg'),
'search_items' => __('Search Profiles', 'advanced-gutenberg'), // Search button title
'not_found' => __('No profiles found', 'advanced-gutenberg'),
'not_found_in_trash' => __('No profiles found in trash', 'advanced-gutenberg'),
'parent_item_colon' => '',
'menu_name' => __('Profiles', 'advanced-gutenberg')
);
register_post_type('advgb_profiles', array(
'labels' => $labels,
'public' => false,
'show_ui' => false,
'supports' => array('title', 'author'),
'capabilities' => array(
'edit_posts' => 'edit_advgb_profiles',
'edit_others_posts' => 'edit_others_advgb_profiles',
'publish_posts' => 'publish_advgb_profiles',
'read' => 'read_advgb_profile',
'read_private_posts' => 'read_private_advgb_profiles',
'delete_posts' => 'delete_advgb_profiles',
'delete_others_posts' => 'delete_others_advgb_profiles',
'create_posts' => 'create_advgb_profiles',
),
'map_meta_cap' => true
));
}
/**
* Save data function
*
* @return boolean True on success, False on failure
*/
public function saveAdvgbData()
{
if (isset($_GET['view']) && $_GET['view'] === 'profile' && !isset($_GET['id'])) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- redirect only
wp_safe_redirect(admin_url('admin.php?page=advgb_main&view=profiles'));
}
if (isset($_POST['advgb_profile_save'])) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- we check nonce below
$this->saveAdvgbProfile();
} elseif (isset($_POST['save_settings']) || isset($_POST['save_custom_styles'])) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- we check nonce below
$this->saveSettings();
} elseif (isset($_POST['save_email_config'])) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- we check nonce below
$this->saveEmailSettings();
} elseif (isset($_POST['save_recaptcha_config'])) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- we check nonce below
$this->saveCaptchaSettings();
} elseif (isset($_POST['block_data_export'])) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- we check nonce below
$this->downloadBlockFormData();
}
return false;
}
/**
* Save config settings
*
* @return boolean True on success, False on failure
*/
public function saveSettings()
{
if (isset($_POST['save_settings'])) {
if (!wp_verify_nonce($_POST['advgb_settings_nonce_field'], 'advgb_settings_nonce')) {
return false;
}
$save_config = array();
if (isset($_POST['gallery_lightbox'])) {
$save_config['gallery_lightbox'] = 1;
} else {
$save_config['gallery_lightbox'] = 0;
}
if (isset($_POST['gallery_lightbox_caption'])) {
$save_config['gallery_lightbox_caption'] = 1;
} else {
$save_config['gallery_lightbox_caption'] = 0;
}
if (isset($_POST['enable_blocks_spacing'])) {
$save_config['enable_blocks_spacing'] = 1;
} else {
$save_config['enable_blocks_spacing'] = 0;
}
if (isset($_POST['disable_wpautop'])) {
$save_config['disable_wpautop'] = 1;
} else {
$save_config['disable_wpautop'] = 0;
}
$save_config['google_api_key'] = $_POST['google_api_key'];
$save_config['blocks_spacing'] = $_POST['blocks_spacing'];
$save_config['blocks_icon_color'] = $_POST['blocks_icon_color'];
$save_config['editor_width'] = $_POST['editor_width'];
$save_config['rp_default_thumb'] = array(
'url' => $_POST['post_default_thumb'],
'id' => $_POST['post_default_thumb_id']
);
update_option('advgb_settings', $save_config);
if (isset($_REQUEST['_wp_http_referer'])) {
wp_safe_redirect(admin_url('admin.php?page=advgb_main&save_settings=success'));
exit;
}
}
if (isset($_POST['save_custom_styles'])) {
if (!wp_verify_nonce($_POST['advgb_cstyles_nonce_field'], 'advgb_cstyles_nonce')) {
return false;
}
// Save Custom Styles to a css file
$get_custom_styles = get_option('advgb_custom_styles');
if ($get_custom_styles !== false) {
$this->writeCustomStyles($get_custom_styles);
}
if (isset($_REQUEST['_wp_http_referer'])) {
wp_safe_redirect(admin_url('admin.php?page=advgb_main&save_styles=success'));
exit;
}
}
return true;
}
/**
* Write custom styles to a CSS file
*
* @param array $styles_array Array of styles
*
* @return boolean True on success, False on failure
*/
public function writeCustomStyles(array $styles_array)
{
WP_Filesystem();
global $wp_filesystem;
$custom_styles_dir = wp_upload_dir();
$custom_styles_dir = $custom_styles_dir['basedir'] . '/advgb/';
$css_file = $custom_styles_dir . 'custom_styles.css';
if (!$wp_filesystem->exists($custom_styles_dir)) {
$wp_filesystem->mkdir($custom_styles_dir);
}
$content = '';
foreach ($styles_array as $styles) {
$content .= '.gutenberg #editor .' .$styles['name'] . ', .' . $styles['name'] . " {\n";
$content .= $styles['css'] . "\n} \n";
}
if (!$wp_filesystem->put_contents($css_file, $content)) {
return false;
}
return true;
}
/**
* Save profiles settings
*
* @return mixed
*/
public function saveAdvgbProfile()
{
// Check nonce field exist
if (!isset($_POST['advgb_nonce_field'])) {
return false;
}
// Verify nonce
if (!wp_verify_nonce($_POST['advgb_nonce_field'], 'advgb_nonce')) {
return false;
}
$postID = $_POST['advgb_profile_id'];
// Save profile settings
if (current_user_can('publish_posts')) {
// Get list of active blocks
$active_blocks = array();
$inactive_blocks = array();
if (isset($_POST['active_blocks'])) {
$blocks_list = json_decode(stripslashes($_POST['blocks_list']));
$active_blocks = $_POST['active_blocks'];
$inactive_blocks = array_values(array_diff($blocks_list, $active_blocks));
}
// Get users permission
$users_access = array();
$roles_access = array();
if (isset($_POST['advgb-users-access-list'])) {
$users_access = trim($_POST['advgb-users-access-list']);
$users_access = explode(' ', $users_access);
}
if (isset($_POST['advgb-roles'])) {
$roles_access = $_POST['advgb-roles'];
}
// Get new profile title
$post_title = trim($_POST['advgb_profile_title']);
// Save data
if ($postID !== 'new') { // Update profile if have post ID
if (!current_user_can('edit_post', $postID)) {
return false;
}
update_post_meta($postID, 'blocks', array('active_blocks'=>$active_blocks, 'inactive_blocks'=>$inactive_blocks));
update_post_meta($postID, 'users_access', $users_access);
update_post_meta($postID, 'roles_access', $roles_access);
wp_update_post(array(
'ID' => $postID,
'post_title' => $post_title,
));
} else { // Create new profile
$postID = wp_insert_post(array(
'post_title' => $post_title,
'post_type' => 'advgb_profiles',
'post_status' => 'publish',
'meta_input' => array(
'blocks' => array('active_blocks'=>$active_blocks, 'inactive_blocks'=>$inactive_blocks),
'roles_access' => $roles_access,
'users_access' => $users_access,
)
));
}
wp_safe_redirect(admin_url('admin.php?page=advgb_main&view=profile&id=' . $postID . '&save_profile=success'));
}
return $postID;
}
/**
* Download block form data
*
* @return mixed
*/
private function downloadBlockFormData()
{
// Verify nonce
if (!wp_verify_nonce($_POST['advgb_export_data_nonce_field'], 'advgb_export_data_nonce')) {
return false;
}
$postValue = $_POST['block_data_export'];
$postValue = explode('.', $postValue);
$dataExport = $postValue[0];
$dataType = $postValue[1];
$data = '';
if ($dataExport === 'contact_form') {
$dataSaved = get_option('advgb_contacts_saved');
if (!$dataSaved) {
return false;
}
switch ($dataType) {
case 'csv':
$data .= '"#","Date","Name","Email","Message"' . PHP_EOL;
$tab = ',';
$int = 1;
foreach ($dataSaved as $dataVal) {
$data .= '"'.$int.'"'.$tab;
$data .= '"'.$dataVal['date'].'"'.$tab;
$data .= '"'.$dataVal['name'].'"'.$tab;
$data .= '"'.$dataVal['email'].'"'.$tab;
$data .= '"'.$dataVal['msg'].'"';
$data .= PHP_EOL;
$int++;
}
$data = trim($data);
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=advgb_contact_form-'.date('m-d-Y').'.csv');
header('Pragma: no-cache');
header('Expires: 0');
echo $data; // phpcs:ignore -- WordPress.Security.EscapeOutput.OutputNotEscaped
exit;
case 'json':
header('Content-Type: application/json; charset=utf-8');
header('Content-Disposition: attachment; filename=advgb_contact_form-'.date('m-d-Y').'.json');
header('Pragma: no-cache');
header('Expires: 0');
echo json_encode($dataSaved);
exit;
}
} elseif ($dataExport === 'newsletter') {
$dataSaved = get_option('advgb_newsletter_saved');
if (!$dataSaved) {
return false;
}
switch ($dataType) {
case 'csv':
$data .= '"#","Date","First Name","Last Name","Email",' . PHP_EOL;
$tab = ',';
$int = 1;
foreach ($dataSaved as $dataVal) {
$data .= '"'.$int.'"'.$tab;
$data .= '"'.$dataVal['date'].'"'.$tab;
$data .= '"'.$dataVal['fname'].'"'.$tab;
$data .= '"'.$dataVal['lname'].'"'.$tab;
$data .= '"'.$dataVal['email'].'"';
$data .= PHP_EOL;
$int++;
}
$data = trim($data);
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=advgb_newsletter-'.date('m-d-Y').'.csv');
header('Pragma: no-cache');
header('Expires: 0');
echo $data; // phpcs:ignore -- WordPress.Security.EscapeOutput.OutputNotEscaped
exit;
case 'json':
header('Content-Type: application/json; charset=utf-8');
header('Content-Disposition: attachment; filename=advgb_newsletter-'.date('m-d-Y').'.json');
header('Pragma: no-cache');
header('Expires: 0');
echo json_encode($dataSaved);
exit;
}
}
return false;
}
/**
* Save forms and email settings
*
* @return mixed
*/
private function saveEmailSettings()
{
if (!isset($_POST['advgb_email_config_nonce_field'])) {
return false;
}
if (!wp_verify_nonce($_POST['advgb_email_config_nonce_field'], 'advgb_email_config_nonce')) {
return false;
}
$save_config = array();
$save_config['contact_form_sender_name'] = $_POST['contact_form_sender_name'];
$save_config['contact_form_sender_email'] = $_POST['contact_form_sender_email'];
$save_config['contact_form_email_title'] = $_POST['contact_form_email_title'];
$save_config['contact_form_email_receiver'] = $_POST['contact_form_email_receiver'];
update_option('advgb_email_sender', $save_config);
if (isset($_REQUEST['_wp_http_referer'])) {
wp_safe_redirect(admin_url('admin.php?page=advgb_main&save_settings=success'));
exit;
}
}
/**
* Save captcha settings
*
* @return mixed
*/
private function saveCaptchaSettings()
{
if (!isset($_POST['advgb_captcha_nonce_field'])) {
return false;
}
if (!wp_verify_nonce($_POST['advgb_captcha_nonce_field'], 'advgb_captcha_nonce')) {
return false;
}
$save_config = array();
if (isset($_POST['recaptcha_enable'])) {
$save_config['recaptcha_enable'] = 1;
} else {
$save_config['recaptcha_enable'] = 0;
}
$save_config['recaptcha_site_key'] = $_POST['recaptcha_site_key'];
$save_config['recaptcha_secret_key'] = $_POST['recaptcha_secret_key'];
$save_config['recaptcha_language'] = $_POST['recaptcha_language'];
$save_config['recaptcha_theme'] = $_POST['recaptcha_theme'];
update_option('advgb_recaptcha_config', $save_config);
if (isset($_REQUEST['_wp_http_referer'])) {
wp_safe_redirect(admin_url('admin.php?page=advgb_main&save_settings=success'));
exit;
}
}
/**
* Retrieve the active and inactive blocks for users regard to Advanced Gutenberg profiles
*
* @return array
*/
public function getUserBlocksForGutenberg()
{
// Get user info
$current_user = wp_get_current_user();
$current_user_id = $current_user->ID;
$current_user_role = $current_user->roles[0];
// Check if we are in profile view
if (isset($_GET['page']) && isset($_GET['view']) && $_GET['page'] === 'advgb_main' && $_GET['view'] === 'profile' ) { // phpcs:ignore -- WordPress.Security.NonceVerification.Recommended - view only
$postID = $_GET['id']; // phpcs:ignore -- WordPress.Security.NonceVerification.Recommended - view only
$blocks_saved = get_post_meta($postID, 'blocks', true);
if (!is_array($blocks_saved)) {
return array('active_blocks'=>array(), 'inactive_blocks'=>array());
}
// Return allowed blocks
return $blocks_saved;
}
// Get all GB-ADV active profiles
global $wpdb;
$profiles = $wpdb->get_results('SELECT * FROM '. $wpdb->prefix. 'posts
WHERE post_type="advgb_profiles" AND post_status="publish" ORDER BY post_date_gmt DESC');
if (!empty($profiles)) {
foreach ($profiles as $profile) {
$postID = $profile->ID;
$user_id_access = get_post_meta($postID, 'users_access', true);
$user_role_access = get_post_meta($postID, 'roles_access', true);
// Check which profiles that current user has permission to use and take that ID
// the ID of the profiles published most recently will be taken
if (is_array($user_role_access) && is_array($user_id_access)) {
if (in_array($current_user_id, $user_id_access)
|| in_array($current_user_role, $user_role_access)) {
// Populate the ID
$this->active_profile = $postID;
$blocks_saved = get_post_meta($this->active_profile, 'blocks', true);
if (!is_array($blocks_saved)) {
return array('active_blocks'=>array(), 'inactive_blocks'=>array());
}
// Return allowed blocks
return $blocks_saved;
}
}
}
}
// If user is not in any block then allow all blocks
$all_blocks = get_option('advgb_blocks_list');
if (!is_array($all_blocks)) {
$all_blocks = array();
} else {
foreach ($all_blocks as $block_key => $block_value) {
$all_blocks[$block_key] = $all_blocks[$block_key]['name'];
}
}
return array('active_blocks'=>$all_blocks, 'inactive_blocks'=>array());
}
/**
* Register block config page
*
* @return void
*/
public function registerBlockConfigPage()
{
$advgb_block = array(
'accordion', 'button', 'image', 'list',
'table', 'video', 'contact-form', 'container',
'count-up','images-slider', 'map', 'newsletter',
'recent-posts', 'social-links', 'summary', 'tabs',
'testimonial', 'woo-products',
);
foreach ($advgb_block as $block) {
add_submenu_page(
'admin.php?',
__('Block Config', 'advanced-gutenberg'),
__('Block Config', 'advanced-gutenberg'),
'manage_options',
'advgb-' . $block,
array($this, 'loadBlockConfigView')
);
}
}
/**
* Function to get and load the block config view
*
* @param string $block View to load
*
* @return void
*/
public function loadBlockConfigView($block = '')
{
if (!$block) {
$block = $_GET['page']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- view only
}
wp_enqueue_style('roboto_font', 'https://fonts.googleapis.com/css?family=Roboto');
wp_enqueue_style(
'minicolors_css',
plugins_url('assets/css/jquery.minicolors.css', ADVANCED_GUTENBERG_PLUGIN)
);
wp_enqueue_style(
'ju_framework_styles_min',
plugins_url('assets/css/style.min.css', ADVANCED_GUTENBERG_PLUGIN)
);
wp_enqueue_style(
'block_config_css',
plugins_url('assets/css/block-config.css', ADVANCED_GUTENBERG_PLUGIN)
);
$loadingImage = plugins_url('assets/images/loading.gif', ADVANCED_GUTENBERG_PLUGIN);
wp_add_inline_style('block_config_css', '#advgb-loading-screen-image {background-image: url('. $loadingImage .')}');
wp_enqueue_script(
'minicolors_js',
plugins_url('assets/js/jquery.minicolors.min.js', ADVANCED_GUTENBERG_PLUGIN),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_enqueue_script(
'block_config_js',
plugins_url('assets/js/block-config.js', ADVANCED_GUTENBERG_PLUGIN),
array('jquery'),
ADVANCED_GUTENBERG_VERSION
);
$blocks_settings_list = array(
'advgb-accordion' => array(
array(
'label' => __('Header Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Background Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'headerBgColor',
),
array(
'title' => __('Text Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'headerTextColor'
),
array(
'title' => __('Header Icon', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'headerIcon',
'options' => array(
array(
'label' => __('Plus', 'advanced-gutenberg'),
'value' => 'plus',
),
array(
'label' => __('Plus Circle', 'advanced-gutenberg'),
'value' => 'plusCircle',
),
array(
'label' => __('Plus Circle Outline', 'advanced-gutenberg'),
'value' => 'plusCircleOutline',
),
array(
'label' => __('Plus Square Outline', 'advanced-gutenberg'),
'value' => 'plusBox',
),
array(
'label' => __('Unfold Arrow', 'advanced-gutenberg'),
'value' => 'unfold',
),
array(
'label' => __('Horizontal Dots', 'advanced-gutenberg'),
'value' => 'threeDots',
),
array(
'label' => __('Arrow Down', 'advanced-gutenberg'),
'value' => 'arrowDown',
),
)
),
array(
'title' => __('Header Icon Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'headerIconColor',
),
),
),
array(
'label' => __('Body Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Background Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'bodyBgColor',
),
array(
'title' => __('Text Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'bodyTextColor',
),
),
),
array(
'label' => __('Border Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Border Style', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'borderStyle',
'options' => array(
array(
'label' => __('Solid', 'advanced-gutenberg'),
'value' => 'solid',
),
array(
'label' => __('Dashed', 'advanced-gutenberg'),
'value' => 'dashed',
),
array(
'label' => __('Dotted', 'advanced-gutenberg'),
'value' => 'dotted',
),
)
),
array(
'title' => __('Border Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'borderColor',
),
array(
'title' => __('Border Width', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'borderWidth',
'min' => 1,
'max' => 10,
),
array(
'title' => __('Border Radius', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'borderRadius',
'min' => 0,
'max' => 100,
),
),
),
),
'advgb-button' => array(
array(
'label' => __('Text and Color', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Text Size', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'textSize',
'min' => 10,
'max' => 100,
),
array(
'title' => __('Text Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'textColor'
),
array(
'title' => __('Background Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'bgColor',
),
),
),
array(
'label' => __('Border Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Border Style', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'borderStyle',
'options' => array(
array(
'label' => __('Solid', 'advanced-gutenberg'),
'value' => 'solid',
),
array(
'label' => __('Dashed', 'advanced-gutenberg'),
'value' => 'dashed',
),
array(
'label' => __('Dotted', 'advanced-gutenberg'),
'value' => 'dotted',
),
)
),
array(
'title' => __('Border Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'borderColor',
),
array(
'title' => __('Border Width', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'borderWidth',
'min' => 1,
'max' => 10,
),
array(
'title' => __('Border Radius', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'borderRadius',
'min' => 0,
'max' => 100,
),
),
),
array(
'label' => __('Padding Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Padding Top', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'paddingTop',
'min' => 0,
'max' => 100,
),
array(
'title' => __('Padding Right', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'paddingRight',
'min' => 0,
'max' => 100,
),
array(
'title' => __('Padding Bottom', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'paddingBottom',
'min' => 0,
'max' => 100,
),
array(
'title' => __('Padding Left', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'paddingLeft',
'min' => 0,
'max' => 100,
),
),
),
array(
'label' => __('Hover Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Text Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'hoverTextColor'
),
array(
'title' => __('Background Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'hoverBgColor',
),
array(
'title' => __('Shadow Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'hoverShadowColor',
),
array(
'title' => __('Shadow H Offset', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'hoverShadowH',
'min' => -50,
'max' => 50,
),
array(
'title' => __('Shadow V Offset', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'hoverShadowV',
'min' => -50,
'max' => 50,
),
array(
'title' => __('Shadow Blur', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'hoverShadowBlur',
'min' => 0,
'max' => 50,
),
array(
'title' => __('Shadow Spread', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'hoverShadowSpread',
'min' => 0,
'max' => 50,
),
array(
'title' => __('Transition Speed', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'transitionSpeed',
'min' => 0,
'max' => 3,
),
),
),
),
'advgb-image' => array(
array(
'label' => __('Click action', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Action on click', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'openOnClick',
'options' => array(
array(
'label' => __('None', 'advanced-gutenberg'),
'value' => 'none',
),
array(
'label' => __('Open image in a lightbox', 'advanced-gutenberg'),
'value' => 'lightbox',
),
array(
'label' => __('Open custom URL', 'advanced-gutenberg'),
'value' => 'url',
),
),
),
array(
'title' => __('Open link in a new tab', 'advanced-gutenberg'),
'type' => 'checkbox',
'name' => 'linkInNewTab',
),
)
),
array(
'label' => __('Image Size', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Full width', 'advanced-gutenberg'),
'type' => 'checkbox',
'name' => 'fullWidth',
),
array(
'title' => __('Height', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'height',
'min' => 100,
'max' => 1000,
),
array(
'title' => __('Width', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'width',
'min' => 200,
'max' => 1300,
),
),
),
array(
'label' => __('Color', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Title Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'titleColor',
),
array(
'title' => __('Subtitle Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'subtitleColor',
),
array(
'title' => __('Overlay Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'overlayColor',
),
),
),
array(
'label' => __('Text Alignment', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Vertical Alignment', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'vAlign',
'options' => array(
array(
'label' => __('Top', 'advanced-gutenberg'),
'value' => 'flex-start',
),
array(
'label' => __('Center', 'advanced-gutenberg'),
'value' => 'center',
),
array(
'label' => __('Bottom', 'advanced-gutenberg'),
'value' => 'flex-end',
),
),
),
array(
'title' => __('Vertical Alignment', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'hAlign',
'options' => array(
array(
'label' => __('Left', 'advanced-gutenberg'),
'value' => 'flex-start',
),
array(
'label' => __('Center', 'advanced-gutenberg'),
'value' => 'center',
),
array(
'label' => __('Right', 'advanced-gutenberg'),
'value' => 'flex-end',
),
),
),
),
),
),
'advgb-list' => array(
array(
'label' => __('Text Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Text Size', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'textSize',
'min' => 10,
'max' => 100,
),
),
),
array(
'label' => __('Icon Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Icon style', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'icon',
'options' => array(
array(
'label' => __('None', 'advanced-gutenberg'),
'value' => '',
),
array(
'label' => __('Pushpin', 'advanced-gutenberg'),
'value' => 'admin-post',
),
array(
'label' => __('Configuration', 'advanced-gutenberg'),
'value' => 'admin-generic',
),
array(
'label' => __('Flag', 'advanced-gutenberg'),
'value' => 'flag',
),
array(
'label' => __('Star', 'advanced-gutenberg'),
'value' => 'star-filled',
),
array(
'label' => __('Checkmark', 'advanced-gutenberg'),
'value' => 'yes',
),
array(
'label' => __('Minus', 'advanced-gutenberg'),
'value' => 'minus',
),
array(
'label' => __('Plus', 'advanced-gutenberg'),
'value' => 'plus',
),
array(
'label' => __('Play', 'advanced-gutenberg'),
'value' => 'controls-play',
),
array(
'label' => __('Arrow Right', 'advanced-gutenberg'),
'value' => 'arrow-right-alt',
),
array(
'label' => __('X Cross', 'advanced-gutenberg'),
'value' => 'dismiss',
),
array(
'label' => __('Warning', 'advanced-gutenberg'),
'value' => 'warning',
),
array(
'label' => __('Help', 'advanced-gutenberg'),
'value' => 'editor-help',
),
array(
'label' => __('Info', 'advanced-gutenberg'),
'value' => 'info',
),
array(
'label' => __('Circle', 'advanced-gutenberg'),
'value' => 'marker',
),
),
),
array(
'title' => __('Icon color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'iconColor',
),
array(
'title' => __('Icon Size', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'iconSize',
'min' => 10,
'max' => 100,
),
array(
'title' => __('Line Height', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'lineHeight',
'min' => 0,
'max' => 100,
),
array(
'title' => __('Margin', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'margin',
'min' => 0,
'max' => 100,
),
array(
'title' => __('Padding', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'padding',
'min' => 0,
'max' => 100,
),
),
),
),
'advgb-table' => array(
array(
'label' => __('Table Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Max width', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'maxWidth',
'min' => 0,
'max' => 1999,
),
),
),
),
'advgb-video' => array(
array(
'label' => __('Video Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Open video in lightbox', 'advanced-gutenberg'),
'type' => 'checkbox',
'name' => 'openInLightbox',
),
array(
'title' => __('Full width', 'advanced-gutenberg'),
'type' => 'checkbox',
'name' => 'videoFullWidth'
),
array(
'title' => __('Video Width', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'videoWidth',
'min' => 100,
'max' => 1000,
),
array(
'title' => __('Video Height', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'videoHeight',
'min' => 300,
'max' => 7000,
),
array(
'title' => __('Overlay color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'overlayColor',
),
),
),
array(
'label' => __('Play Button Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Button Icon', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'playButtonIcon',
'options' => array(
array(
'label' => __('Normal', 'advanced-gutenberg'),
'value' => 'normal',
),
array(
'label' => __('Filled Circle', 'advanced-gutenberg'),
'value' => 'circleFill',
),
array(
'label' => __('Outline Circle', 'advanced-gutenberg'),
'value' => 'circleOutline',
),
array(
'label' => __('Video Camera', 'advanced-gutenberg'),
'value' => 'videoCam',
),
array(
'label' => __('Filled Square', 'advanced-gutenberg'),
'value' => 'squareCurved',
),
array(
'label' => __('Star Sticker', 'advanced-gutenberg'),
'value' => 'starSticker',
),
)
),
array(
'title' => __('Button Size', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'playButtonSize',
'min' => 40,
'max' => 200,
),
array(
'title' => __('Button Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'playButtonColor',
),
),
),
),
'advgb-count-up' => array(
array(
'label' => __('General Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Number of columns', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'columns',
'min' => 1,
'max' => 3,
),
),
),
array(
'label' => __('Color Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Header Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'headerTextColor',
),
array(
'title' => __('Count Up Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'countUpNumberColor',
),
array(
'title' => __('Description Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'descTextColor',
),
),
),
array(
'label' => __('Count Up Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Count Up Number Size', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'countUpNumberSize',
'min' => 10,
'max' => 100,
),
),
),
),
'advgb-map' => array(
array(
'label' => __('Location Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'type' => 'hidden',
'name' => 'useLatLng',
'value' => 1,
),
array(
'title' => __('Latitude', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'lat',
'min' => 0,
'max' => 999,
),
array(
'title' => __('Longitude', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'lng',
'min' => 0,
'max' => 999,
),
),
),
array(
'label' => __('Map Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Zoom Level', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'zoom',
'min' => 0,
'max' => 25,
),
array(
'title' => __('Height', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'height',
'min' => 300,
'max' => 1000,
),
array(
'title' => __('Map style', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'mapStyle',
'options' => array(
array('label' => __('Silver', 'advanced-gutenberg'), 'value' => 'silver'),
array('label' => __('Retro', 'advanced-gutenberg'), 'value' => 'retro'),
array('label' => __('Dark', 'advanced-gutenberg'), 'value' => 'dark'),
array('label' => __('Night', 'advanced-gutenberg'), 'value' => 'night'),
array('label' => __('Aubergine', 'advanced-gutenberg'), 'value' => 'aubergine'),
array('label' => __('Custom', 'advanced-gutenberg'), 'value' => 'custom'),
)
),
),
),
array(
'label' => __('Marker Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Marker Title', 'advanced-gutenberg'),
'type' => 'text',
'name' => 'markerTitle',
),
array(
'title' => __('Marker Description', 'advanced-gutenberg'),
'type' => 'text',
'name' => 'markerDesc',
),
),
),
),
'advgb-social-links' => array(
array(
'label' => __('Icon 1 Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Icon', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'icon1.icon',
'options' => array(
array('label' => __('Blogger', 'advanced-gutenberg'), 'value' => 'blogger'),
array('label' => __('Facebook', 'advanced-gutenberg'), 'value' => 'facebook'),
array('label' => __('Flickr', 'advanced-gutenberg'), 'value' => 'flickr'),
array('label' => __('Google Plus', 'advanced-gutenberg'), 'value' => 'google'),
array('label' => __('Instagram', 'advanced-gutenberg'), 'value' => 'instagram'),
array('label' => __('LinkedIn', 'advanced-gutenberg'), 'value' => 'linkedin'),
array('label' => __('Email', 'advanced-gutenberg'), 'value' => 'mail'),
array('label' => __('Picasa', 'advanced-gutenberg'), 'value' => 'picasa'),
array('label' => __('Pinterest', 'advanced-gutenberg'), 'value' => 'pinterest'),
array('label' => __('Reddit', 'advanced-gutenberg'), 'value' => 'reddit'),
array('label' => __('Skype', 'advanced-gutenberg'), 'value' => 'skype'),
array('label' => __('Sound Cloud', 'advanced-gutenberg'), 'value' => 'soundcloud'),
array('label' => __('Tumblr', 'advanced-gutenberg'), 'value' => 'tumblr'),
array('label' => __('Twitter', 'advanced-gutenberg'), 'value' => 'twitter'),
array('label' => __('Vimeo', 'advanced-gutenberg'), 'value' => 'vimeo'),
array('label' => __('Youtube', 'advanced-gutenberg'), 'value' => 'youtube'),
)
),
array(
'title' => __('Icon Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'icon1.iconColor',
),
array(
'title' => __('Icon Link', 'advanced-gutenberg'),
'type' => 'text',
'name' => 'icon1.link',
),
),
),
array(
'label' => __('Icon 2 Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Icon', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'icon2.icon',
'options' => array(
array('label' => __('Blogger', 'advanced-gutenberg'), 'value' => 'blogger'),
array('label' => __('Facebook', 'advanced-gutenberg'), 'value' => 'facebook'),
array('label' => __('Flickr', 'advanced-gutenberg'), 'value' => 'flickr'),
array('label' => __('Google Plus', 'advanced-gutenberg'), 'value' => 'google'),
array('label' => __('Instagram', 'advanced-gutenberg'), 'value' => 'instagram'),
array('label' => __('LinkedIn', 'advanced-gutenberg'), 'value' => 'linkedin'),
array('label' => __('Email', 'advanced-gutenberg'), 'value' => 'mail'),
array('label' => __('Picasa', 'advanced-gutenberg'), 'value' => 'picasa'),
array('label' => __('Pinterest', 'advanced-gutenberg'), 'value' => 'pinterest'),
array('label' => __('Reddit', 'advanced-gutenberg'), 'value' => 'reddit'),
array('label' => __('Skype', 'advanced-gutenberg'), 'value' => 'skype'),
array('label' => __('Sound Cloud', 'advanced-gutenberg'), 'value' => 'soundcloud'),
array('label' => __('Tumblr', 'advanced-gutenberg'), 'value' => 'tumblr'),
array('label' => __('Twitter', 'advanced-gutenberg'), 'value' => 'twitter'),
array('label' => __('Vimeo', 'advanced-gutenberg'), 'value' => 'vimeo'),
array('label' => __('Youtube', 'advanced-gutenberg'), 'value' => 'youtube'),
)
),
array(
'title' => __('Icon Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'icon2.iconColor',
),
array(
'title' => __('Icon Link', 'advanced-gutenberg'),
'type' => 'text',
'name' => 'icon2.link',
),
),
),
array(
'label' => __('Icon 3 Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Icon', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'icon3.icon',
'options' => array(
array('label' => __('Blogger', 'advanced-gutenberg'), 'value' => 'blogger'),
array('label' => __('Facebook', 'advanced-gutenberg'), 'value' => 'facebook'),
array('label' => __('Flickr', 'advanced-gutenberg'), 'value' => 'flickr'),
array('label' => __('Google Plus', 'advanced-gutenberg'), 'value' => 'google'),
array('label' => __('Instagram', 'advanced-gutenberg'), 'value' => 'instagram'),
array('label' => __('LinkedIn', 'advanced-gutenberg'), 'value' => 'linkedin'),
array('label' => __('Email', 'advanced-gutenberg'), 'value' => 'mail'),
array('label' => __('Picasa', 'advanced-gutenberg'), 'value' => 'picasa'),
array('label' => __('Pinterest', 'advanced-gutenberg'), 'value' => 'pinterest'),
array('label' => __('Reddit', 'advanced-gutenberg'), 'value' => 'reddit'),
array('label' => __('Skype', 'advanced-gutenberg'), 'value' => 'skype'),
array('label' => __('Sound Cloud', 'advanced-gutenberg'), 'value' => 'soundcloud'),
array('label' => __('Tumblr', 'advanced-gutenberg'), 'value' => 'tumblr'),
array('label' => __('Twitter', 'advanced-gutenberg'), 'value' => 'twitter'),
array('label' => __('Vimeo', 'advanced-gutenberg'), 'value' => 'vimeo'),
array('label' => __('Youtube', 'advanced-gutenberg'), 'value' => 'youtube'),
)
),
array(
'title' => __('Icon Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'icon3.iconColor',
),
array(
'title' => __('Icon Link', 'advanced-gutenberg'),
'type' => 'text',
'name' => 'icon3.link',
),
),
),
array(
'label' => __('General Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Icon Alignment', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'align',
'options' => array(
array('label' => __('Left', 'advanced-gutenberg'), 'value' => 'left'),
array('label' => __('Center', 'advanced-gutenberg'), 'value' => 'center'),
array('label' => __('Right', 'advanced-gutenberg'), 'value' => 'right'),
)
),
array(
'title' => __('Icon Size', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'iconSize',
'min' => 20,
'max' => 60,
),
array(
'title' => __('Icon Space', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'iconSpace',
'min' => 0,
'max' => 30,
),
),
),
),
'advgb-summary' => array(
array(
'label' => __('General Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Load minimized', 'advanced-gutenberg'),
'type' => 'checkbox',
'name' => 'loadMinimized',
),
array(
'title' => __('Summary header title', 'advanced-gutenberg'),
'type' => 'text',
'name' => 'headerTitle',
),
array(
'title' => __('Anchor color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'anchorColor',
),
array(
'title' => __('Summary Alignment', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'align',
'options' => array(
array('label' => __('Left', 'advanced-gutenberg'), 'value' => 'left'),
array('label' => __('Center', 'advanced-gutenberg'), 'value' => 'center'),
array('label' => __('Right', 'advanced-gutenberg'), 'value' => 'right'),
)
),
),
),
),
'advgb-tabs' => array(
array(
'label' => __('Tab Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Background Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'headerBgColor',
),
array(
'title' => __('Text Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'headerTextColor',
),
),
),
array(
'label' => __('Active Tab Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Background Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'activeTabBgColor',
),
array(
'title' => __('Text Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'activeTabTextColor',
),
),
),
array(
'label' => __('Body Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Background Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'bodyBgColor',
),
array(
'title' => __('Text Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'bodyTextColor',
),
),
),
array(
'label' => __('Border Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Border Style', 'advanced-gutenberg'),
'type' => 'select',
'name' => 'borderStyle',
'options' => array(
array('label' => __('Solid', 'advanced-gutenberg'), 'value' => 'solid'),
array('label' => __('Dashed', 'advanced-gutenberg'), 'value' => 'dashed'),
array('label' => __('Dotted', 'advanced-gutenberg'), 'value' => 'dotted'),
)
),
array(
'title' => __('Border Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'borderColor',
),
array(
'title' => __('Border Width', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'borderWidth',
'min' => 1,
'max' => 10,
),
array(
'title' => __('Border Radius', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'borderRadius',
'min' => 0,
'max' => 100,
),
),
),
),
'advgb-testimonial' => array(
array(
'label' => __('General Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Columns', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'columns',
'min' => 1,
'max' => 3,
),
),
),
array(
'label' => __('Avatar Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Background Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'avatarColor',
),
array(
'title' => __('Border Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'avatarBorderColor',
),
array(
'title' => __('Border Radius (%)', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'avatarBorderRadius',
'min' => 0,
'max' => 50,
),
array(
'title' => __('Border Width', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'avatarBorderWidth',
'min' => 0,
'max' => 5,
),
array(
'title' => __('Avatar Size', 'advanced-gutenberg'),
'type' => 'number',
'name' => 'avatarSize',
'min' => 50,
'max' => 130,
),
),
),
array(
'label' => __('Text Settings', 'advanced-gutenberg'),
'settings' => array(
array(
'title' => __('Name Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'nameColor',
),
array(
'title' => __('Position Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'positionColor',
),
array(
'title' => __('Description Color', 'advanced-gutenberg'),
'type' => 'color',
'name' => 'descColor',
),
),
),
),
);
$advgb_blocks_default_config = get_option('advgb_blocks_default_config');
$current_block = $block;
if (!isset($blocks_settings_list[$current_block])) {
wp_die(esc_html(__('Config for this block is currently unsupported.', 'advanced-gutenberg')));
return;
}
$current_block_settings = $blocks_settings_list[$current_block];
$current_block_settings_value = array();
if ($advgb_blocks_default_config !== false) {
if (isset($advgb_blocks_default_config[$current_block])) {
$current_block_settings_value = $advgb_blocks_default_config[$current_block];
}
}
require_once(plugin_dir_path(__FILE__) . 'view/advanced-gutenberg-block-config.php');
}
/**
* Function to get and load the view
*
* @param string $view View to load
*
* @return void
*/
public function loadView($view)
{
include_once(plugin_dir_path(__FILE__) . 'view/advanced-gutenberg-' . $view . '.php');
}
/**
* Function to load assets for post/page on front-end before gutenberg rendering
*
* @param string $content Post content
*
* @return string
*/
public function contentPreRender($content)
{
// Search for Button and List blocks then add styles to it
preg_match_all(
'/()/mis',
$content,
$matches
);
$content .= $this->addBlocksStyles($matches);
return $content;
}
/**
* Function to load assets for post/page on front-end after gutenberg rendering
*
* @param string $content Post content
*
* @return string
*/
public function addFrontendContentAssets($content)
{
// Check to disable autop
$saved_settings = false;
if (has_filter('the_content', 'wpautop')) {
if (!$saved_settings) {
$saved_settings = get_option('advgb_settings');
}
if (!empty($saved_settings['disable_wpautop'])) {
remove_filter('the_content', 'wpautop');
}
}
wp_enqueue_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js');
if (strpos($content, 'wp-block-gallery') !== false) {
if (!$saved_settings) {
$saved_settings = get_option('advgb_settings');
}
if ($saved_settings['gallery_lightbox']) {
wp_enqueue_style('colorbox_style');
wp_enqueue_script('colorbox_js');
wp_enqueue_script(
'gallery_lightbox_js',
plugins_url('assets/js/gallery.colorbox.init.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
wp_localize_script('gallery_lightbox_js', 'advgb', array(
'imageCaption' => $saved_settings['gallery_lightbox_caption']
));
}
}
if (strpos($content, 'advgb-toc-header') !== false) {
wp_enqueue_script(
'summary_minimized',
plugins_url('assets/blocks/summary/summaryMinimized.js', dirname(__FILE__)),
array('jquery')
);
}
if (strpos($content, 'wp-block-advgb-count-up') !== false) {
wp_enqueue_script(
'waypoint_js',
'https://cdnjs.cloudflare.com/ajax/libs/waypoints/2.0.5/waypoints.min.js',
array('jquery')
);
wp_enqueue_script(
'countup_lib_js',
plugins_url('assets/blocks/count-up/jquery.counterup.min.js', dirname(__FILE__)),
array('jquery'),
ADVANCED_GUTENBERG_VERSION
);
wp_enqueue_script(
'countup_js',
plugins_url('assets/blocks/count-up/countUp.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
}
if (strpos($content, 'advgb-image-block') !== false) {
if (strpos($content, 'advgb-lightbox') !== false) {
wp_enqueue_style('colorbox_style');
wp_enqueue_script('colorbox_js');
wp_enqueue_script(
'advgbImageLightbox_js',
plugins_url('assets/blocks/advimage/lightbox.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
}
}
if (strpos($content, 'advgb-video-lightbox') !== false) {
wp_enqueue_style('colorbox_style');
wp_enqueue_script('colorbox_js');
wp_enqueue_script(
'advgbVideoLightbox_js',
plugins_url('assets/blocks/advvideo/lightbox.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
}
if (strpos($content, 'advgb-map-block') !== false) {
wp_enqueue_script(
'advgb_gmap_js',
plugins_url('assets/blocks/map/frontend.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
}
if (strpos($content, 'advgb-accordion-block') !== false) {
wp_enqueue_script('jquery-ui-accordion');
wp_add_inline_script('jquery-ui-accordion', 'jQuery(document).ready(function($){
$(".advgb-accordion-block").parent().each(function() {
$(this).accordion({
header: ".advgb-accordion-header",
heightStyle: "content",
collapsible: true,
active: $(this).find(".advgb-accordion-block:first").data("collapsed") ? false : 0,
});
});
});');
}
if (strpos($content, 'advgb-tabs-block') !== false) {
wp_enqueue_script('jquery-ui-tabs');
wp_add_inline_script('jquery-ui-tabs', 'jQuery(document).ready(function($){
$(".advgb-tab a:not(.ui-tabs-anchor)").unbind("click");
$(".advgb-tabs-block").tabs();
});');
}
if (strpos($content, 'advgb-recent-posts-block slider-view') !== false) {
wp_enqueue_style('slick_style');
wp_enqueue_style('slick_theme_style');
wp_enqueue_script('slick_js');
wp_add_inline_script('slick_js', 'jQuery(document).ready(function($){
$(".advgb-recent-posts-block.slider-view .advgb-recent-posts:not(.slick-initialized)").slick({
dots: true,
adaptiveHeight: true,
})
});');
}
if (strpos($content, 'advgb-woo-products slider-view') !== false) {
wp_enqueue_style('slick_style');
wp_enqueue_style('slick_theme_style');
wp_enqueue_script('slick_js');
wp_add_inline_script('slick_js', 'jQuery(document).ready(function($){
$(".advgb-woo-products.slider-view .products:not(.slick-initialized)").slick({
dots: true,
adaptiveHeight: true,
})
});');
}
if (strpos($content, 'advgb-images-slider-block') !== false) {
wp_enqueue_style('slick_style');
wp_enqueue_style('slick_theme_style');
wp_enqueue_script('slick_js');
wp_add_inline_script('slick_js', 'jQuery(document).ready(function($){
$(".advgb-images-slider-block .advgb-images-slider:not(.slick-initialized)").slick({
dots: true,
adaptiveHeight: true,
})
});');
if (strpos($content, 'advgb-images-slider-lightbox') !== false) {
wp_enqueue_style('colorbox_style');
wp_enqueue_script('colorbox_js');
wp_enqueue_script(
'advgbImageSliderLightbox_js',
plugins_url('assets/blocks/images-slider/lightbox.js', dirname(__FILE__)),
array(),
ADVANCED_GUTENBERG_VERSION
);
}
}
if (strpos($content, 'advgb-contact-form') !== false) {
wp_enqueue_script(
'advgbContactForm_js',
plugins_url('assets/blocks/contact-form/frontend.js', dirname(__FILE__)),
array('jquery'),
ADVANCED_GUTENBERG_VERSION
);
wp_localize_script('advgbContactForm_js', 'advgbContactForm', array('ajax_url' => admin_url('admin-ajax.php')));
}
if (strpos($content, 'advgb-newsletter') !== false) {
wp_enqueue_script(
'advgbNewsletter_js',
plugins_url('assets/blocks/newsletter/frontend.js', dirname(__FILE__)),
array('jquery'),
ADVANCED_GUTENBERG_VERSION
);
wp_localize_script('advgbNewsletter_js', 'advgbNewsletter', array('ajax_url' => admin_url('admin-ajax.php')));
}
if (strpos($content, 'advgb-testimonial slider-view') !== false) {
wp_enqueue_style('slick_style');
wp_enqueue_style('slick_theme_style');
wp_enqueue_script('slick_js');
wp_add_inline_script('slick_js', 'jQuery(document).ready(function($){
$(".advgb-testimonial.slider-view:not(.slick-initialized)").slick({
infinite: true,
centerMode: true,
centerPadding: "40px",
slidesToShow: 3,
responsive: [
{breakpoint: 480, settings: {slidesToShow: 1}}
]
})
});');
}
if (strpos($content, 'advgb-testimonial') !== false) {
$content = preg_replace_callback(
'@]*?advgb\-testimonial.*?(
)@s',
array($this, 'decodeHtmlEntity'),
$content
);
}
return $content;
}
/**
* Add styles for Adv Button and Adv List
*
* @param array $matches Matched string
*
* @return string HTML style
*/
public function addBlocksStyles($matches)
{
$style_html = '';
if ($matches && count($matches)) {
foreach ($matches[0] as $key => $match) {
preg_match('/{.*?}/', $match, $style_data);
if ($style_data && count($style_data)) {
$style_html .= '';
} catch (Exception $e) {
$style_html = '';
}
} else {
$style_html = '';
}
}
}
return preg_replace('/\s\s+/', '', $style_html);
}
/**
* Convert html entity to real character
*
* @param string $match Matched string
*
* @return mixed
*/
public function decodeHtmlEntity($match)
{
return str_replace('<', '<', $match[0]);
}
/**
* Function to load external plugins for tinyMCE
*
* @param array $plgs External plugins
*
* @return array
*/
public function addTinyMceExternal(array $plgs)
{
$plgs['customstyles'] = plugin_dir_url(dirname(__FILE__)) . 'assets/blocks/customstyles/plugin.js';
return $plgs;
}
/**
* Function to add buttons for tinyMCE toolbars
*
* @param array $buttons TinyMCE buttons
*
* @return array
*/
public function addTinyMceButtons(array $buttons)
{
array_push($buttons, 'customstyles');
return $buttons;
}
/**
* Render html for block config settings fields
*
* @param array $fieldset Array of field to render
* @param array $data Data will load as value to field
*
* @return boolean Echo html content
*/
public function renderBlockConfigFields($fieldset, $data)
{
$html = '';
foreach ($fieldset as $category) {
$html .= '';
$html .= '
' . $category['label'] . ' ';
$html .= '
';
foreach ($category['settings'] as $setting) {
$settingValue = $this->setConfigValue($data, $setting['name']);
if ($setting['type'] === 'hidden') {
$html .= ' ';
continue;
}
$html .= '';
$html .= '' . $setting['title'] . ' ';
$html .= '';
$html .= ' ';
}
$html .= ' ';
$html .= '
';
}
echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- already escaped
return true;
}
/**
* Set value to config field
*
* @param array $valueList Array of values to set
* @param string $valueToGet Value field to set
* @param mixed $default Default value if value field from list not set
*
* @return string Value after check
*/
private function setConfigValue($valueList, $valueToGet, $default = '')
{
$valueReturn = $default;
if (gettype($valueList) === 'array') {
if (isset($valueList[$valueToGet])) {
$valueReturn = $valueList[$valueToGet];
}
}
return $valueReturn;
}
}