admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce(self::MODULES_NONCE), 'action' => self::MODULES_NONCE, ) ); } public static function save_data() { if (!current_user_can('manage_options')) { return; } if (!check_ajax_referer(self::MODULES_NONCE, 'nonce')) { wp_send_json_error(); } $posted_data = !empty($_POST['data']) ? $_POST['data'] : ''; $data = array(); parse_str($posted_data, $data); do_action('ba_save_admin_data', $data); wp_send_json_success(); } public static function save_modules_data($data) { $modules = !empty($data['modules']) ? $data['modules'] : array(); $inactive_modules = array_values(array_diff(array_keys(self::get_modules()), $modules)); self::save_inactive_modules($inactive_modules); } public static function get_inactive_modules() { return get_option('ba_inactive_modules', array()); } public static function save_inactive_modules($modules = array()) { update_option('ba_inactive_modules', $modules); } public static function get_modules() { $modules_map = self::get_free_modules(); $modules_map = array_merge($modules_map, self::get_pro_modules()); uksort($modules_map, array(__CLASS__, 'sort_widgets')); return $modules_map; } public static function sort_widgets($k1, $k2) { return strcasecmp($k1, $k2); } public static function save_extensions_data($data) { $extensions = !empty($data['extensions']) ? $data['extensions'] : array(); $inactive_extensions = array_values(array_diff(array_keys(self::get_all_extensions()), $extensions)); self::save_inactive_extensions($inactive_extensions); } public static function get_inactive_extensions() { return get_option('ba_inactive_extensions', array()); } public static function save_inactive_extensions($extensions = array()) { update_option('ba_inactive_extensions', $extensions); } private static function get_all_extensions() { $extensions_map = array( 'blog-designer' => array( 'title' => __('Blog Designer', 'addons-for-divi'), 'desc' => __('Blog Designer is a good handy and premium solution for everyone who is looking for a responsive blog page with the divi website.', 'addons-for-divi'), 'link_enable' => true, 'is_pro' => true, 'section' => 'blog_designer_archive__section', ), 'popup-maker' => array( 'title' => __('Popup Maker', 'addons-for-divi'), 'desc' => __('It is incredibly versatile & flexible. Bend it to create any type of popup, modal, or content overlay for your website.', 'addons-for-divi'), 'link_enable' => false, 'is_pro' => false, 'section' => '', ), 'login-designer' => array( 'title' => __('Login Designer', 'addons-for-divi'), 'desc' => __('Design and build an on-brand custom WordPress login page.', 'addons-for-divi'), 'demo' => '', 'icon' => '', 'is_pro' => false, 'is_free' => true, ), 'unfiltered-file-uploads' => array( 'title' => __('Unfiltered File Uploads', 'addons-for-divi'), 'desc' => __('Please note! Allowing uploads SVG & JSON files is a potential security risk. We recommend you only enable this feature if you understand the security risks involved.'), 'demo' => '', 'icon' => '', 'is_pro' => false, 'is_free' => true, ), 'library-shortcodes' => array( 'title' => __('Divi Library Shortcodes', 'addons-for-divi'), 'desc' => __('This extension allows you to display any Divi library template as a shortcode. Embed any Divi library template inside any divi module or inside a .php files by using a shortcode.'), 'demo' => '', 'icon' => '', 'is_pro' => false, 'is_free' => true, ), 'post-duplicator' => array( 'title' => __('Post Duplicator', 'addons-for-divi'), 'desc' => __('Post Duplicator extension provides functionality to make a clone of page or post. Also supports copying the custom post type and Divi pages including all attributes.'), 'demo' => '', 'icon' => '', 'is_pro' => false, 'is_free' => true, ), ); return $extensions_map; } private static function get_free_modules() { $modules_map = array( 'advanced-divider' => array( 'title' => __('Advanced Divider', 'addons-for-divi'), 'demo' => 'https://divitorque.com/advanced-divider-module/', 'icon' => 'advanced_divider', ), 'advanced-team' => array( 'title' => __('Advanced Team', 'addons-for-divi'), 'demo' => 'https://divitorque.com/team-module', 'icon' => 'team', 'is_pro' => false, ), 'alert' => array( 'title' => __('Alert', 'addons-for-divi'), 'demo' => 'https://divitorque.com/alert-module', 'icon' => 'alert', ), 'animated-text' => array( 'title' => __('Animated Text', 'addons-for-divi'), 'demo' => 'https://divitorque.com/animated-text-module', 'icon' => 'animated_text', ), 'business-hour' => array( 'title' => __('Business Hour', 'addons-for-divi'), 'demo' => 'https://divitorque.com/business-hour-module', 'icon' => 'business_hour', ), 'card' => array( 'title' => __('Card', 'addons-for-divi'), 'demo' => 'https://divitorque.com/card-module/', 'icon' => 'card', ), 'cf7-module' => array( 'title' => __('CF7 Styler', 'addons-for-divi'), 'demo' => 'https://divitorque.com/cf7-styler-module/', 'icon' => 'cf7_styler', ), 'dual-button' => array( 'title' => __('Dual Button', 'addons-for-divi'), 'demo' => 'https://divitorque.com/dual-button-module', 'icon' => 'dual_button', ), 'flipbox' => array( 'title' => __('Flipbox', 'addons-for-divi'), 'demo' => 'https://divitorque.com/flip-box-module', 'icon' => 'flipbox', 'is_pro' => false, ), 'gradient-heading' => array( 'title' => __('Gradient Heading', 'addons-for-divi'), 'demo' => 'https://divitorque.com/gradient-heading-module', 'icon' => 'advanced_heading', ), 'icon-box' => array( 'title' => __('Icon Box', 'addons-for-divi'), 'demo' => 'https://divitorque.com/icon-box-module/', 'icon' => 'icon_box', ), 'image-carousel' => array( 'title' => __('Image Carousel', 'addons-for-divi'), 'demo' => 'https://divitorque.com/image-carousel-module', 'icon' => 'image_carousel', ), 'image-compare' => array( 'title' => __('Image Compare', 'addons-for-divi'), 'demo' => 'https://divitorque.com/image-compare-module', 'icon' => 'image_compare', ), 'info-box' => array( 'title' => __('Info Box', 'addons-for-divi'), 'demo' => 'https://divitorque.com/info-box-module', 'icon' => 'info_box', ), 'logo-carousel' => array( 'title' => __('Logo Carousel', 'addons-for-divi'), 'demo' => 'https://divitorque.com/logo-carousel-module', 'icon' => 'logo_carousel', ), 'logo-grid' => array( 'title' => __('Logo Grid', 'addons-for-divi'), 'demo' => 'https://divitorque.com/logo-grid-module/', 'icon' => 'logo_grid', ), 'news-ticker' => array( 'title' => __('News Ticker', 'addons-for-divi'), 'demo' => 'https://divitorque.com/news-ticker-module', 'icon' => 'news_ticker', ), 'number' => array( 'title' => __('Number', 'addons-for-divi'), 'demo' => 'https://divitorque.com/number-module', 'icon' => 'number', ), 'post-list' => array( 'title' => __('Post List', 'addons-for-divi'), 'demo' => 'https://divitorque.com/post-list-module', 'icon' => 'post_list', ), 'review' => array( 'title' => __('Review', 'addons-for-divi'), 'demo' => 'https://divitorque.com/review-module', 'icon' => 'review', ), 'scroll-image' => array( 'title' => __('Scroll Image', 'addons-for-divi'), 'demo' => 'https://divitorque.com/scroll-image-module', 'icon' => 'scroll_image', ), 'skill-bars' => array( 'title' => __('Skill Bars', 'addons-for-divi'), 'demo' => 'https://divitorque.com/skill-bars-module', 'icon' => 'skill_bars', ), 'testimonial' => array( 'title' => __('Testimonial', 'addons-for-divi'), 'demo' => 'https://divitorque.com/testimonial-module', 'icon' => 'testimonial', ), 'twitter-feed' => array( 'title' => __('Twitter Feed', 'addons-for-divi'), 'demo' => 'https://divitorque.com/twitter-feed-module/', 'icon' => 'twitter_feed', ), 'twitter-feed-carousel' => array( 'title' => __('Twitter Feed Carousel', 'addons-for-divi'), 'demo' => 'https://divitorque.com/twitter-feed-carousel-module', 'icon' => 'twitter_feed_carousel', ), 'video-popup' => array( 'title' => __('Video Popup', 'addons-for-divi'), 'demo' => 'https://divitorque.com/video-popup-module', 'icon' => 'video_popup', ), ); return $modules_map; } private static function get_pro_modules() { $modules_map = []; $modules_map = array( 'advanced-heading' => array( 'title' => __('Advanced Heading', 'addons-for-divi'), 'demo' => 'https://divitorque.com/advanced-heading-module', 'icon' => 'advanced_heading', 'is_pro' => true, ), 'animated-gallery' => array( 'title' => __('Animated Gallery', 'addons-for-divi'), 'demo' => 'https://divitorque.com/animated-gallery-module', 'icon' => 'animated-gallery', 'is_pro' => true, ), 'author-box' => array( 'title' => __('Author Box', 'addons-for-divi'), 'demo' => 'https://divitorque.com/', 'icon' => 'author_list', 'is_pro' => true, ), 'author-list' => array( 'title' => __('Author List', 'addons-for-divi'), 'demo' => 'https://divitorque.com/author-list-module', 'icon' => 'author_list', 'is_pro' => true, ), 'content-toggle' => array( 'title' => __('Content Toggle', 'addons-for-divi'), 'demo' => 'https://divitorque.com/content-toggle-module', 'icon' => 'content_toggle', 'is_pro' => true, ), 'floating-image' => array( 'title' => __('Floating Image', 'addons-for-divi'), 'demo' => 'https://divitorque.com/floating-image-module', 'icon' => 'floating_image', 'is_pro' => true, ), 'horizontal-timeline' => array( 'title' => __('Horizontal Timeline', 'addons-for-divi'), 'demo' => 'https://divitorque.com/horizontal-timeline-module/', 'icon' => 'horizontal_timeline', 'is_pro' => true, ), 'hotspots' => array( 'title' => __('Hotspots', 'addons-for-divi'), 'demo' => 'https://divitorque.com/hotspots-module', 'icon' => 'hotspots', 'is_pro' => true, ), 'hover-box' => array( 'title' => __('Hover Box', 'addons-for-divi'), 'demo' => 'https://divitorque.com/hover-box-module', 'icon' => 'hover_box', 'is_pro' => true, ), 'image-accordion' => array( 'title' => __('Image Accordion', 'addons-for-divi'), 'demo' => 'https://divitorque.com/image-accordion-module', 'icon' => 'image_accordion', 'is_pro' => true, ), 'image-hover' => array( 'title' => __('Image Hover', 'addons-for-divi'), 'demo' => 'https://divitorque.com/image-hover-module', 'icon' => 'hover_box', 'is_pro' => true, ), 'image-magnifier' => array( 'title' => __('Image Magnifier', 'addons-for-divi'), 'demo' => 'https://divitorque.com/image-magnifier-module', 'icon' => 'image_magnifier', 'is_pro' => true, ), 'image-masking' => array( 'title' => __('Image Masking', 'addons-for-divi'), 'demo' => 'https://divitorque.com/image-masking-module', 'icon' => 'image_masking', 'is_pro' => true, ), 'inline-svg' => array( 'title' => __('Inline SVG', 'addons-for-divi'), 'demo' => 'https://divitorque.com/inline-svg-module', 'icon' => 'inline_svg', 'is_pro' => true, ), 'instagram-carousel' => array( 'title' => __('Instagram Carousel', 'addons-for-divi'), 'demo' => 'https://divitorque.com/instagram-carousel-module', 'icon' => 'instagram_carousel', 'is_pro' => true, ), 'instagram-feed' => array( 'title' => __('Instagram Feed', 'addons-for-divi'), 'demo' => 'https://divitorque.com/instagram-feed-module', 'icon' => 'instagram_feed', 'is_pro' => true, ), 'list-group' => array( 'title' => __('List Group', 'addons-for-divi'), 'demo' => 'https://divitorque.com/list-group-module', 'icon' => 'list_group', 'is_pro' => true, ), 'lottie-animation' => array( 'title' => __('Lottie Animation', 'addons-for-divi'), 'demo' => 'https://divitorque.com/lottie-animation-module', 'icon' => 'lottie', 'is_pro' => true, ), 'news-ticker-pro' => array( 'title' => __('News Ticker Pro', 'addons-for-divi'), 'demo' => 'https://divitorque.com/news-ticker-pro-module/', 'icon' => 'news_ticker', 'is_pro' => true, ), 'post-carousel' => array( 'title' => __('Post Carousel', 'addons-for-divi'), 'demo' => 'https://divitorque.com/post-carousel-module/', 'icon' => 'post_carousel', 'is_pro' => true, ), 'post-grid' => array( 'title' => __('Post Grid', 'addons-for-divi'), 'demo' => 'https://divitorque.com/post-grid-module/', 'icon' => 'post_grid', 'is_pro' => true, ), 'post-masonry' => array( 'title' => __('Post Masonry', 'addons-for-divi'), 'demo' => 'https://divitorque.com/post-masonry-module/', 'icon' => 'post_masonry', 'is_pro' => true, ), 'post-tiles' => array( 'title' => __('Post Tiles', 'addons-for-divi'), 'demo' => 'https://divitorque.com/post-tiles-module/', 'icon' => 'post_tiles', 'is_pro' => true, ), 'price-menu' => array( 'title' => __('Price Menu', 'addons-for-divi'), 'demo' => 'https://divitorque.com/price-menu-module', 'icon' => 'price_menu', 'is_pro' => true, ), 'smart-post-list' => array( 'title' => __('Smart Post List', 'addons-for-divi'), 'demo' => 'https://divitorque.com/smart-post-module', 'icon' => 'smart_post_list', 'is_pro' => true, ), 'social-share' => array( 'title' => __('Social Share', 'addons-for-divi'), 'demo' => 'https://divitorque.com/social-share-module', 'icon' => 'social_share', 'is_pro' => true, ), 'team-carousel' => array( 'title' => __('Team Carousel', 'addons-for-divi'), 'demo' => 'https://divitorque.com/team-carousel-module', 'icon' => 'team_carousel', 'is_pro' => true, ), 'testimonial-carousel' => array( 'title' => __('Testimonial Carousel', 'addons-for-divi'), 'demo' => 'https://divitorque.com/testimonial-carousel-module', 'icon' => 'testimonial_carousel', 'is_pro' => true, ), 'vertical-timeline' => array( 'title' => __('Vertical Timeline', 'addons-for-divi'), 'demo' => 'https://divitorque.com/vertical-timeline-module/', 'icon' => 'vertical_timeline', 'is_pro' => true, ), 'video-carousel' => array( 'title' => __('Video Carousel', 'addons-for-divi'), 'demo' => 'https://divitorque.com/video-carousel-module/', 'icon' => 'video_carousel', 'is_pro' => true, ), 'text-highlight' => array( 'title' => __('Text Highlight', 'addons-for-divi'), 'demo' => 'https://divitorque.com/text-highlight-module/', 'icon' => 'animated_text', 'is_pro' => true, ), 'off-canvas' => array( 'title' => __('Off-canvas', 'addons-for-divi'), 'demo' => 'https://divitorque.com/off-canvas-module/', 'icon' => 'off_canvas', 'is_pro' => true, ), 'mega-menu' => array( 'title' => __('Mega Menu', 'addons-for-divi'), 'demo' => 'https://divitorque.com/mega-menu-module/', 'icon' => 'mega_menu', 'is_pro' => true, ), ); return $modules_map; } public static function get_extensions() { $extensions_map = self::get_all_extensions(); return $extensions_map; } // public static function get_admin_templates() // { // return array( // 'foodie' => array( // 'name' => 'Foodie', // 'image' => 'foodie.jpg', // 'demo' => 'https://library.divitorque.com/foodie-demo/', // 'download' => 'https://divitorque.com/foodie/', // 'is_pro' => true, // ), // 'torqe-digital' => array( // 'name' => 'Torque Digital', // 'image' => 'torque-digital.jpg', // 'demo' => 'https://library.divitorque.com/torque-digital-demo/', // 'download' => 'https://divitorque.com/torque-digital/', // 'is_pro' => false, // ), // 'justice' => array( // 'name' => 'Justice', // 'image' => 'justice.jpg', // 'demo' => 'https://library.divitorque.com/justice-demo/', // 'download' => 'https://divitorque.com/justice/', // 'is_pro' => false, // ), // 'travel' => array( // 'name' => 'Travel', // 'image' => 'travel.jpg', // 'demo' => 'https://library.divitorque.com/travel-demo/', // 'download' => 'https://divitorque.com/travel/', // 'is_pro' => true, // ), // 'pet-care' => array( // 'name' => 'Pet Care', // 'image' => 'pet-care.jpg', // 'demo' => 'https://library.divitorque.com/pet-care-demo/', // 'download' => 'https://divitorque.com/pet-care/', // 'is_pro' => true, // ), // 'news-magazine' => array( // 'name' => 'News Magazine', // 'image' => 'news-magazine.jpg', // 'demo' => 'https://library.divitorque.com/news-magazine-demo/', // 'download' => 'https://divitorque.com/news-magazine/', // 'is_pro' => true, // ), // 'medical' => array( // 'name' => 'Medical', // 'image' => 'medical.jpg', // 'demo' => 'https://library.divitorque.com/medical-demo/', // 'download' => 'https://divitorque.com/medical/', // 'is_pro' => true, // ), // 'event' => array( // 'name' => 'Event', // 'image' => 'event.jpg', // 'demo' => 'https://library.divitorque.com/event-demo/', // 'download' => 'https://divitorque.com/event/', // 'is_pro' => true, // ), // 'education' => array( // 'name' => 'Education', // 'image' => 'education.jpg', // 'demo' => 'https://library.divitorque.com/education-demo/', // 'download' => 'https://divitorque.com/education/', // 'is_pro' => true, // ), // ); // } public static function get_tabs() { $icon_url = DIVI_TORQUE_PLUGIN_ASSETS . 'imgs/admin/'; $tabs = array( 'home' => array( 'title' => esc_html__('General', 'addons-for-divi'), 'renderer' => array(__CLASS__, 'render_home'), ), 'modules' => array( 'title' => esc_html__('Modules', 'addons-for-divi'), 'renderer' => array(__CLASS__, 'render_modules'), ), 'extensions' => array( 'title' => esc_html__('Extension', 'addons-for-divi'), 'renderer' => array(__CLASS__, 'render_extensions'), ), // 'templates' => array( // 'title' => esc_html__('Starter templates', 'addons-for-divi'), // 'renderer' => array(__CLASS__, 'render_templates'), // ), // 'pro' => array( // 'title' => esc_html__('Get Pro', 'addons-for-divi'), // 'renderer' => array(__CLASS__, 'render_pro'), // ), ); return $tabs; } private static function load_template($template) { $file = DIVI_TORQUE_PLUGIN_DIR . 'includes/admin/view/admin-' . $template . '.php'; if (is_readable($file)) { include $file; } } public static function render_main() { self::load_template('main'); } public static function render_home() { self::load_template('home'); } public static function render_modules() { self::load_template('modules'); } public static function render_extensions() { self::load_template('extensions'); } // public static function render_templates() // { // self::load_template('templates'); // } // public static function render_pro() // { // self::load_template('pro'); // } }