array(), 'js' => array(), 'minimal' => ''); public static $rs_css_collection = array(); public static $rs_revicons = false; public static $rs_youtube_api_loaded = false; public static $revslider_fonts = array('queue' => array(), 'loaded' => array()); public static $revslider_addon_notice_merged = 0; public static $revslider_animations = array(); public static $revslider_rev_start_size_loaded = false; public static $rs_do_init_action = true; public static $fa_icon_var; public static $fa_var; public static $pe_7s_var; /** * @var array */ protected $_overviewData; /** * @var string */ protected $_currentFilter; /** * List of scripts to require * * @var array */ protected $_scriptsToRequire = []; /** * Constructor */ public function __construct( \Magento\Framework\App\Helper\Context $context, \Magento\Framework\App\State $appState, \Magento\Backend\Model\Auth\Session $authSession, \Magento\Backend\Model\UrlInterface $backendUrl, \Magento\Cms\Model\PageFactory $pageFactory, \Magento\Cms\Model\Template\FilterProvider $filterProvider, \Magento\Customer\Model\ResourceModel\Group\Collection $customerGroupCollection, \Magento\Framework\App\Cache\Proxy $cacheProxy, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\App\Response\Http $redirect, \Magento\Framework\Data\Form\FormKey $formKey, \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Framework\View\Asset\Repository $assetRepo, \Magento\Framework\View\Asset\Minification $minification, \Magento\Framework\View\Element\Template\File\Resolver $templateFileResolver, \Magento\Framework\View\LayoutFactory $layoutFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Nwdthemes\Revslider\Helper\Curl $curlHelper, \Nwdthemes\Revslider\Helper\Filesystem $filesystemHelper, \Nwdthemes\Revslider\Helper\Images $imagesHelper, \Nwdthemes\Revslider\Helper\Options $optionsHelper, \Nwdthemes\Revslider\Helper\Plugin $pluginHelper, \Nwdthemes\Revslider\Helper\Products $productsHelper, \Nwdthemes\Revslider\Helper\Query $queryHelper, \Nwdthemes\Revslider\Helper\Register $registerHelper ) { $this->_appState = $appState; $this->_authSession = $authSession; $this->_backendUrl = $backendUrl; $this->_filterProvider = $filterProvider; $this->_customerGroupCollection = $customerGroupCollection; $this->_pageFactory = $pageFactory; $this->_cacheProxy = $cacheProxy; $this->_scopeConfig = $scopeConfig; $this->_redirect = $redirect; $this->_formKey = $formKey; $this->_filesystem = $filesystem; $this->_date = $date; $this->_assetRepo = $assetRepo; $this->_minification = $minification; $this->_templateFileResolver = $templateFileResolver; $this->_layoutFactory = $layoutFactory; $this->_storeManager = $storeManager; $this->_curlHelper = $curlHelper; $this->_filesystemHelper = $filesystemHelper; $this->_imagesHelper = $imagesHelper; $this->_optionsHelper = $optionsHelper; $this->_pluginHelper = $pluginHelper; $this->_productsHelper = $productsHelper; $this->_queryHelper = $queryHelper; $this->_registerHelper = $registerHelper; $this->_areaCode = $appState->getAreaCode(); $this->_request = $context->getRequest(); $this->_directory = $this->_filesystem->getDirectoryWrite(DirectoryList::MEDIA); parent::__construct($context); self::$RS_PLUGIN_PATH = $this->getAssetPath() . DIRECTORY_SEPARATOR; self::$RS_PLUGIN_URL = $this->getAssetUrl() . '/'; self::$RS_PLUGIN_SLUG = $this->apply_filters('set_revslider_slug', Data::REVSLIDER_PRODUCT); self::$WP_PLUGIN_URL = $this->_storeManager ->getStore() ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA) . Plugin::WP_PLUGIN_DIR; // add filters to make image url relative $this->add_filter('revslider_slider_saveData', array($this, 'sliderSaveDataFilter'), 10, 1); $this->add_filter('revslider_slide_saveParams', array($this, 'slideSaveParamsFilter'), 10, 3); $this->add_filter('revslider_slide_saveLayers', array($this, 'slideSaveLayersFilter'), 10, 3); // add filters to make image url absolute $this->add_filter('revslider_slider_init_by_data', array($this, 'sliderInitByDataFilter'), 10, 1); $this->add_filter('revslider_slide_init_by_data', array($this, 'slideInitByDataFilter'), 10, 1); // add filters to modify layers $this->add_filter('revslider_get_layers', array($this, 'getLayersFilter'), 10, 1); // Inject into adapter FrameworkAdapter::injectFramework($this); } /** * Check if unserialized * * @param var Original * @return var */ public function maybe_unserialize($original) { if ( $this->is_serialized( $original ) ) // don't attempt to unserialize data that wasn't serialized going in return @unserialize( $original ); return $original; } /** * Check value to find if it was serialized. * * @param string $data Value to check to see if was serialized. * @param bool $strict Optional. Whether to be strict about the end of the string. Default true. * @return bool False if not serialized and true if it was. */ public function is_serialized( $data, $strict = true ) { // if it isn't a string, it isn't serialized. if ( ! is_string( $data ) ) { return false; } $data = trim( $data ); if ( 'N;' == $data ) { return true; } if ( strlen( $data ) < 4 ) { return false; } if ( ':' !== $data[1] ) { return false; } if ( $strict ) { $lastc = substr( $data, -1 ); if ( ';' !== $lastc && '}' !== $lastc ) { return false; } } else { $semicolon = strpos( $data, ';' ); $brace = strpos( $data, '}' ); // Either ; or } must exist. if ( false === $semicolon && false === $brace ) return false; // But neither must be in the first X characters. if ( false !== $semicolon && $semicolon < 3 ) return false; if ( false !== $brace && $brace < 4 ) return false; } $token = $data[0]; switch ( $token ) { case 's' : if ( $strict ) { if ( '"' !== substr( $data, -2, 1 ) ) { return false; } } elseif ( false === strpos( $data, '"' ) ) { return false; } // or else fall through case 'a' : case 'O' : return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data ); case 'b' : case 'i' : case 'd' : $end = $strict ? '$' : ''; return (bool) preg_match( "/^{$token}:[0-9.E-]+;$end/", $data ); } return false; } /** * Output checkbox checked * * @param string Value * @param string State (on/off) * @param boolean $output */ function checked($value = '', $state = 'on', $output = true) { $result = $value == $state ? 'checked="checked"' : ''; if ($output) { echo $result; } return $result; } /** * Output select option selected * * @param string Value * @param string State * @param boolean Output */ public function selected($value = '', $state = '', $output = true) { if ( $value == $state ) { if ($output) { echo 'selected="selected"'; } else { return 'selected="selected"'; } } } /** * Does nothing * * @param string Nounce * @param string Actions * @return boolean True */ public function wp_verify_nonce($nonce = '', $actions = '') { return TRUE; } /** * Does nothing * * @param string Content * @param Nwdthemes\Revslider\Model\Revslider\RevSliderSlide Slide * @return string Content */ public function do_shortcode($content = '', $slide = false) { $filter = $this->_filterProvider ->getBlockFilter() ->setStoreId($this->getStoreId()); if ($slide && $slide->isFromPost()) { $content = $slide->set_post_data($content, $slide->getPostData(), $slide->getID()); } // add missing slashes to block class in CMS shortcode preg_match_all('/{{.*class="([a-zA-Z]+)".*}}/U', $content, $matches, PREG_SET_ORDER, 0); foreach ($matches as $match) { preg_match_all('/([A-Z]([a-z]+))/', $match[1], $_matches, PREG_SET_ORDER, 0); $className = ''; foreach ($_matches as $_key => $_match) { if ($_key) { $className .= '\\'; } $className .= $_match[0]; } $shortCode = str_replace($match[1], $className, $match[0]); $content = str_replace($match[0], $shortCode, $content); } return $this->forceSSL(__($filter->filter($content))); } /** * Check if has shortcode * * @param string $content * @param string $keyword * @return boolean */ public function has_shortcode($content, $keyword) { return strpos($content, '[' . $keyword) !== false; } /** * Does nothing * * @return string */ public function wp_create_nonce() { return $this->_formKey->getFormKey(); } /** * Does nothing * * @return boolean False */ public function is_multisite() { return FALSE; } /** * Returns content url * * @return string */ public function content_url() { return $this->_storeManager ->getStore() ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA) . self::WP_CONTENT_DIR; } /** * Gets Get Param * * @param string Handle * @param string Default * @return string Value */ public function get_param($handle = '', $default = '') { $ci = &get_instance(); $value = $ci->input->get($handle); return $value === FALSE ? $default : $value; } /** * Replicates WP style pagination * * @param array Arguments * @return string Pagination html */ public function paginate_links( $args = array() ) { $total = 1; $current = $this->_request->getParam('paged', 1); $defaults = array( 'total' => $total, 'current' => $current, 'show_all' => false, 'prev_next' => true, 'prev_text' => __('« Previous'), 'next_text' => __('Next »'), 'end_size' => 1, 'mid_size' => 2, 'type' => 'plain', 'add_args' => false, // array of query args to add 'add_fragment' => '', 'before_page_number' => '', 'after_page_number' => '' ); $args = array_merge( $defaults, $args ); // Who knows what else people pass in $args $total = (int) $args['total']; if ( $total < 2 ) { return; } $current = (int) $args['current']; $end_size = (int) $args['end_size']; // Out of bounds? Make it the default. if ( $end_size < 1 ) { $end_size = 1; } $mid_size = (int) $args['mid_size']; if ( $mid_size < 0 ) { $mid_size = 2; } $add_args = is_array( $args['add_args'] ) ? $args['add_args'] : false; $r = ''; $page_links = array(); $dots = false; if ( $args['prev_next'] && $current && 1 < $current ) : $link = str_replace( '%_%', 2 == $current ? '' : $args['format'], $args['base'] ); $link = str_replace( '%#%', $current - 1, $link ); if ( $add_args ) $link = $this->add_query_arg( $add_args, $link ); $link .= $args['add_fragment']; /** * Filter the paginated links for the given archive pages. * * @since 3.0.0 * * @param string $link The paginated link URL. */ $page_links[] = ''; endif; for ( $n = 1; $n <= $total; $n++ ) : if ( $n == $current ) : $page_links[] = "" . $args['before_page_number'] . $n . $args['after_page_number'] . ""; $dots = true; else : if ( $args['show_all'] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) : $link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] ); $link = str_replace( '%#%', $n, $link ); if ( $add_args ) $link = $this->add_query_arg( $add_args, $link ); $link .= $args['add_fragment']; /** This filter is documented in wp-includes/general-template.php */ $page_links[] = "" . $args['before_page_number'] . $n . $args['after_page_number'] . ""; $dots = true; elseif ( $dots && ! $args['show_all'] ) : $page_links[] = '' . __( '…' ) . ''; $dots = false; endif; endif; endfor; if ( $args['prev_next'] && $current && ( $current < $total || -1 == $total ) ) : $link = str_replace( '%_%', $args['format'], $args['base'] ); $link = str_replace( '%#%', $current + 1, $link ); if ( $add_args ) $link = $this->add_query_arg( $add_args, $link ); $link .= $args['add_fragment']; /** This filter is documented in wp-includes/general-template.php */ $page_links[] = ''; endif; switch ( $args['type'] ) { case 'array' : return $page_links; case 'list' : $r .= "\n"; break; default : $r = join("\n", $page_links); break; } return $r; } /** * Add arguments to url * * @param array Arguments * @param string Url * @return string Link */ public function add_query_arg($args = array(), $link = '') { if ( is_array($args) ) { foreach ($args as $_key => $_val) { $link .= $_key . '/' . $_val . '/'; } } return $link; } /** * Check if SSL in use * * @return boolean */ public function is_ssl() { return $this->_storeManager->getStore()->isCurrentlySecure(); } /** * Force ssl on urls * * @param string * @return string */ public function forceSSL($url) { if (strpos($url, '//') === 0) { $url = 'https:' . $url; } if ($this->is_ssl()) { $url = str_replace('http://', 'https://', $url); } else { $url = str_replace('https://', 'http://', $url); } return $url; } /** * Set url scheme for url * * @param string $url * @return string */ public function set_url_scheme($url) { if ($this->is_ssl()) { $url = str_replace('http://', 'https://', $url); } else { $url = str_replace('https://', 'http://', $url); } return $url; } /** * Get upload dir * * @return array */ public function wp_upload_dir() { $store = $this->_storeManager->getStore(); $upload_dir = array( 'path' => $this->_directory->getAbsolutePath(), 'url' => $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB), 'subdir' => '/', 'basedir' => $this->_directory->getAbsolutePath() . self::WP_CONTENT_DIR, 'baseurl' => $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA) . self::WP_CONTENT_DIR, 'error' => FALSE ); return $upload_dir; } /** * Get time * * @return int */ public function current_time() { return $this->_date->gmtTimestamp() + $this->_date->getGmtOffset(); } /** * Snitize title * * @param string * @return string */ public function sanitize_title($title) { return $this->sanitize_text_field($title); } /** * Snitize title * * @param string * @return string */ public function sanitize_title_with_dashes($title) { $string = $this->sanitize_title($title); return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-')); } /** * Snitize text field * * @param string * @return string */ public function sanitize_text_field($string) { if (is_string($string)) { $filtered = strip_tags($string); $found = false; while ( preg_match('/%[a-f0-9]{2}/i', $filtered, $match) ) { $filtered = str_replace($match[0], '', $filtered); $found = true; } if ( $found ) { $filtered = trim( preg_replace('/ +/', ' ', $filtered) ); } return $filtered; } else { if (is_array($string)) { foreach($string as $_key => $_string) { $string[$_key] = $this->sanitize_text_field($_string); } } return $string; } } /** * Strip shortcodes * * @param string * @return string */ public function strip_shortcodes($string) { return $string; } /** * Escape attribute * * @param string * @return string */ public function esc_attr($text) { return htmlspecialchars($text); } public function esc_url($text) { return $text; } public function esc_html($text) { return strip_tags($text); } /** * Escape JS * * @param string * @return string */ public function esc_js($text) { $text = preg_replace( '/&#(x)?0*(?(1)27|39);?/i', "'", stripslashes($text)); $text = str_replace( "\r", '', $text); $text = str_replace( "\n", '\\n', addslashes($text)); return $text; } /** * Format sizes * * @param int Bytes * @param int Decimals * @return string */ public function size_format( $bytes, $decimals = 0 ) { $quant = array( // ========================= Origin ==== 'TB' => 1099511627776, // pow( 1024, 4) 'GB' => 1073741824, // pow( 1024, 3) 'MB' => 1048576, // pow( 1024, 2) 'kB' => 1024, // pow( 1024, 1) 'B ' => 1, // pow( 1024, 0) ); foreach ( $quant as $unit => $mag ) if ( doubleval($bytes) >= $mag ) return number_format( $bytes / $mag, $decimals ) . ' ' . $unit; return false; } /** * * Filter functions * */ /** * Add filter * * @param string $handle * @param array $filter * @param int $priority * @param int $accepted_args */ public function add_filter($handle, $filter, $priority = 10, $accepted_args = 1) { $data = array( 'function' => $filter, 'priority' => $priority, 'accepted_args' => $accepted_args ); $this->_registerHelper->addToRegister('filters', $handle, $data); } /** * Add filter * * @param string $handle * @param mixed $value * @return var */ public function apply_filters($handle, $value) { $this->_currentFilter = $handle; $args = func_get_args(); if (func_num_args()) { unset($args[0]); } $filtersToApply = $this->_registerHelper->getFromRegister('filters', $handle); usort($filtersToApply, function ($a, $b) { if ($a['priority'] == $b['priority']) { return 0; } else { return $a['priority'] < $b['priority'] ? -1 : 1; } }); foreach ($filtersToApply as $filter) { $args = array_slice(func_get_args(), 1, $filter['accepted_args']); $args[ 0] = $value; if (is_array($filter['function']) && count($filter['function']) && is_string($filter['function'][0])) { $reflectionMethod = new \ReflectionMethod($filter['function'][0], $filter['function'][1]); if (!$reflectionMethod->isStatic()) { $reflectionClass = new \ReflectionClass($filter['function'][0]); $filter['function'][0] = $reflectionClass->newInstanceWithoutConstructor(); } } $value = call_user_func_array($filter['function'], $args); } if ($this->_registerHelper->getFromRegister('actions', $handle)) { $value = call_user_func_array([$this, 'do_action'], func_get_args()); } $this->_currentFilter = NULL; return $value; } /** * Get current filter * * @return string */ public function current_filter() { return $this->_currentFilter; } /** * Register script * * @param string $handle * @param string $script */ public function wp_register_script($handle, $script = false) { $this->_registerHelper->addToRegister('register_scripts', $handle, $script); } /** * Add script * * @param string $handle * @param string $script */ public function wp_enqueue_script($handle, $script = false) { $handles = is_array($handle) ? $handle : array($handle); foreach ($handles as $_handle) { foreach ($this->_registerHelper->getFromRegister('register_scripts', $_handle) as $regScript) { $this->_registerHelper->setToRegister('scripts', $_handle, $regScript); } } if ($script && is_string($handle)) { $this->_registerHelper->setToRegister('scripts', $handle, $script); } } /** * Register style * * @param string $handle * @param string $style */ public function wp_register_style($handle, $style = false) { $this->_registerHelper->addToRegister('register_styles', $handle, $style); } /** * Add style * * @param string $handle * @param string $style */ public function wp_enqueue_style($handle, $style = false) { $handles = is_array($handle) ? $handle : array($handle); foreach ($handles as $_handle) { foreach ($this->_registerHelper->getFromRegister('register_styles', $_handle) as $regStyle) { $this->_registerHelper->setToRegister('styles', $_handle, $regStyle); } } if ($style && is_string($handle)) { $this->_registerHelper->setToRegister('styles', $handle, $style); } } /** * Add inline style * * @param string $handle * @param string $style */ public function wp_add_inline_style($handle, $style = false) { $this->_registerHelper->addToRegister('inline_styles', $handle, $style); } /** * Get localize styles * * @param string $handle * @param string $var * @param array $lang */ public function wp_localize_script($handle, $var, $lang = array()) { $data = array( 'var' => $var, 'lang' => $lang ); $this->_registerHelper->setToRegister('localize_scripts', $handle, $data); } /** * Get post meta (for compatibility) * * @param int $id * @param string $hanlde * @param bool $flag * @return var */ public function get_post_meta($id, $handle, $flag = true) { $product = $this->_productsHelper->getProduct($id); return isset($product[$handle]) ? $product[$handle] : false; } /** * Get post types * * @param array $args * @return array */ public function get_post_types($args = array()) { return array(); } /** * Get post type object * * @param string $postType * @return object */ public function get_post_type_object($postType) { switch ($postType) { case 'post' : $postArray = array( 'labels' => array('singular_name' => 'Product') ); break; default : $postArray = array(); break; } return $this->_array_to_object($postArray); } /** * Get object taxonomies * * @param array $args * @param string $type * @return object */ public function get_object_taxonomies($args, $type = 'objects') { $taxonomies = array(); switch ($args['post_type']) { case 'post' : $taxonomies = array( 'category' => array( 'name' => 'category', 'labels' => array('name' => 'Categories') ) ); break; } return $this->_array_to_object($taxonomies); } /** * Get categories * * @param array $args * @param string $type * @return object */ public function get_categories($args, $type = 'objects') { $categories = $this->_productsHelper->getCategories(); foreach ($categories as $key => $category) { $categories[$key] = $this->_array_to_object($category); } return $categories; } /** * Get category link * * @param int $id * @return string */ public function get_category_link($id) { $category = $this->_productsHelper->getCategory($id); return $category['url']; } /** * Get tag list for compatibility * @param int $id * @return array */ public function get_the_tag_list($id) { return array(); } /** * Get post image id (product image) * @param int $id * @return int */ public function get_post_thumbnail_id($id) { return $id; } /** * Get post * * @param int $id * @return object */ public function get_post($id) { return $this->_array_to_object( $this->_productsHelper->getProduct($id) ); } /** * Get post title * * @param int $id * @return string */ public function get_the_title($id) { $product = $this->_productsHelper->getProduct($id); return $product && isset($product['name']) ? $product['name'] : false; } /** * Get post link * * @param int $id * @return string */ public function get_permalink($id) { $product = $this->_productsHelper->getProduct($id); return $product && isset($product['url']) ? $product['url'] : false; } /** * Get post terms * * @param int $id * @param array $args * @param string $type * @return array */ public function wp_get_post_terms($id, $args) { return array(); } /** * Check if in admin access now * * @return bool */ public function is_admin() { return $this->_areaCode == 'adminhtml'; } public function is_super_admin() { return $this->is_admin(); } public function is_admin_bar_showing() { return $this->is_admin(); } public function is_user_logged_in() { return $this->is_admin(); } /** * Check if the ajax request * * @return boolean */ public function wp_doing_ajax() { return $this->_request->isXmlHttpRequest(); } /** * Get current user * * @return object */ public function wp_get_current_user() { $user = (object) array( 'display_name' => $this->_authSession->getUser()->getUsername() ); return $user; } /** * Check if current user have access * * @return bool */ public function current_user_can() { return $this->is_admin(); } /** * Check for error in data * * @param var $data * @return bool */ public function is_wp_error($data) { return false; } /** * * Cache functions * */ /** * Get transient * * @param string Handle * @return var */ public function get_transient($handle) { $data = $this->_cacheProxy->load(self::TRANSIENT_PREFIX . $handle); if ($data !== false) { $data = unserialize($data); } return $data; } /** * Set transient * * @param string Handle * @param var Value * @param int Expiration (seconds) */ public function set_transient($handle, $value, $expiration = 0) { $tags = []; preg_match_all('/_slider_(\d+)_/m', $handle, $matches, PREG_SET_ORDER, 0); if ($matches) { $tags[] = self::SLIDER_TRANSIENT_TAG; $tags[] = self::SLIDER_TRANSIENT_TAG . $matches[0][1]; } $this->_cacheProxy->save(serialize($value), self::TRANSIENT_PREFIX . $handle, $tags, $expiration); } /** * Delete transient * * @param string Handle */ public function delete_transient($handle) { $this->_cacheProxy->remove(self::TRANSIENT_PREFIX . $handle); } /** * Delete all slider transients */ public function deleteAllSliderTransients() { $this->_cacheProxy->clean([self::SLIDER_TRANSIENT_TAG]); } /** * Delete slider transients * * @paramm int $sliderId */ public function deleteSliderTransients($sliderId) { $this->_cacheProxy->clean([self::SLIDER_TRANSIENT_TAG . $sliderId]); } public function delete_site_transient($handle) { $this->delete_transient($handle); } /** * Set cache * * @param string $cacheKey * @param var $data * @param string $cacheGroup */ public function wp_cache_set($cacheKey, $data, $cacheGroup = '') { if (false && ! $this->is_admin()) { $tags = [self::CACHE_TAG]; if ($cacheGroup) { $tags[] = $cacheGroup; } $this->_cacheProxy->save(serialize($data), self::CACHE_PREFIX . $cacheKey, $tags); } } /** * Get cache * * @param string $cacheKey * @param string $cacheGroup * @param bool $force * @param bool $found * @return var */ public function wp_cache_get($cacheKey, $cacheGroup = '', $force = false, &$found = null) { if (false && $this->is_admin()) { $data = false; $found = false; } else { $data = $this->_cacheProxy->load(self::CACHE_PREFIX . $cacheKey); if ($data !== false) { $data = unserialize($data); } $found = $data !== false; } return $data; } /** * Delete cache * * @param string $cacheKey * @param string $cacheGroup */ public function wp_cache_delete($cacheKey, $cacheGroup = '') { $this->_cacheProxy->remove($cacheKey); } /** * Flush cache */ public function wp_cache_flush() { $this->_cacheProxy->clean([self::CACHE_TAG]); } /** * Check if in RTL mode * * @return boolean */ public function is_rtl() { // TODO: See if it is possible to set admin in RTL mode at all return false; } /** * Die! */ public function wp_die() { die(); } /** * Date localization * * @param string $format * @param int $date */ public function date_i18n($format, $date) { $format = trim($format); $format = $format ? $format : 'd M, Y - H:i'; return date($format, is_string($date) ? strtotime($date) : $date); } /** * Check if file is writable * * @param string $path * @return bool */ public function wp_is_writable($path) { return is_writable($path); } /** * Converts byte value to integer byte value * * @param string $size * @return int */ public function wp_convert_hr_to_bytes($size) { $size = strtolower( $size ); $bytes = (int) $size; if ( strpos( $size, 'k' ) !== false ) $bytes = intval( $size ) * 1024; elseif ( strpos( $size, 'm' ) !== false ) $bytes = intval($size) * 1024 * 1024; elseif ( strpos( $size, 'g' ) !== false ) $bytes = intval( $size ) * 1024 * 1024 * 1024; return $bytes; } /** * Get current page info * * @return obj */ public function get_current_screen() { $screen = array('id' => 'revslider'); return (object) $screen; } /** * Get revslider admin url * * @param string url * @param string args * @return string */ public function admin_url($url, $args = '') { return $this->getBackendUrl($url, $args); } /** * Get home url * * @return string */ public function home_url() { $store = $this->_storeManager->getStore(); return $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB); } /** * Get revslider backend url * * @param string url * @param mixed args * @param boolean $skipPrepend * @return string */ public function getBackendUrl($url, $args = '', $skipPrepend = false) { $backendBase = 'nwdthemes_revslider/revslider/'; $backendUrl = str_replace('admin-ajax.php', $backendBase . 'addonajax', $url); if (! $skipPrepend && strpos($backendUrl, 'nwdthemes_revslider') === false && strpos($backendUrl, 'adminhtml/') === false) { $backendUrl = $backendBase . $backendUrl; } if (is_array($args)) { $params = $args; } else { $params = array(); $argsArray = explode('&', ltrim($args, '?')); foreach ($argsArray as $arg) { if (strpos($arg, '=') !== false) { list($key, $value) = explode('=', $arg); $params[$key] = $value; } elseif ($arg) { $params[$arg] = ''; } } } return $this->_backendUrl->getUrl($backendUrl, $params); } /** * Get Store Id * * @return int */ public function getStoreId() { return $this->_storeManager->getStore()->getId(); } /** * Get Asset Url * * @param string Handle * @param array Params * @param boolean $noModule * @return string */ public function getAssetUrl($handle = '', $params = array(), $noModule = false) { $_params = ['_secure' => $this->_request->isSecure()]; $_params = array_merge($_params, $params); $_handle = strpos($handle, '::') !== false || $noModule ? $handle : self::MODULE . '::' . $handle; return $this->_assetRepo->getUrlWithParams($_handle, $_params); } /** * Get Asset Path * * @param string Handle * @param array Params * @return string */ public function getAssetPath($handle = '', $params = array()) { $_params = ['_secure' => $this->_request->isSecure()]; $_params = array_merge($_params, $params); $_handle = self::MODULE . '::' . $handle; $asset = $this->_assetRepo->createAsset($_handle, $_params); $directory = $this->_filesystem->getDirectoryRead(DirectoryList::STATIC_VIEW); $path = $directory->getAbsolutePath($asset->getPath()); return $path; } /** * Convert assets url for frontend * * @param string Handle * @param array Params * @return string */ public function convertAssetUrlForOutput($url) { if (strpos($url, self::MODULE) !== false) { list($urlBase, $urlFile) = explode(self::MODULE, $url); $assetUrl = $this->getAssetUrl(ltrim($urlFile, '/')); } else { $assetUrl = $this->forceSSL($url); } return $assetUrl; } /** * Check if assets minification enabled * * @param string $type * @return boolean */ public function isMinified($type) { return $this->_minification->isEnabled($type); } /** * Dump output * * @param var $str */ public function dmp($str) { echo "
"; if (is_string($str) || (is_object($str) && get_class($str) == 'Magento\Framework\Phrase')) { echo $str; } else { echo "
";
    		print_r($str);
    		echo "
"; } echo "
"; } /** * Convert array to object * * params array $array * return object */ private function _array_to_object($array) { return $this->json_decode(json_encode($array), FALSE); } /** * Check if mobile browser * * @return boolean */ public function wp_is_mobile() { $useragent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $is_mobile = preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4)); return $is_mobile; } /** * Trigger error * * @param string * @param int */ public function trigger_error($errorMessage, $errorLevel = 0) { if ($errorLevel) { throw new \Exception($errorMessage, $errorLevel); }else{ throw new \Exception($errorMessage); } } /** * * Curl wrapper functions * */ /** * Get content from remote url * * @param string $url * @param array $args * @return array */ public function wp_remote_post($url, $args = array()) { $r = $this->_curlHelper->request($url, $args); return $r; } /** * Get content from remote url * * @param string $url * @param array $args * @return array */ public function wp_remote_get($url, $args = array()) { return $this->_curlHelper->requestGet($url, $args); } /** * Open content from remote url * * @param string $url * @return string */ public function wp_remote_fopen($url) { return $this->_curlHelper->remoteFileOpen($url); } /** * Get response code from response * * @param array $response * @return string */ public function wp_remote_retrieve_response_code($response) { return $this->_curlHelper->getCode($response); } /** * Get body from response * * @param array $response * @return string */ public function wp_remote_retrieve_body($response) { return $this->_curlHelper->getBody($response); } /** * Redirect * * @param string $url */ public function wp_redirect($url) { $this->_redirect ->setRedirect($url) ->sendResponse(); die(); } /** * * Actions wrapper functions * */ /** * Add action * * @param string $handle * @param array $action */ public function add_action($handle, $action) { $this->_registerHelper->addAction($handle, $action); } /** * Remove action * * @param string $handle * @param array $action */ function remove_action($handle, $action) { $this->_registerHelper->removeAction($handle, $action); } /** * Do action * * @param string $handle * @param mixed $args * @return string */ public function do_action($handle) { $args = func_get_args(); if (func_num_args()) { unset($args[0]); } return $this->_registerHelper->doAction($handle, $args); } /** * Check if action added * * @param string $handle * @param array $action * @return boolean */ public function has_action($handle, $action) { return $this->_registerHelper->hasAction($handle, $action); } /** * * Options wrapper functions * */ /** * Get option * * @param string $handle Handle * @param string|boolean $default Default value * @return mixed */ public function get_option($handle, $default = false) { return $this->_optionsHelper->getOption($handle, $default); } /** * Update option * * @param string $handle * @param string $value */ public function update_option($handle, $value = '') { $this->_optionsHelper->updateOption($handle, $value); return true; } /** * Add option * * @param string $handle * @param string $option * @param string $deprecated * @param string $autoload * @return boolean */ public function add_option($handle, $option = '', $deprecated = '', $autoload = 'yes') { $this->_optionsHelper->updateOption($handle, $option); return true; } /** * Delete option * * @param string $handle */ public function delete_option($handle) { $this->_optionsHelper->deleteOption($handle); } /** * * Plugin wrapper functions * */ /** * Checks if addon activated * * @param string $plugin * @return boolean */ public function is_plugin_active($plugin) { return $this->_pluginHelper->isPluginActive($plugin); } /** * Checks if addon not activated * * @param string $plugin * @return boolean */ public function is_plugin_inactive($plugin) { return ! $this->_pluginHelper->isPluginActive($plugin); } /** * Activate plugin * * @param string $plugin * @return boolean */ public function activate_plugin($plugin) { return $this->_pluginHelper->activatePlugin($plugin); } /** * Deactivate plugin * * @param string $plugin * @return boolean */ public function deactivate_plugins($plugin) { return $this->_pluginHelper->deactivatePlugin($plugin); } /** * Get plugins * * return boolean */ public function get_plugins() { return $this->_pluginHelper->getPlugins(); } /** * Get plugins url * * @param string $file * @param string $plugin * @return string */ public function plugins_url($file, $plugin) { return $this->_pluginHelper->getPluginUrl($file, $plugin); } /** * Get plugin dir path * * @param string $plugin * @return string */ public function plugin_dir_path($plugin) { return Plugin::getPluginDir() . $this->_pluginHelper->getPluginName($plugin) . '/'; } /** * Get plugin dir url * * @param string $plugin * @return string */ public function plugin_dir_url($plugin) { return $this->plugins_url('', $plugin); } /** * * Filesystem wrapper functions * */ /** * Make writable directory * * @param string $path * @return bool */ public function wp_mkdir_p($dir) { return $this->_filesystemHelper->wp_mkdir_p($dir); } /** * * Dummy wrapper functions * */ public function _get_list_table() {} public function register_activation_hook() {} public function register_deactivation_hook() {} public function load_plugin_textdomain() {} public function get_intermediate_image_sizes() { return array(); } public function wp_generate_attachment_metadata() { return false; } public function wp_update_attachment_metadata() { return false; } public function wp_get_attachment_metadata($image) { return $this->_imagesHelper->wp_get_attachment_metadata($image); } /** * Get image url by id and size * * @param int Image id * @param string Size type * @return string */ public function wp_get_attachment_image_src($attachment_id, $size='thumbnail') { return $this->_imagesHelper->wp_get_attachment_image_src($attachment_id, $size); } public function wp_get_attachment_url() { return false; } public function wp_insert_attachment() { return false; } public function wp_image_editor_supports() { return true; } public function language_attributes() {} public function bloginfo() {} public function wp_head() {} public function body_class() {} public function wp_footer() { $this->do_action('wp_footer'); $this->do_action('wp_print_footer_scripts'); } /** * * Own framwork functions * */ /** * Get registered styles * * @return array */ public function getRegisteredStyles() { $styles = $this->_registerHelper->getFromRegister('styles'); return $styles ? $styles : []; } /** * Get registered localized scripts * * @return array */ public function getLocalizeScripts() { $scripts = $this->_registerHelper->getFromRegister('localize_scripts'); return $scripts ? $scripts : []; } /** * Get registered localized scripts code for html * * @return string */ public function getLocalizeScriptsHtml() { $html = ''; $localizeScripts = $this->getLocalizeScripts(); if ($localizeScripts) { $html .= '' . "\n"; $html .= '' . "\n"; } return $html; } /** * Get registered localized scripts * * @return array */ public function getInlineStylesHTML() { $html = ''; if ($styles = $this->_registerHelper->getFromRegister('inline_styles')) { $html .= '' . "\n"; $html .= '' . "\n"; } return $html; } /** * Add required scripts * * @param string $key * @param string $url */ public function addRequiredScript($key, $url) { $this->_scriptsToRequire[$key] = $url; } /** * Get required scripts * * @return array */ public function getRequiredScripts() { return array_values($this->_scriptsToRequire); } /** * Require script * * @param string $handle * @param string $script */ public function requireScript($handle, $script) { $path = pathinfo($script); if (pathinfo($path['filename'], PATHINFO_EXTENSION) != 'min') { $dir = str_replace(rtrim($this->_pluginHelper->getPluginUrl('', ''), '/'), rtrim($this->_pluginHelper->getPluginDir()), pathinfo($script, PATHINFO_DIRNAME)); $scriptFile = $dir . DIRECTORY_SEPARATOR . $path['filename'] . '.js'; $minScriptFile = $dir . DIRECTORY_SEPARATOR . $path['filename'] . '.min.js'; if ( ! file_exists($minScriptFile) && file_exists($scriptFile)) { try { copy($scriptFile, $minScriptFile); } catch (Exception $e) {} } } $this->addRequiredScript($handle, $script); } /** * Get include code for required scripts * * @return string */ public function includeRequiredScripts() { $html = ''; if ($scripts = $this->getRequiredScripts()) { $_scripts = ['']; foreach ($scripts as $script) { $_scripts[] = '\'' . $script . '\''; } $html = implode(', ', $_scripts); } return $html; } /** * Include source file * * @param string $file File name */ public function includeFile($file) { if (file_exists($file)) { include_once $file; } } /** * Create CMS page * * @param string $id * @param string $title * @param string $content * @return int */ public function createPage($id, $title, $content) { $page = $this->_pageFactory->create(); $page->setTitle($title) ->setIdentifier($id) ->setIsActive(true) ->setPageLayout('1column') ->setStores(array(0)) ->setContent($content) ->save(); return $page->getId(); } /** * Get CMS page url * * @param int $id * @return string */ public function getPageUrl($id) { $page = $this->_pageFactory->create()->load($id); $identifier = $page->getIdentifier(); return $this->_storeManager->getStore()->getBaseUrl() . $identifier; } /** * Get CMS edit page url * * @param int $id * @return string */ public function getEditPageUrl($id) { return $this->getBackendUrl('cms/page/edit/page_id/' . $id); } /** * Get current product Id * get most recent product viewed if there is no current one * * @return int */ public function getCurrentProductId() { return $this->_productsHelper->getCurrentProductId(); } /** * Get template file path * * @param string $template * @return string */ public function getTemplatePath($template) { $path = $this->_templateFileResolver->getTemplateFileName($template); return $path; } /** * Get cUrl helper * * @return \Nwdthemes\Revslider\Helper\Curl */ public function getCurlHelper() { return $this->_curlHelper; } /** * Get file system helper * * @return \Nwdthemes\Revslider\Helper\Filesystem */ public function getFilesystemHelper() { return $this->_filesystemHelper; } /** * Get images helper * * @return \Nwdthemes\Revslider\Helper\Images */ public function getImagesHelper() { return $this->_imagesHelper; } /** * Get product helper * * @return \Nwdthemes\Revslider\Helper\Product */ public function getProductsHelper() { return $this->_productsHelper; } /** * Get db query helper * * @return \Nwdthemes\Revslider\Helper\Query */ public function getQueryHelper() { return $this->_queryHelper; } /** * Generate preview HTML * * @param array $data * @return string */ public function generatePreview($data) { $data['head'] = $this->_layoutFactory->create() ->createBlock('Nwdthemes\Revslider\Block\Head') ->setTemplate('Nwdthemes_Revslider::head.phtml') ->toHtml(); $data['require'] = $this->_layoutFactory->create() ->createBlock('Magento\RequireJs\Block\Html\Head\Config') ->toHtml(); $data['footer'] = $this->_layoutFactory->create() ->createBlock('Magento\Framework\View\Element\Template') ->setTemplate('Nwdthemes_Revslider::init.phtml') ->toHtml(); $content = $this->_layoutFactory->create() ->createBlock('Nwdthemes\Revslider\Block\Adminhtml\Block\Template') ->setTemplate('Nwdthemes_Revslider::public/revslider-page-template.phtml') ->assign($data) ->toHtml(); $result = base64_encode($content); return $result; } /** * Include enqueued assets * * @return string */ public function includeEnqueuedAssets() { $output = ''; foreach ($this->_registerHelper->getFromRegister('styles') as $_handle => $_style) { $output .= '' . "\n"; } foreach ($this->_registerHelper->getFromRegister('scripts') as $_handle => $_script) { $output .= '' . "\n"; } return $output; } /** * Get customer groups * * @return array */ public function getCustomerGroups() { $customerGroups = array(); foreach($this->_customerGroupCollection->toOptionArray() as $group) { $customerGroups[] = $group; } return $customerGroups; } /** * Save slider tables data to file system */ public function backupDB() { $tables = [ 'nwdthemes_revslider_animations', 'nwdthemes_revslider_backup', 'nwdthemes_revslider_css', 'nwdthemes_revslider_navigations', 'nwdthemes_revslider_slides', 'nwdthemes_revslider_sliders', 'nwdthemes_revslider_static_slides' ]; $data = []; foreach ($tables as $table) { $data[$table] = $this->_queryHelper->get_results("SELECT * FROM $table"); } $directory = $this->_filesystem->getDirectoryWrite(DirectoryList::VAR_DIR); $backupPath = $directory->getAbsolutePath() . 'revslider_backup/'; if ( ! is_dir($backupPath)) { mkdir($backupPath); } file_put_contents($backupPath . date('Y-m-d_h-i-s') . '.json', json_encode($data)); } /** * Re-generate rs plugin path as it was incorrect if helper initialized in controller */ public function reGeneratePluginPath() { self::$RS_PLUGIN_PATH = $this->getAssetPath() . DIRECTORY_SEPARATOR; self::$RS_PLUGIN_URL = $this->getAssetUrl() . '/'; } /** * Save slider data filter * * @param array $data * @return array */ public function sliderSaveDataFilter($data) { $data['params'] = json_encode($this->_makeImagesRelative($this->json_decode($data['params'], true))); return $data; } /** * Save slide params filter * * @param array $params * @param array $staticSlide * @param \Nwdthemes\Revslider\Model\Revslider\RevSliderSlide $slide * @return array */ public function slideSaveParamsFilter($params, $staticSlide, $slide) { $params = $this->_makeImagesRelative($params); return $params; } /** * Save slide layers filter * * @param array $layers * @param array $staticSlide * @param \Nwdthemes\Revslider\Model\Revslider\RevSliderSlide $slide * @return array */ public function slideSaveLayersFilter($layers, $staticSlide, $slide) { $layers = $this->_makeImagesRelative($layers); return $layers; } /** * Init slider filter * * @param array $data * @return array */ public function sliderInitByDataFilter($data) { if ( ! empty($data['params'])) { $data['params'] = json_encode($this->_makeImagesAbsolute($this->json_decode($data['params'], true))); } return $data; } /** * Init slide filter * * @param array $data * @return array */ public function slideInitByDataFilter($data) { if ( ! empty($data['params'])) { $data['params'] = json_encode($this->_makeImagesAbsolute($this->json_decode($data['params'], true))); } if ( ! empty($data['layers'])) { $data['layers'] = json_encode($this->_makeImagesAbsolute($this->json_decode($data['layers'], true))); } return $data; } /** * Get layers fitler * * @param array $data * @return array */ public function getLayersFilter($data) { if (is_array($data)) { foreach ($data as &$layer) { if (isset($layer['actions']['action']) && is_array($layer['actions']['action'])) { foreach ($layer['actions']['action'] as $key => $action) { if (! $action) { unset($layer['actions']['action'][$key]); } } } } } return $data; } /** * Make image urls relative * * @param array $data * @return array */ protected function _makeImagesRelative($data) { if (is_array($data)) { foreach ($data as $key => $item) { $data[$key] = $this->_makeImagesRelative($item); } } elseif (is_string($data)) { if ($this->getImagesHelper()->isMedia($data) && $data !== $this->getImagesHelper()->imageFile($data)) { $data = Images::MEDIA_URL_PACEHOLDER . $this->getImagesHelper()->imageFile($data); } elseif (strpos($data, self::SVG_PATH) !== false) { $data = self::SVG_URL_PACEHOLDER . strstr($data, self::SVG_PATH); } } return $data; } /** * Make image urls absolute * * @param array $data * @return array */ protected function _makeImagesAbsolute($data) { if (is_array($data)) { foreach ($data as $key => $item) { $data[$key] = $this->_makeImagesAbsolute($item); } } elseif (is_string($data)) { if (strpos($data, Images::MEDIA_URL_PACEHOLDER) === 0) { if ($this->getImagesHelper()->isMedia($data)) { $data = $this->getImagesHelper()->imageUrl(str_replace(Images::MEDIA_URL_PACEHOLDER, '', $data)); } else { $data = str_replace(Images::MEDIA_URL_PACEHOLDER, $this->_storeManager->getStore()->getBaseUrl(), $data); } } elseif (strpos($data, self::SVG_PATH) !== false) { if (strpos($data, self::SVG_URL_PACEHOLDER) === 0) { $data = $this->getAssetUrl(str_replace(self::SVG_URL_PACEHOLDER, '', $data)); } else { $data = $this->getAssetUrl(strstr($data, self::SVG_PATH)); } } } return $data; } /** * Get config value * * @param string $path * @return string */ public function getConfigValue($path) { return $this->_scopeConfig->getValue($path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE); } /** * Get Overview Data * * @return array */ public function getOverviewData() { if ($this->_overviewData == null) { $this->_overviewData = RevSliderGlobals::instance()->get('RevSliderFunctionsAdmin')->get_slider_overview(); } return $this->_overviewData; } /** * JSON Decode wrapper * * @param mixed $json, * @param bool|null $associative = null, * @param int $depth = 512, * @param int $flags = 0 * @return mixed */ public function json_decode( $json, $associative = null, int $depth = 512, int $flags = 0 ) { if (is_null($json)) { $json = false; } return json_decode($json, $associative, $depth, $flags); } /** * Get POST data * * @return array */ public function getPost() { return $this->_request->getPostValue(); } }