Example #1
0
/**
 * Upgrade
 *
 * All the functionality for upgrading XT Themes
 *
 * @since 1.0.0
 */
function xt_upgrade()
{
    global $XT_Theme, $wpdb, $wp_filesystem, $post;
    $xt_version_option_key = XT_THEME_ID . '_version';
    $xt_theme = wp_get_theme();
    $old_version = get_option($xt_version_option_key, '1.0.0');
    // false
    $new_version = $XT_Theme->parent_version;
    if ($new_version !== $old_version) {
        /*
         * 1.0.4
         *
         * @created 2015-02-21
         */
        if ($old_version < '1.0.4') {
            $xt_upload_dir = XT_Theme::get_upload_dir();
            if (empty($wp_filesystem)) {
                require_once ABSPATH . '/wp-admin/includes/file.php';
                WP_Filesystem();
            }
            if ($wp_filesystem->is_dir($xt_upload_dir['dir'] . '/assets/')) {
                $wp_filesystem->delete($xt_upload_dir['dir'] . '/assets/', true, 'd');
                $wp_filesystem->delete($xt_upload_dir['dir'] . '/bower_components/', true, 'd');
                $wp_filesystem->delete($xt_upload_dir['dir'] . '/cache/', true, 'd');
            }
            update_option($xt_version_option_key, '1.0.4');
        }
        update_option($xt_version_option_key, $new_version);
        self::sass_compile_flag();
        xt_redirect_after_migration();
    }
}
Example #2
0
 public function create_dynamic_scss()
 {
     // Demo of how to use the dynamic CSS and write your own static CSS file
     global $wp_filesystem;
     if (empty($wp_filesystem)) {
         require_once ABSPATH . '/wp-admin/includes/file.php';
         WP_Filesystem();
     }
     if ($this->in_process) {
         return false;
     }
     $this->in_process = true;
     if ($wp_filesystem) {
         $this->set_compiler_fields();
         $content = "";
         $file_head = "/* This file is dynamically generated by the theme panel compiler. Do not edit manually. */\r\n\r\n";
         $file_head .= '@import "../../bower_components/foundation/scss/foundation/functions";' . "\r\n\r\n";
         if (function_exists('is_plugin_active')) {
             if (is_plugin_active('woocommerce/woocommerce.php')) {
                 $content .= "\$" . "woocommerce: true;\r\n";
             }
             if (is_plugin_active('buddypress/bp-loader.php')) {
                 $content .= "\$" . "buddypress: true;\r\n";
             }
         }
         $filename = XT_Theme::getDynamicScssFile();
         $rem_properties = array('font-size', 'line-height', 'row-width', 'off-canvas-width');
         $bool_properties = array('topbar', 'mainmenu', 'titlebar');
         foreach ($this->ReduxFramework->compiler_fields as $key => $value) {
             $value = xt_option($key);
             if (is_array($value)) {
                 foreach ($value as $k => $v) {
                     if (isset($v) && !is_array($v) && $v != "") {
                         if ($k == "background-image") {
                             $v = 'url(' . $v . ')';
                         }
                         if (in_array($k, $rem_properties)) {
                             $v = "rem-calc({$v})";
                         } else {
                             if (in_array($k, $bool_properties)) {
                                 $v = (bool) $v ? "true" : "false";
                             }
                         }
                         $content .= "\$" . $key . "-" . $k . ": " . $v . ";\r\n";
                     }
                 }
             } else {
                 if (isset($value) && $value != "") {
                     if (in_array($key, $rem_properties)) {
                         $value = "rem-calc({$value})";
                     } else {
                         if (in_array($key, $bool_properties)) {
                             $value = (bool) $value ? "true" : "false";
                         }
                     }
                     $content .= "\$" . $key . ": " . $value . ";\r\n";
                 }
             }
         }
         if (!empty($content)) {
             $content = $file_head . $content;
             $wp_filesystem->put_contents($filename, $content, FS_CHMOD_FILE);
             XT_Theme::sass_compile_flag();
         }
     }
     $this->in_process = false;
 }
Example #3
0
 function import()
 {
     global $wpdb, $XT_Theme, $wp_filesystem;
     ob_start();
     require_once XT_PARENT_DIR . '/lib/classes/autoimporter.class.php';
     if (empty($wp_filesystem)) {
         require_once ABSPATH . '/wp-admin/includes/file.php';
         WP_Filesystem();
     }
     $upload_dir = XT_Theme::get_upload_dir();
     $importPath = $upload_dir["dir"] . '/import/';
     if (!$wp_filesystem->is_dir($importPath)) {
         wp_mkdir_p($importPath);
     }
     $placeholders = true;
     if (strpos($_SERVER['HTTP_HOST'], 'xplodedthemes') !== false || strpos($_SERVER['HTTP_HOST'], XT_THEME_ID . '.dev') !== false) {
         $placeholders = false;
     }
     $placeholders = true;
     $file = $importPath . 'default-data.xml';
     $theme = !empty($_POST["theme"]) && $_POST["theme"] != 'default' ? '-' . sanitize_text_field($_POST["theme"]) : '';
     $redux = !empty($_POST["redux"]) ? esc_url_raw($_POST["redux"]) : '';
     $revslider = !empty($_POST["revslider"]) ? esc_url_raw($_POST["revslider"]) : '';
     $widgets = !empty($_POST["widgets"]) ? esc_url_raw($_POST["widgets"]) : '';
     $theme_child = !empty($_POST["theme"]) && $_POST["theme"] != 'default' ? sanitize_text_field($_POST["theme"]) . "\\/" : '';
     $xml_import_url = XT_IMPORT_URL . '/default-data' . $theme . '.xml';
     $file_content = xt_get_url_contents($xml_import_url);
     if (!empty($file_content) && $placeholders) {
         $file_content = preg_replace("/http:\\/\\/" . XT_THEME_ID . ".xplodedthemes\\.com\\/" . $theme_child . "wp-content\\/uploads\\/(.*?).(jpg|jpeg|png|gif)\\</", "http://placehold.it/400x400/f3f3f3/f3f3f3/placeholder.jpg<", $file_content);
     }
     if (empty($file_content)) {
         $message = 'Something went wrong! The theme was not able to fetch the default data xml from our server.<br><br>';
         $message .= 'Please make sure your server support either <b>allow_url_open</b> or <b>cURL</b><br><br>';
         $message .= 'You can also manually download the xml file and import it using WordPress Importer: <br><br><a target="_blank" href="' . $xml_import_url . '>Download XML Import File</a><br><br>';
         $message .= '<b>Note:</b> Manually importing the xml will only include page and post contents excluding revolution sliders, widgets and theme panel settings.';
         $data['error'] = true;
         $data['msg'] = '<p style="color: red;">' . $message . '</p>';
         die(json_encode($data));
     }
     if (!empty($file_content) && !$wp_filesystem->put_contents($file, $file_content, FS_CHMOD_FILE)) {
         $message = "Something went wrong! Don't worry, you have 2 different ways to fix it.<br><br>";
         $message .= "<strong>Option 1)</strong> Make sure your WordPress uploads directory is writable<br>To do this, you need to set the folder permission to 777. Check this video to know how to set folder permission using FileZilla: <a href='http://www.youtube.com/watch?v=MKgfquaVAgM'>http://www.youtube.com/watch?v=MKgfquaVAgM</a><br><br>";
         $message .= "<strong>Option 2)</strong> Import the default data using Wordpress Importer. Check our <a target='_blank' href='" . XT_DOCS_URL . "'>documentation</a> for more info";
         $data['error'] = true;
         $data['msg'] = '<p style="color: red;">' . $message . '</p>';
         die(json_encode($data));
     }
     if (!empty($file_content) && @file_exists($file)) {
         /* Flush Data
            ========================================================================== */
         $removed = array();
         if ($wpdb->query("TRUNCATE TABLE {$wpdb->posts}")) {
             $removed[] = __('Posts removed', XT_TEXT_DOMAIN);
         }
         if ($wpdb->query("TRUNCATE TABLE {$wpdb->postmeta}")) {
             $removed[] = __('Postmeta removed', XT_TEXT_DOMAIN);
         }
         if ($wpdb->query("TRUNCATE TABLE {$wpdb->comments}")) {
             $removed[] = __('Comments removed', XT_TEXT_DOMAIN);
         }
         if ($wpdb->query("TRUNCATE TABLE {$wpdb->commentmeta}")) {
             $removed[] = __('Commentmeta removed', XT_TEXT_DOMAIN);
         }
         if ($wpdb->query("TRUNCATE TABLE {$wpdb->links}")) {
             $removed[] = __('Links removed', XT_TEXT_DOMAIN);
         }
         if ($wpdb->query("TRUNCATE TABLE {$wpdb->terms}")) {
             $removed[] = __('Terms removed', XT_TEXT_DOMAIN);
         }
         if ($wpdb->query("TRUNCATE TABLE {$wpdb->term_relationships}")) {
             $removed[] = __('Term relationships removed', XT_TEXT_DOMAIN);
         }
         if ($wpdb->query("TRUNCATE TABLE {$wpdb->term_taxonomy}")) {
             $removed[] = __('Term Taxonomy removed', XT_TEXT_DOMAIN);
         }
         if ($wpdb->query("DELETE FROM {$wpdb->options} WHERE `option_name` LIKE ('%_transient_%')")) {
             $removed[] = __('Transients removed', XT_TEXT_DOMAIN);
         }
         $wpdb->query("OPTIMIZE TABLE {$wpdb->options}");
         foreach ($removed as $item) {
             $output[] = '' . $item . '<br>';
         }
         $output[] = '<hr>';
         /* Import XML
            ========================================================================== */
         $args = array('file' => $file, 'map_user_id' => 1);
         auto_import($args);
         $output[] = '<p>' . __('Imported WordPress Content', XT_TEXT_DOMAIN) . '</p>';
         /* Import Widgets
            ========================================================================== */
         if (!empty($widgets)) {
             $widgets_options = xt_get_url_contents($widgets);
             if (!empty($widgets_options)) {
                 $widgets_options = json_decode($widgets_options, true);
                 foreach ($widgets_options as $option) {
                     $key = $option["option_name"];
                     $value = unserialize($option["option_value"]);
                     if ($key == 'widget_nav_menu' && !empty($value) && is_array($value)) {
                         foreach ($value as $k => $v) {
                             if (!empty($value[$k]['nav_menu'])) {
                                 $value[$k]['nav_menu'] = '';
                             }
                         }
                     }
                     delete_option($key);
                     add_option($key, $value);
                 }
             }
             $output[] = '<p>' . __('Imported Widgets and assigned them to sidebars.', XT_TEXT_DOMAIN) . '</p>';
         }
         /* Set Menu Location
            ========================================================================== */
         if (!empty($XT_Theme->menus)) {
             $default_menu_id = 'main-menu';
             $menu_id = (int) $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->terms} WHERE slug = %s", $default_menu_id));
             $locations = get_theme_mod('nav_menu_locations');
             foreach ($XT_Theme->menus as $id => $menu) {
                 $locations[$id] = $menu_id;
             }
             set_theme_mod('nav_menu_locations', $locations);
             $output[] = '<p>' . __('Imported Menus and assigned them to menu locations.', XT_TEXT_DOMAIN) . '</p>';
         }
         /* Import Redux Settings
            ========================================================================== */
         if (!empty($redux)) {
             $import = xt_get_url_contents($redux);
             if (!empty($import)) {
                 $imported_options = json_decode($import, true);
             }
             if (!empty($imported_options) && is_array($imported_options) && isset($imported_options['redux-backup']) && $imported_options['redux-backup'] == '1') {
                 unset($imported_options['defaults'], $imported_options['compiler'], $imported_options['import'], $imported_options['import_code']);
                 update_option(XT_THEME_ID, $imported_options);
                 $output[] = '<p>' . __('Imported Theme Options', XT_TEXT_DOMAIN) . '</p>';
             }
         }
         /* Import Revolution Sliders
            ========================================================================== */
         if (!empty($revslider) && function_exists('is_plugin_active') && is_plugin_active('revslider/revslider.php')) {
             $this->get_and_save($revslider);
             $output[] = '<p>' . __('Imported Revolution Sliders', XT_TEXT_DOMAIN) . '</p>';
         }
         /* Import Essential Grid
            ========================================================================== */
         if (!empty($essgrid) && function_exists('is_plugin_active') && is_plugin_active('essential-grid/essential-grid.php')) {
             $this->get_and_save($essgrid);
             $output[] = '<p>' . __('Imported Essential Grid Data', XT_TEXT_DOMAIN) . '</p>';
         }
         flush_rewrite_rules();
         $data['error'] = false;
         $data['msg'] = implode('', $output) . '<p style="color: green;"><strong>' . __('Import Succeeded!', XT_TEXT_DOMAIN) . '</strong></p>';
     } else {
         $data['error'] = true;
         $data['msg'] = '<p style="color: red;"><strong>' . __('Import file is missing:', XT_TEXT_DOMAIN) . ' ' . $file . '</strong></p>';
     }
     ob_end_clean();
     die(json_encode($data));
 }
Example #4
0
function xt_enqueue_style($handle, $src, $deps = array(), $ver = false, $media = "all")
{
    if (strpos($src, XT_PARENT_URL) === false) {
        $css_locations = XT_Theme::getAssetsPaths();
        $src_path = str_replace($css_locations['css_url'], $css_locations['css_dir'], $src);
    } else {
        $src_path = str_replace(XT_PARENT_URL, XT_PARENT_DIR, $src);
    }
    $file_time = @filemtime($src_path);
    $src = $src . "?t=" . $file_time;
    wp_register_style($handle, $src, $deps, $ver, $media);
    wp_enqueue_style($handle);
}
Example #5
0
 public static function setAssetsPaths()
 {
     $xt_upload_dir = self::get_upload_dir();
     $assets = array();
     $assets['scss_dir'] = XT_ASSETS_DIR . '/scss';
     $assets['scss_url'] = XT_ASSETS_URL . '/scss';
     $assets['css_dir'] = $xt_upload_dir['dir'];
     $assets['css_url'] = $xt_upload_dir['url'];
     $assets['dynamic_scss'] = $assets['css_dir'] . '/_dynamic.scss';
     self::$assets = $assets;
 }