Beispiel #1
0
function wptouch_get_bloginfo($setting_name)
{
    global $wptouch_pro;
    $settings = $wptouch_pro->get_settings();
    $setting = false;
    switch ($setting_name) {
        case 'foundation_directory':
            $setting = WPTOUCH_DIR . '/themes/foundation';
            break;
        case 'foundation_url':
            $setting = WPTOUCH_URL . '/themes/foundation';
            break;
        case 'template_directory':
        case 'template_url':
            $setting = $wptouch_pro->get_template_directory_uri(false);
            break;
        case 'child_theme_directory_uri':
            $setting = $wptouch_pro->get_stylesheet_directory_uri(false);
            break;
        case 'theme_root_directory':
            $setting = $wptouch_pro->get_current_theme_directory();
            break;
        case 'theme_root_url':
            $setting = $wptouch_pro->get_current_theme_uri();
            break;
        case 'site_title':
            if ($settings->site_title != '') {
                $setting = $settings->site_title;
            } else {
                $setting = get_bloginfo('name');
            }
            break;
        case 'wptouch_directory':
            $setting = WPTOUCH_DIR;
            break;
        case 'wptouch_url':
            $setting = WPTOUCH_URL;
            break;
        case 'version':
            $setting = WPTOUCH_VERSION;
            break;
        case 'theme_count':
            $themes = $wptouch_pro->get_available_themes();
            $setting = count($themes);
            break;
        case 'icon_set_count':
            $icon_sets = $wptouch_pro->get_available_icon_packs();
            // Remove the custom icon count
            $setting = count($icon_sets) - 1;
            break;
        case 'icon_count':
            $icon_sets = $wptouch_pro->get_available_icon_packs();
            $total_icons = 0;
            foreach ($icon_sets as $setname => $set) {
                if ($setname == "Custom Icons") {
                    continue;
                }
                $icons = $wptouch_pro->get_icons_from_packs($setname);
                $total_icons += count($icons);
            }
            $setting = $total_icons;
            break;
        case 'support_licenses_remaining':
            $licenses = $wptouch_pro->bnc_api->user_list_licenses();
            if ($licenses) {
                $setting = $licenses['remaining'];
            } else {
                $setting = 0;
            }
            break;
        case 'support_licenses_total':
            $licenses = $wptouch_pro->bnc_api->get_total_licenses();
            if ($licenses) {
                $setting = $licenses;
            } else {
                $setting = 0;
            }
            break;
        case 'active_theme_friendly_name':
            $theme_info = $wptouch_pro->get_current_theme_info();
            if ($theme_info) {
                $setting = $theme_info->name;
            }
            break;
        case 'rss_url':
            if ($settings->menu_custom_rss_url) {
                $setting = $settings->menu_custom_rss_url;
            } else {
                $setting = get_bloginfo('rss2_url');
            }
            break;
        case 'warnings':
            $setting = wptouch_get_plugin_warning_count();
            break;
        case 'url':
            if ($settings->homepage_landing != 'none') {
                if ($settings->homepage_landing == 'custom') {
                    $setting = $settings->homepage_redirect_custom_target;
                } else {
                    $redirect_target = $settings->homepage_redirect_wp_target;
                    if (function_exists('icl_object_id')) {
                        $redirect_target = icl_object_id($redirect_target, 'page', true);
                    }
                    $setting = get_permalink($redirect_target);
                }
            } else {
                $setting = home_url();
            }
            break;
        case 'search_url':
            if (function_exists('home_url')) {
                $setting = home_url();
            } else {
                $setting = get_bloginfo('home');
            }
            break;
        default:
            // proxy other values to the original get_bloginfo function
            $setting = get_bloginfo($setting_name);
            break;
    }
    return $setting;
}
function wptouch_admin_handle_ajax($wptouch_pro, $ajax_action)
{
    switch ($ajax_action) {
        case 'dismiss-warning':
            $wptouch_pro->check_plugins_for_warnings();
            $settings = $wptouch_pro->get_settings();
            if ($wptouch_pro->post['plugin']) {
                if (!in_array($wptouch_pro->post['plugin'], $settings->dismissed_warnings)) {
                    $settings->dismissed_warnings[] = $wptouch_pro->post['plugin'];
                    $settings->save();
                }
            }
            echo wptouch_get_plugin_warning_count();
            break;
        case 'enable-menu-item':
            if (isset($wptouch_pro->post['is_checked']) && isset($wptouch_pro->post['page_id'])) {
                $page_id = $wptouch_pro->post['page_id'];
                // save the icon state
                if ($wptouch_pro->post['is_checked']) {
                    delete_post_meta($page_id, '_wptouch_pro_menu_item_disabled');
                } else {
                    update_post_meta($page_id, '_wptouch_pro_menu_item_disabled', '1');
                }
                echo '0';
            }
            break;
        case 'update-page-icon':
            if (isset($wptouch_pro->post['page_id']) && isset($wptouch_pro->post['image_file'])) {
                $page_id = $wptouch_pro->post['page_id'];
                $image_file = str_replace(wptouch_check_url_ssl(site_url()), '', $wptouch_pro->post['image_file']);
                // save the icon state
                update_post_meta($page_id, '_wptouch_pro_menu_item_icon', $image_file);
                echo '0';
            }
            break;
        case 'reset-page-icons-and-state':
            $wptouch_pro->reset_icon_states();
            echo '0';
            break;
        case 'set-default-icon':
            $settings = wptouch_get_settings();
            $settings->default_menu_icon = str_replace(wptouch_check_url_ssl(site_url()), '', $wptouch_pro->post['image_file']);
            $settings->save();
            echo '0';
            break;
        case 'reset-page-icon':
            if (isset($wptouch_pro->post['page_id'])) {
                delete_post_meta($wptouch_pro->post['page_id'], '_wptouch_pro_menu_item_icon');
                echo '0';
            }
            break;
        case 'delete-image-upload':
            if (isset($wptouch_pro->post['setting_name'])) {
                $wptouch_pro->update_encoded_setting($wptouch_pro->post['setting_name'], false);
                echo '0';
            }
            break;
        case 'delete-custom-icon':
            if (current_user_can('upload_files')) {
                if (isset($wptouch_pro->post['icon_name'])) {
                    $icon_location = WPTOUCH_CUSTOM_ICON_DIRECTORY . '/' . $wptouch_pro->post['icon_name'];
                    unlink($icon_location);
                    echo '0';
                }
            }
            break;
        case 'load-news':
            echo wptouch_capture_include_file(WPTOUCH_DIR . '/admin/html/news.php');
            break;
        case 'load-notifications':
        case 'load-notifications-plugin':
            wptouch_notification_setup();
            $result = array();
            $result['html'] = wptouch_capture_include_file(WPTOUCH_DIR . '/admin/html/notification-content.php');
            $result['count'] = wptouch_get_notification_count();
            echo json_encode($result);
            break;
        case 'dismiss-notification':
            wptouch_notification_setup();
            $settings = wptouch_get_settings();
            if (!in_array($wptouch_pro->post['notification_key'], $settings->dismissed_notifications)) {
                $settings->dismissed_notifications[] = $wptouch_pro->post['notification_key'];
                $settings->save();
            }
            $result = array();
            $result['html'] = wptouch_capture_include_file(WPTOUCH_DIR . '/admin/html/notification-content.php');
            $result['count'] = wptouch_get_notification_count();
            echo json_encode($result);
            break;
        case 'load-plugin-compat-list':
            $wptouch_pro->generate_plugin_hook_list(true);
            $compat_settings = wptouch_get_settings('compat');
            if (is_array($compat_settings->plugin_hooks) && count($compat_settings->plugin_hooks)) {
                $changed = false;
                foreach ($compat_settings->plugin_hooks as $name => $value) {
                    if (!isset($compat_settings->enabled_plugins[$name])) {
                        $compat_settings->enabled_plugins[$name] = 1;
                        $changed = true;
                    }
                }
                if ($changed) {
                    $compat_settings->save();
                }
            }
            echo wptouch_capture_include_file(WPTOUCH_DIR . '/admin/settings/html/plugin-compat-ajax.php');
            break;
        case 'prep-settings-download':
            require_once WPTOUCH_DIR . '/core/admin-backup-restore.php';
            $backup_file = wptouch_backup_settings();
            echo $backup_file;
            break;
        case 'load-touchboard-area':
            if (defined('WPTOUCH_IS_FREE')) {
                $content = wp_remote_get('http://wptouch-pro-3.s3.amazonaws.com/WPtouchBoard/free/page.xhtml');
            } else {
                $content = wp_remote_get('http://wptouch-pro-3.s3.amazonaws.com/WPtouchBoard/pro/3.4/page.xhtml');
            }
            if (!is_wp_error($content)) {
                echo $content['body'];
            }
            break;
        case 'load-upgrade-area':
            $content = wp_remote_get('http://wptouch-pro-3.s3.amazonaws.com/WPtouchBoard/upgrade/page.xhtml');
            if (!is_wp_error($content)) {
                echo $content['body'];
            }
            break;
        case 'download-icon-set':
            global $wptouch_pro;
            require_once WPTOUCH_DIR . '/core/icon-set-installer.php';
            $icon_set_installer = new WPtouchIconSetInstaller();
            $icon_set_installer->install($wptouch_pro->post['base'], $wptouch_pro->post['url']);
            if (file_exists(WPTOUCH_BASE_CONTENT_DIR . '/icons/' . $wptouch_pro->post['base'])) {
                echo '1';
            } else {
                echo '0';
            }
            break;
        case 'get-icon-set-info':
            require_once WPTOUCH_DIR . '/core/admin-icons.php';
            echo wptouch_capture_include_file(WPTOUCH_DIR . '/admin/settings/html/installed_icon_sets_ajax.php');
            break;
        case 'admin-change-log':
            if (!defined('WPTOUCH_IS_FREE')) {
                $change_log = wp_remote_get(WPTOUCH_PRO_README_FILE);
            } else {
                $change_log = wp_remote_get('http://plugins.svn.wordpress.org/wptouch/trunk/readme.txt');
            }
            if (!is_wp_error($change_log)) {
                $content = $change_log['body'];
                $result = preg_match_all("#= Version (.*) =(.*)\n=#iUs", $content, $matches);
                if ($result) {
                    $entries = count($matches[0]);
                    for ($i = 0; $i < $entries; $i++) {
                        echo '<h4 style="font-family: Helvetica, sans-serif">' . sprintf(__('Version %s', 'wptouch-pro'), $matches[1][$i]) . '</h4><ul  style="font-family: Helvetica, sans-serif; font-size: 13px">';
                        echo str_replace('* ', '<li style="padding-top:3px;padding-bottom:3px;">', str_replace("\n", "</li>\n", $matches[2][$i]));
                        echo '</ul>';
                    }
                }
            } else {
                echo __('There is a temporary issue retrieving the change-log.  Please try again later.', 'wptouch-pro');
            }
            break;
        case 'load-addon-browser':
            require_once WPTOUCH_DIR . '/admin/settings/html/extension-browser-ajax.php';
            break;
        case 'load-theme-browser':
            require_once WPTOUCH_DIR . '/admin/settings/html/theme-browser-ajax.php';
            break;
        case 'repair-active-theme':
            $result = wptouch_repair_active_theme_from_cloud($errors);
            if (wptouch_migration_is_theme_broken()) {
                echo '0';
            } else {
                echo '1';
            }
            break;
        default:
            do_action('wptouch_admin_ajax_' . $ajax_action);
            do_action('wptouch_admin_ajax_intercept', $ajax_action);
            break;
    }
}
function wptouch_admin_handle_ajax(&$wptouch_pro, $ajax_action)
{
    switch ($ajax_action) {
        case 'dismiss-warning':
            $wptouch_pro->check_plugins_for_warnings();
            $settings = $wptouch_pro->get_settings();
            if ($wptouch_pro->post['plugin']) {
                if (!in_array($wptouch_pro->post['plugin'], $settings->dismissed_warnings)) {
                    $settings->dismissed_warnings[] = $wptouch_pro->post['plugin'];
                    $settings->save();
                }
            }
            echo wptouch_get_plugin_warning_count();
            break;
        case 'delete-image-upload':
            if (isset($wptouch_pro->post['setting_name'])) {
                $wptouch_pro->update_encoded_setting($wptouch_pro->post['setting_name'], false);
                echo '0';
            }
            break;
        case 'delete-custom-icon':
            if (current_user_can('upload_files')) {
                if (isset($wptouch_pro->post['icon_name'])) {
                    $icon_location = WPTOUCH_CUSTOM_ICON_DIRECTORY . '/' . $wptouch_pro->post['icon_name'];
                    unlink($icon_location);
                    echo '0';
                }
            }
            break;
        case 'load-plugin-compat-list':
            $wptouch_pro->generate_plugin_hook_list(true);
            $compat_settings = wptouch_get_settings('compat');
            if (is_array($compat_settings->plugin_hooks) && count($compat_settings->plugin_hooks)) {
                $changed = false;
                foreach ($compat_settings->plugin_hooks as $name => $value) {
                    if (!isset($compat_settings->enabled_plugins[$name])) {
                        $compat_settings->enabled_plugins[$name] = 1;
                        $changed = true;
                    }
                }
                if ($changed) {
                    $compat_settings->save();
                }
            }
            echo wptouch_capture_include_file(WPTOUCH_DIR . '/admin/settings/html/plugin-compat-ajax.php');
            break;
        case 'prep-settings-download':
            require_once WPTOUCH_DIR . '/core/admin-backup-restore.php';
            $backup_file = wptouch_backup_settings();
            echo $backup_file;
            break;
        case 'load-upgrade-area':
            $content = wp_remote_get('http://wptouch-pro-4.s3.amazonaws.com/free-upgrade-area/page.xhtml');
            if (!is_wp_error($content)) {
                echo $content['body'];
            }
            break;
        case 'download-icon-set':
            global $wptouch_pro;
            require_once WPTOUCH_DIR . '/core/icon-set-installer.php';
            $icon_set_installer = new WPtouchIconSetInstaller();
            $icon_set_installer->install($wptouch_pro->post['base'], $wptouch_pro->post['url']);
            if (file_exists(WPTOUCH_BASE_CONTENT_DIR . '/icons/' . $wptouch_pro->post['base'])) {
                echo '1';
            } else {
                echo '0';
            }
            break;
        case 'get-icon-set-info':
            require_once WPTOUCH_DIR . '/core/admin-icons.php';
            echo wptouch_capture_include_file(WPTOUCH_DIR . '/admin/settings/html/installed_icon_sets_ajax.php');
            break;
        case 'admin-change-log':
            if (!defined('WPTOUCH_IS_FREE')) {
                $change_log = wp_remote_get(WPTOUCH_PRO_README_FILE);
            } else {
                $change_log = wp_remote_get('http://plugins.svn.wordpress.org/wptouch/trunk/readme.txt');
            }
            if (!is_wp_error($change_log)) {
                $content = $change_log['body'];
                $result = preg_match_all("#= Version (.*) =(.*)\n=#iUs", $content, $matches);
                if ($result) {
                    $entries = count($matches[0]);
                    for ($i = 0; $i < $entries; $i++) {
                        echo '<h4 style="font-family: Helvetica, sans-serif">' . sprintf(__('Version %s', 'wptouch-pro'), $matches[1][$i]) . '</h4><ul  style="font-family: Helvetica, sans-serif; font-size: 13px">';
                        echo str_replace('* ', '<li style="padding-top:3px;padding-bottom:3px;">', str_replace("\n", "</li>\n", $matches[2][$i]));
                        echo '</ul>';
                    }
                }
            } else {
                echo __('There is a temporary issue retrieving the change-log.  Please try again later.', 'wptouch-pro');
            }
            break;
        case 'load-addon-browser':
            require_once WPTOUCH_DIR . '/admin/settings/html/extension-browser-ajax.php';
            break;
        case 'repair-active-theme':
            $result = wptouch_repair_active_theme_from_cloud($errors);
            if (wptouch_migration_is_theme_broken()) {
                echo '0';
            } else {
                echo '1';
            }
            break;
        case 'wizard-language':
            $settings = $wptouch_pro->get_settings();
            if ($wptouch_pro->post['force_locale'] && $settings->force_locale != $wptouch_pro->post['force_locale']) {
                $settings->force_locale = $wptouch_pro->post['force_locale'];
                $settings->save();
                echo '1';
            } elseif ($wptouch_pro->post['force_network_locale'] && $settings->force_network_locale != $wptouch_pro->post['force_network_locale']) {
                $settings->force_network_locale = $wptouch_pro->post['force_network_locale'];
                $settings->save();
                echo '1';
            } else {
                echo '0';
            }
            break;
        case 'wizard-update-extensions':
            $result = json_decode(wptouch_update_all_addons());
            echo $result['status'];
            break;
        case 'wizard-theme':
            if (isset($wptouch_pro->post['theme'])) {
                wptouch_activate_theme($wptouch_pro->post['theme']);
                echo '1';
            } else {
                echo '0';
            }
            break;
        case 'wizard-extensions':
            if (isset($wptouch_pro->post['extensions'])) {
                foreach ($wptouch_pro->post['extensions'] as $extension) {
                    wptouch_activate_addon($extension);
                }
                echo '1';
            } else {
                echo '0';
            }
            break;
        case 'wizard-pages':
            $settings = $wptouch_pro->get_settings();
            if (get_option('show_on_front') == 'page' && isset($wptouch_pro->post['homepage_redirect_wp_target'])) {
                $settings->homepage_landing = 'select';
                $settings->homepage_redirect_wp_target = $wptouch_pro->post['homepage_redirect_wp_target'];
            }
            $settings->save();
            $settings = $wptouch_pro->get_settings('foundation');
            $settings->latest_posts_page = $wptouch_pro->post['latest_posts_page'];
            $settings->save();
            echo '1';
            break;
        case 'wizard-wptouch_message':
            $settings = $wptouch_pro->get_settings();
            if ($wptouch_pro->post['show_wptouch_in_footer'] == 'true') {
                $wptouch_pro->post['show_wptouch_in_footer'] = 1;
            } else {
                $wptouch_pro->post['show_wptouch_in_footer'] = 0;
            }
            if (isset($wptouch_pro->post['show_wptouch_in_footer']) && $settings->show_wptouch_in_footer != $wptouch_pro->post['show_wptouch_in_footer']) {
                $settings->show_wptouch_in_footer = $wptouch_pro->post['show_wptouch_in_footer'];
                $settings->save();
                echo '1';
            } else {
                echo '0';
            }
            break;
        case 'wizard-scan_for_analytics':
            $result = wp_remote_get(home_url());
            $result_info = array();
            if ($result && is_array($result) && isset($result['body'])) {
                if (preg_match_all('#(<script>.*</script>)#iUs', $result['body'], $match)) {
                    foreach ($match[0] as $possible_analytics) {
                        $search_for = array('GoogleAnalyticsObject');
                        foreach ($search_for as $search_phrase) {
                            if (preg_match('#' . $search_phrase . '#iU', $possible_analytics, $ga_match)) {
                                // Found Google Analytics code
                                $result_info['code'] = 'found';
                                $result_info['success'] = sprintf(__('Code found! %s Analytics was automatically configured for you.', 'wptouch-pro'), '<br />');
                                $result_info['fragment'] = htmlentities($possible_analytics);
                                // If Google, retrieve the site ID
                                if ($search_phrase == 'GoogleAnalyticsObject') {
                                    preg_match('/\'(UA-.*?)\'/s', $possible_analytics, $id_match);
                                    if (count($id_match) == 2) {
                                        $result_info['site_id'] = $id_match[1];
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
            }
            if (is_array($result) && !isset($result_info['code'])) {
                $result_info['code'] = 'noresult';
                $result_info['msg'] = __('Unable to find your Google Analytics code. You can enter it manually in the settings later.', 'wptouch-pro');
            }
            echo json_encode($result_info);
            break;
        case 'wizard-analytics':
            $settings = $wptouch_pro->get_settings();
            if ($wptouch_pro->post['analytics_google_id']) {
                $settings->analytics_google_id = $wptouch_pro->post['analytics_google_id'];
                $settings->analytics_embed_method = 'simple';
                $settings->save();
            }
            break;
        case 'wizard-multisite':
            $settings = $wptouch_pro->get_settings('bncid');
            if ($wptouch_pro->post['multisite_control'] == 'true') {
                $wptouch_pro->post['multisite_control'] = 1;
            } else {
                $wptouch_pro->post['multisite_control'] = 0;
            }
            $settings->multisite_control = $wptouch_pro->post['multisite_control'];
            $settings->save();
            break;
        case 'network-wizard-complete':
            $settings = $wptouch_pro->get_settings();
            $settings->show_network_wizard = false;
            $settings->save();
            break;
        case 'wizard-complete':
            $settings = $wptouch_pro->get_settings();
            if (defined('WPTOUCH_IS_FREE')) {
                $settings->show_free_wizard = false;
            } else {
                $settings->show_wizard = false;
            }
            $settings->save();
            break;
        case 'activate-license-key':
            $email = $wptouch_pro->post['email'];
            $key = $wptouch_pro->post['key'];
            $settings = wptouch_get_settings('bncid');
            $old_settings = $settings;
            $settings->bncid = $email;
            $settings->wptouch_license_key = $key;
            WPTOUCH_DEBUG(WPTOUCH_INFO, "Attempting site activation with email [" . $email . "] and key [" . $key . "]");
            $settings->save();
            $wptouch_pro->bnc_api = false;
            $wptouch_pro->setup_bncapi($email, $key, true);
            // let's try to activate the license
            $wptouch_pro->activate_license();
            // Check to see if the credentials were valid
            if ($wptouch_pro->bnc_api->response_code >= 406 && $wptouch_pro->bnc_api->response_code <= 408) {
                WPTOUCH_DEBUG(WPTOUCH_WARNING, "Activation response code was [" . $wptouch_pro->bnc_api->response_code . "]");
                echo '2';
            } else {
                if ($wptouch_pro->bnc_api->server_down) {
                    // Server is unreachable for some reason
                    WPTOUCH_DEBUG(WPTOUCH_WARNING, "Activation response code was [SERVER UNREACHABLE]");
                    echo '4';
                } else {
                    if ($wptouch_pro->bnc_api->verify_site_license()) {
                        // Activation successful
                        WPTOUCH_DEBUG(WPTOUCH_WARNING, "Activation successful, response code was [" . $wptouch_pro->bnc_api->response_code . "]");
                        $settings = wptouch_get_settings('bncid');
                        $settings->license_accepted = 1;
                        $settings->license_accepted_time = time();
                        $settings->save();
                        echo '1';
                    } else {
                        $bnc_info = $wptouch_pro->bnc_api->check_api();
                        if (isset($bnc_info['license_expired']) && $bnc_info['license_expired']) {
                            WPTOUCH_DEBUG(WPTOUCH_WARNING, "Failure: license is expired [" . $wptouch_pro->bnc_api->response_code . "]");
                            echo '5';
                        } else {
                            // No more licenses - might be triggered another way
                            WPTOUCH_DEBUG(WPTOUCH_WARNING, "Failure: activation response code was [" . $wptouch_pro->bnc_api->response_code . "]");
                            echo '3';
                        }
                    }
                }
            }
            break;
        case 'go-pro':
            $result = wptouch_free_go_pro();
            echo $result;
            break;
        case 'multisite_deploy':
            $source_site = $wptouch_pro->post['source_site'];
            $current_blog_id = get_current_blog_id();
            // Switch to the source site
            if ($current_blog_id != $source_site) {
                switch_to_blog($source_site);
                $wptouch_pro->settings_object = array();
            }
            $main_settings = $wptouch_pro->get_raw_settings('wptouch_pro');
            $foundation_settings = $wptouch_pro->get_raw_settings('foundation');
            $compat_settings = $wptouch_pro->get_raw_settings('compat');
            $colors = foundation_get_theme_colors();
            $color_settings = array();
            // Deploy color settings
            foreach ($colors as $color) {
                if (!isset($color_settings[$color->domain])) {
                    $new_settings = wptouch_get_settings($color->domain);
                    $color_settings[$color->domain] = $new_settings;
                }
            }
            $destination_sites = $wptouch_pro->post['deploy_sites'];
            foreach ($destination_sites as $site) {
                $update_customizer = false;
                $real_site = str_replace('site-', '', $site);
                restore_current_blog();
                switch_to_blog($real_site);
                $destination_main_settings = $wptouch_pro->get_raw_settings('wptouch_pro');
                if (!$destination_main_settings) {
                    $destination_main_settings = $wptouch_pro->get_setting_defaults('wptouch_pro');
                    $destination_main_settings = 'wptouch_pro';
                }
                $destination_foundation_settings = $wptouch_pro->get_raw_settings('foundation');
                if (!$destination_foundation_settings) {
                    $destination_foundation_settings = $wptouch_pro->get_setting_defaults('foundation');
                    $destination_foundation_settings->domain = 'foundation';
                }
                $destination_compat_settings = $wptouch_pro->get_raw_settings('compat');
                if (!$destination_compat_settings) {
                    $destination_compat_settings = $wptouch_pro->get_setting_defaults('compat');
                    $destination_compat_settings->domain = 'compat';
                }
                if ($wptouch_pro->post['deploy_general']) {
                    // Deploy general settings
                    $destination_main_settings->new_display_mode = $main_settings->new_display_mode;
                    $destination_main_settings->show_switch_link = $main_settings->show_switch_link;
                    $destination_foundation_settings->allow_zoom = $foundation_settings->allow_zoom;
                    $destination_foundation_settings->smart_app_banner = $foundation_settings->smart_app_banner;
                    $destination_main_settings->analytics_embed_method = $main_settings->analytics_embed_method;
                    $destination_main_settings->analytics_google_id = $main_settings->analytics_google_id;
                    $destination_main_settings->custom_stats_code = $main_settings->custom_stats_code;
                    $destination_main_settings->show_wptouch_in_footer = $main_settings->show_wptouch_in_footer;
                }
                if ($wptouch_pro->post['deploy_compat']) {
                    // Deploy compatiblitiy settings
                    $destination_main_settings->process_desktop_shortcodes = $main_settings->process_desktop_shortcodes;
                    $destination_main_settings->remove_shortcodes = $main_settings->remove_shortcodes;
                    $destination_compat_settings->plugin_hooks = $compat_settings->plugin_hooks;
                    $destination_compat_settings->enabled_plugins = $compat_settings->enabled_plugins;
                }
                if ($wptouch_pro->post['deploy_devices']) {
                    // Deploy device settings
                    $destination_main_settings->enable_ios_phone = $main_settings->enable_ios_phone;
                    $destination_main_settings->enable_android_phone = $main_settings->enable_android_phone;
                    $destination_main_settings->enable_blackberry_phone = $main_settings->enable_blackberry_phone;
                    $destination_main_settings->enable_firefox_phone = $main_settings->enable_firefox_phone;
                    $destination_main_settings->enable_opera_phone = $main_settings->enable_opera_phone;
                    $destination_main_settings->enable_windows_phone = $main_settings->enable_windows_phone;
                    $destination_main_settings->enable_ios_tablet = $main_settings->enable_ios_tablet;
                    $destination_main_settings->enable_android_tablet = $main_settings->enable_android_tablet;
                    $destination_main_settings->enable_windows_tablet = $main_settings->enable_windows_tablet;
                    $destination_main_settings->enable_kindle_tablet = $main_settings->enable_kindle_tablet;
                    $destination_main_settings->enable_blackberry_tablet = $main_settings->enable_blackberry_tablet;
                    $destination_main_settings->enable_webos_tablet = $main_settings->enable_webos_tablet;
                    $destination_main_settings->custom_user_agents = $main_settings->custom_user_agents;
                }
                if ($wptouch_pro->post['deploy_menus']) {
                    // Deploy menu settings
                    $destination_main_settings->enable_parent_items = $main_settings->enable_parent_items;
                    $destination_main_settings->enable_menu_icons = $main_settings->enable_menu_icons;
                }
                if ($wptouch_pro->post['deploy_themes']) {
                    // Deploy theme settings
                    $destination_main_settings->current_theme_friendly_name = $main_settings->current_theme_friendly_name;
                    $destination_main_settings->current_theme_location = $main_settings->current_theme_location;
                    $destination_main_settings->current_theme_name = $main_settings->current_theme_name;
                    $update_customizer = true;
                }
                if ($wptouch_pro->post['deploy_extensions']) {
                    // Deploy extension settings
                    $destination_main_settings->active_addons = $main_settings->active_addons;
                }
                if ($wptouch_pro->post['deploy_colors']) {
                    //echo $wptouch_pro->post[ 'deploy_colors' ];
                    // Deploy color settings
                    $destination_color_settings = array();
                    foreach ($colors as $color) {
                        if (!isset($destination_color_settings[$color->domain])) {
                            $new_settings = wptouch_get_settings($color->domain);
                            $destination_color_settings[$color->domain] = $new_settings;
                        }
                    }
                    foreach ($colors as $color) {
                        $setting_name = $color->setting;
                        $destination_color_settings[$color->domain]->{$setting_name} = $color_settings[$color->domain]->{$setting_name};
                    }
                    foreach ($destination_color_settings as $settings_object) {
                        $settings_object->save();
                    }
                    $update_customizer = true;
                }
                if ($wptouch_pro->post['deploy_social_media']) {
                    // Deploy social media settings
                    $destination_foundation_settings->social_facebook_url = $foundation_settings->social_facebook_url;
                    $destination_foundation_settings->social_twitter_url = $foundation_settings->social_twitter_url;
                    $destination_foundation_settings->social_google_url = $foundation_settings->social_google_url;
                    $destination_foundation_settings->social_instagram_url = $foundation_settings->social_instagram_url;
                    $destination_foundation_settings->social_tumblr_url = $foundation_settings->social_tumblr_url;
                    $destination_foundation_settings->social_pinterest_url = $foundation_settings->social_pinterest_url;
                    $destination_foundation_settings->social_vimeo_url = $foundation_settings->social_vimeo_url;
                    $destination_foundation_settings->social_youtube_url = $foundation_settings->social_youtube_url;
                    $destination_foundation_settings->social_linkedin_url = $foundation_settings->social_linkedin_url;
                    $destination_foundation_settings->social_yelp_url = $foundation_settings->social_yelp_url;
                    $destination_foundation_settings->social_email_url = $foundation_settings->social_email_url;
                    $destination_foundation_settings->social_rss_url = $foundation_settings->social_rss_url;
                    $update_customizer = true;
                }
                if ($wptouch_pro->post['deploy_social_sharing']) {
                    // Deploy social sharing icons
                    $destination_foundation_settings->show_share = $foundation_settings->show_share;
                    $destination_foundation_settings->share_on_pages = $foundation_settings->share_on_pages;
                    $destination_foundation_settings->share_location = $foundation_settings->share_location;
                    $destination_foundation_settings->share_colour_scheme = $foundation_settings->share_colour_scheme;
                    $update_customizer = true;
                }
                $destination_foundation_settings->save();
                $destination_main_settings->save();
                $destination_compat_settings->save();
                if ($update_customizer) {
                    wptouch_initialize_customizer(true);
                }
            }
            // Switch to the original site
            if ($current_blog_id != $source_site) {
                restore_current_blog();
            }
            break;
        default:
            do_action('wptouch_admin_ajax_' . $ajax_action, $wptouch_pro);
            do_action('wptouch_admin_ajax_intercept', $ajax_action);
            break;
    }
}
Beispiel #4
0
 function admin_ajax_handler()
 {
     if (current_user_can('manage_options')) {
         // Check security nonce
         $wptouch_nonce = $this->post['wptouch_nonce'];
         if (!wp_verify_nonce($wptouch_nonce, 'wptouch_admin')) {
             WPTOUCH_DEBUG(WPTOUCH_SECURITY, 'Invalid security nonce for AJAX call');
             exit;
         }
         $this->setup_bncapi();
         header('HTTP/1.1 200 OK');
         $wptouch_ajax_action = $this->post['wptouch_action'];
         switch ($wptouch_ajax_action) {
             case 'support-posting':
                 if (WPTOUCH_PRO_BETA) {
                     $result = $this->bnc_api->post_support_topic($this->post['title'], $this->post['tags'], $this->post['desc'], true);
                 } else {
                     $result = $this->bnc_api->post_support_topic($this->post['title'], $this->post['tags'], $this->post['desc']);
                 }
                 if ($result) {
                     echo 'ok';
                 }
                 break;
             case 'profile':
                 include WPTOUCH_ADMIN_AJAX_DIR . '/profile.php';
                 break;
             case 'regenerate-plugin-list':
                 $this->generate_plugin_hook_list(true);
                 echo 'ok';
                 break;
             case 'activate-license':
                 $this->activate_license();
                 include WPTOUCH_ADMIN_AJAX_DIR . '/profile.php';
                 break;
             case 'remove-license':
                 $this->remove_license();
                 include WPTOUCH_ADMIN_AJAX_DIR . '/profile.php';
                 break;
             case 'update-icon-pack':
                 require_once WPTOUCH_ADMIN_DIR . '/template-tags/icons.php';
                 include WPTOUCH_ADMIN_AJAX_DIR . '/icon-area.php';
                 break;
             case 'set-menu-icon':
                 $settings = $this->get_settings();
                 // Clean up SSL links
                 if (strpos($this->post['icon'], WP_CONTENT_URL) !== false) {
                     $icon_location = bnc_wptouch_sslize(str_replace(WP_CONTENT_URL, '', $this->post['icon']));
                 } else {
                     $icon_location = bnc_wptouch_sslize(str_replace(WP_CONTENT_URL, '', $this->post['icon']));
                     //		$icon_location = bnc_wptouch_sslize( str_replace( str_replace( 'http://', 'https://', WP_CONTENT_URL ), '', $this->post['icon'] ) );
                 }
                 $settings->temp_menu_icons[$this->post['title']] = $icon_location;
                 $this->save_settings($settings);
                 break;
             case 'reset-menu-icons':
                 require_once WPTOUCH_ADMIN_DIR . '/template-tags/icons.php';
                 $settings = $this->get_settings();
                 $settings->temp_menu_icons = $settings->menu_icons = array();
                 $settings->temp_disabled_menu_items = $settings->disabled_menu_items = array();
                 $this->save_settings($settings);
                 require_once WPTOUCH_DIR . '/include/template-tags/menu.php';
                 echo wptouch_get_site_menu_icon(WPTOUCH_ICON_DEAULT);
                 break;
             case 'enable-menu-item':
                 $settings = $this->get_settings();
                 $title = (int) $this->post['title'];
                 if (isset($settings->temp_disabled_menu_items[$title])) {
                     unset($settings->temp_disabled_menu_items[$title]);
                     $this->save_settings($settings);
                 }
                 break;
             case 'disable-menu-item':
                 $items_to_disable = $this->parent_and_children_menu_ids($this->post['title']);
                 if (count($items_to_disable)) {
                     $settings = $this->get_settings();
                     foreach ($items_to_disable as $key => $item) {
                         $settings->temp_disabled_menu_items[$item] = 1;
                     }
                     $this->save_settings($settings);
                 }
                 break;
             case 'remove-menu-icon':
                 require_once WPTOUCH_ADMIN_DIR . '/template-tags/icons.php';
                 $settings = $this->get_settings();
                 if (isset($settings->temp_menu_icons[$this->post['title']])) {
                     unset($settings->temp_menu_icons[$this->post['title']]);
                     $this->save_settings($settings);
                 }
                 require_once WPTOUCH_DIR . '/include/template-tags/menu.php';
                 echo wptouch_get_site_menu_icon(WPTOUCH_ICON_DEFAULT);
                 break;
             case 'manage-upload':
                 switch ($_FILES['userfile']['type']) {
                     case 'image/png':
                     case 'image/x-png':
                         move_uploaded_file($_FILES['userfile']['tmp_name'], WPTOUCH_CUSTOM_ICON_DIRECTORY . '/' . str_replace(' ', '-', $_FILES['userfile']['name']));
                         echo 'icon-done';
                         break;
                     case 'application/x-zip-compressed':
                     case 'application/zip':
                         move_uploaded_file($_FILES['userfile']['tmp_name'], WPTOUCH_TEMP_DIRECTORY . '/' . $_FILES['userfile']['name']);
                         $settings = $this->get_settings();
                         $settings->temp_icon_file_to_unzip = WPTOUCH_TEMP_DIRECTORY . '/' . $_FILES['userfile']['name'];
                         $this->save_settings($settings);
                         echo 'zip';
                         break;
                     default:
                         WPTOUCH_DEBUG(WPTOUCH_WARNING, 'Unknown file mime type ' . $_FILES['userfile']['type']);
                         echo 'invalid';
                         break;
                 }
                 break;
             case 'manage-unzip-set':
                 $settings = $this->get_settings();
                 $directory_name = basename(strtolower($settings->temp_icon_file_to_unzip), '.zip') . '-' . time();
                 @$this->create_directory_if_not_exist(WPTOUCH_CUSTOM_SET_DIRECTORY . '/' . $directory_name);
                 $destination_file = WPTOUCH_CUSTOM_SET_DIRECTORY . '/' . $directory_name . '/' . basename(strtolower($settings->temp_icon_file_to_unzip));
                 @rename($settings->temp_icon_file_to_unzip, $destination_file);
                 ob_start();
                 system('unzip -d "' . WPTOUCH_CUSTOM_SET_DIRECTORY . '/' . $directory_name . '" "' . $destination_file . '"');
                 ob_end_clean();
                 @unlink($destination_file);
                 @unlink($settings->temp_icon_file_to_unzip);
                 if (file_exists(WPTOUCH_CUSTOM_SET_DIRECTORY . '/' . $directory_name . '/wptouch.info')) {
                     echo 'done';
                 } else {
                     $settings->temp_icon_set_for_readme = WPTOUCH_CUSTOM_SET_DIRECTORY . '/' . $directory_name . '/wptouch.info';
                     $this->save_settings($settings);
                     echo 'create-readme';
                 }
                 break;
             case 'delete-icon-pack':
                 $pack = $this->get_icon_pack($this->post['set']);
                 if ($pack) {
                     $this->remove_directory($pack->location);
                 }
                 break;
             case 'delete-icon':
                 $icon_to_delete = bnc_wptouch_sslize(str_replace(WP_CONTENT_URL, WP_CONTENT_DIR, $this->post['icon']));
                 @unlink($icon_to_delete);
                 break;
             case 'activate-theme':
                 $settings = wptouch_get_settings();
                 $theme_location = $this->post['location'];
                 $theme_name = $this->post['name'];
                 if ($settings->current_theme_location != $theme_location) {
                     $paths = explode('/', ltrim(rtrim($theme_location, '/'), '/'));
                     $settings->current_theme_name = $paths[count($paths) - 1];
                     unset($paths[count($paths) - 1]);
                     $settings->current_theme_location = '/' . implode('/', $paths);
                     $settings->current_theme_friendly_name = $theme_name;
                     remove_all_filters('wptouch_theme_menu');
                     remove_all_filters('wptouch_default_settings');
                     $this->save_settings($settings);
                 }
                 break;
             case 'copy-theme':
                 $copy_src = WP_CONTENT_DIR . $this->post['location'];
                 $theme_name = $this->convert_to_class_name($this->post['name']);
                 $num = $this->get_theme_copy_num($theme_name);
                 $copy_dest = WPTOUCH_CUSTOM_THEME_DIRECTORY . '/' . $theme_name . '-copy-' . $num;
                 @$this->create_directory_if_not_exist($copy_dest);
                 $this->recursive_copy($copy_src, $copy_dest);
                 $readme_file = $copy_dest . '/readme.txt';
                 $readme_info = $this->load_file($readme_file);
                 if ($readme_info) {
                     if (preg_match('#Theme Name: (.*)#', $readme_info, $matches)) {
                         $readme_info = str_replace($matches[0], 'Theme Name: ' . $matches[1] . ' Copy #' . $num, $readme_info);
                         $f = fopen($readme_file, "w+t");
                         if ($f) {
                             fwrite($f, $readme_info);
                             fclose($f);
                         }
                     }
                 } else {
                     WPTOUCH_DEBUG(WPTOUCH_ERROR, "Unable to modify readme.txt file after copy");
                 }
                 break;
             case 'make-child-theme':
                 $copy_src = WP_CONTENT_DIR . $this->post['location'];
                 $theme_name = $this->convert_to_class_name($this->post['name']);
                 $num = $this->get_theme_copy_num($theme_name);
                 $copy_dest = WPTOUCH_CUSTOM_THEME_DIRECTORY . '/' . $theme_name . '-child-' . $num;
                 @$this->create_directory_if_not_exist($copy_dest);
                 $this->copy_file($copy_src . '/readme.txt', $copy_dest . '/readme.txt');
                 $this->copy_file($copy_src . '/screenshot.png', $copy_dest . '/screenshot.png');
                 $readme_file = $copy_dest . '/readme.txt';
                 if (file_exists($readme_file)) {
                     $readme_info = $this->load_file($readme_file);
                     if ($readme_info) {
                         if (preg_match('#Theme Name: (.*)#', $readme_info, $matches)) {
                             $readme_info = str_replace($matches[0], 'Theme Name: ' . $matches[1] . ' Child #' . $num, $readme_info);
                             $readme_info = $readme_info . "\nParent: " . $this->post['name'];
                             $f = fopen($readme_file, "w+t");
                             if ($f) {
                                 fwrite($f, $readme_info);
                                 fclose($f);
                             }
                             @$this->copy_file(WPTOUCH_CHILD_THEME_TEMPLATE_DIRECTORY . '/root-functions.php', $copy_dest . '/root-functions.php');
                         }
                         $all_files = $this->get_files_in_directory($copy_src, false);
                         if ($all_files) {
                             foreach ($all_files as $file_name) {
                                 if (is_dir($file_name)) {
                                     @$this->create_directory_if_not_exist($copy_dest . '/' . basename($file_name));
                                     @$this->copy_file(WPTOUCH_CHILD_THEME_TEMPLATE_DIRECTORY . '/style.css', $copy_dest . '/' . basename($file_name) . '/style.css');
                                     @$this->copy_file(WPTOUCH_CHILD_THEME_TEMPLATE_DIRECTORY . '/functions.php', $copy_dest . '/' . basename($file_name) . '/functions.php');
                                 }
                             }
                         }
                     } else {
                         WPTOUCH_DEBUG(WPTOUCH_ERROR, "Unable to modify readme.txt file after copy");
                     }
                 }
                 break;
             case 'delete-theme':
                 $delete_src = WP_CONTENT_DIR . $this->post['location'];
                 $this->recursive_delete($delete_src);
                 @rmdir($delete_src);
                 break;
             case 'dismiss-warning':
                 $settings = $this->get_settings();
                 if ($this->post['plugin']) {
                     if (!in_array($this->post['plugin'], $settings->dismissed_warnings)) {
                         $settings->dismissed_warnings[] = $this->post['plugin'];
                         $this->save_settings($settings);
                     }
                 }
                 echo wptouch_get_plugin_warning_count();
                 break;
             case 'reset-all-licenses':
                 if ($this->bnc_api->reset_all_licenses('wptouch-pro')) {
                     echo 'ok';
                 } else {
                     echo 'fail';
                 }
                 break;
             default:
                 //echo WPTOUCH_ADMIN_AJAX_DIR . '/' . basename( $wptouch_ajax_action ) . '.php';
                 if (file_exists(WPTOUCH_ADMIN_AJAX_DIR . '/' . basename($wptouch_ajax_action) . '.php')) {
                     include WPTOUCH_ADMIN_AJAX_DIR . '/' . basename($wptouch_ajax_action) . '.php';
                 }
                 break;
         }
     } else {
         WPTOUCH_DEBUG(WPTOUCH_SECURITY, 'Insufficient security privileges for AJAX call');
     }
     die;
 }