function motopressOptions() { global $motopressSettings; global $lang; if (isset($_POST['language']) && !empty($_POST['language'])) { $language = $_POST['language']; update_option('motopress-language', $language); $motopressSettings['lang'] = $language; $lang = getLanguageDict(); } echo '<div class="wrap">'; echo '<h2>' . $lang->motopressOptions . '</h2>'; echo '<form actoin="" method="POST">'; echo '<table class="form-table"><tbody>'; echo '<tr>'; echo '<th scope="row"><label for="language">' . $lang->language . '</label></th>'; echo '<td><select class="motopress-language" name="language" id="language">'; $curLang = get_option('motopress-language'); $languageFileList = glob(plugin_dir_path(__FILE__) . 'lang/*.json'); foreach ($languageFileList as $path) { $file = basename($path); $fileContents = file_get_contents($path); $fileContentsJSON = json_decode($fileContents); $languageName = $fileContentsJSON->{'name'}; $selected = $file == $curLang ? ' selected' : ''; echo '<option value="' . $file . '"' . $selected . '>' . $languageName . '</option>'; } echo '</select></td>'; echo '</tr>'; echo '</tbody></table>'; echo '<p class="submit"><input type="submit" class="button-primary" value="' . $lang->save . '" /></p>'; echo '</form>'; echo '</div>'; }
public function identify() { $lang = getLanguageDict(); $errors = array(); $xpath = null; $fileContent = ''; $dom = new DOMDocument('1.0', 'utf-8'); libxml_use_internal_errors(true); foreach ($this->themeFileList as $type => $list) { foreach ($list as $file) { if (is_writable($file)) { $isIdentified = true; $fileContent = file_get_contents($file); if (!empty($fileContent)) { $fileContent = self::preFix($fileContent, $type); $dom->loadHTML($fileContent); libxml_clear_errors(); $xpath = new DOMXpath($dom); foreach ($xpath->query('//div[contains(@class, "span") and @data-motopress-wrapper-type]') as $el) { if (!$el->hasAttribute('data-motopress-id') or !$el->getAttribute('data-motopress-id')) { $el->setAttribute('data-motopress-id', uniqid()); $isIdentified = false; } } foreach ($xpath->query('//div[contains(@class, "span") and not(@data-motopress-wrapper-type)] | //div[contains(@class, "row")] | //div[contains(@class, "motopress-inactive")]') as $el) { if (!$el->hasAttribute('data-motopress-id') or !$el->getAttribute('data-motopress-id')) { $el->setAttribute('data-motopress-id', uniqid()); $isIdentified = false; } if (!$el->hasAttribute('data-motopress-file') or !$el->getAttribute('data-motopress-file')) { if ($type == 'main') { $el->setAttribute('data-motopress-file', basename($file)); } else { $el->setAttribute('data-motopress-file', $type . '/' . basename($file)); } $isIdentified = false; } // } } if (!$isIdentified) { $fileContent = preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\\s*~i', '', $dom->saveHTML()); $fileContent = self::postFix($fileContent); $fileContent = self::removeEmptyLines($fileContent); file_put_contents($file, $fileContent); } } } else { $errors[] = strtr($lang->notWritable, array('%name%' => $file)); } } } return $errors; }
function motopressSetPageTemplate() { require_once 'verifyNonce.php'; require_once 'access.php'; require_once 'functions.php'; require_once 'getLanguageDict.php'; $pageId = $_POST['pageId']; $template = $_POST['template']; $lang = getLanguageDict(); if (!$pageId or !$template) { setError($lang->setPageTemplateError); } if (!update_post_meta($pageId, '_wp_page_template', $template)) { setError($lang->setPageTemplateError); } exit; }
function motopressMenu() { global $lang; $lang = getLanguageDict(); $mainPage = add_menu_page('MotoPress', 'MotoPress', 'read', 'motopress', 'motopress', plugin_dir_url(__FILE__) . 'images/menu-icon.png', null); global $requirements; $requirements = new Requirements(); global $isSupportedTheme; $isSupportedTheme = isSupportedTheme(); global $isjQueryVer; $isjQueryVer = checkjQueryVer(); if ($isSupportedTheme && $isjQueryVer) { add_submenu_page('motopress', $lang->visualEditor, $lang->visualEditor, 'read', 'motopress_visual_editor', 'motopressVisualEditor'); } $optionsPage = add_submenu_page('motopress', $lang->motopressOptions, $lang->motopressOptions, 'manage_options', 'motopress_options', 'motopressOptions'); add_action('admin_print_styles-' . $mainPage, 'motopressAdminStylesAndScripts'); add_action('admin_print_styles-' . $optionsPage, 'motopressAdminStylesAndScripts'); }
function motopressDuplicateTemplate() { require_once 'verifyNonce.php'; require_once 'settings.php'; require_once 'access.php'; require_once ABSPATH . '/wp-admin/includes/theme.php'; require_once 'InitTemplate.php'; require_once 'functions.php'; require_once 'getLanguageDict.php'; $pageId = $_POST['pageId']; $templateToDuplicate = $_POST['templateToDuplicate']; $newTemplateName = trim($_POST['newTemplateName']); global $motopressSettings; $lang = getLanguageDict(); $errors = array(); $templateDir = $motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/'; if ($pageId && $templateToDuplicate && $newTemplateName) { $newTemplateFile = uniqid('page-') . '.php'; if (!preg_match('/^[^\\*\\/]{1,30}$/is', $newTemplateName)) { setError($lang->validationName); } // If template with new name already exists $pageTemplates = get_page_templates(); foreach ($pageTemplates as $name => $file) { if (strcasecmp($newTemplateName, $name) == 0) { setError($lang->duplicateErrorTemplateExists); //$errors[] = 'Template `'. $name .'` already exists.'; break; } } if (file_exists($templateDir . $templateToDuplicate)) { $oldTemplateFile = file_get_contents($templateDir . $templateToDuplicate); $oldTemplateFile = InitTemplate::removePhpComment($oldTemplateFile); $oldTemplateFile = InitTemplate::removeEmptyPhp($oldTemplateFile); $oldTemplateFile = InitTemplate::reinit($oldTemplateFile, $newTemplateFile, 'main'); $oldTemplateFile = InitTemplate::setAnnotations($oldTemplateFile, array('template_name' => 'Template Name: ' . $newTemplateName)); if (!file_put_contents($templateDir . $newTemplateFile, $oldTemplateFile)) { setError($lang->duplicateError); //$errors[] = 'Error on: file_put_contents("'.$templateDir . $newTemplateFile.'", $oldTemplateFile)'; } if (!update_post_meta($pageId, '_wp_page_template', $newTemplateFile)) { unlink($templateDir . $newTemplateFile); setError($lang->duplicateError); //$errors[] = 'Error on: update_post_meta('.$pageId.', "_wp_page_template", "'.$newTemplateFile.'")'; } $request = array('value' => $newTemplateFile, 'name' => $newTemplateName); echo json_encode($request); } else { $errors[] = strtr($lang->duplicateErrorTemplateNotExist, array('%template%' => $templateDir . $templateToDuplicate)); } } else { $errors[] = $lang->duplicateError; } if (!empty($errors)) { if ($motopressSettings['debug']) { setError($errors); } else { setError($lang->duplicateError); } } exit; }
function motopressVisualEditor() { global $motopressSettings; $lang = getLanguageDict(); wp_register_style('style', plugin_dir_url(__FILE__) . 'includes/css/style.css', null, $motopressSettings['plugin_version']); wp_enqueue_style('style'); $copyErrors = copyParentFiles(); if (!empty($copyErrors)) { Flash::setFlash($copyErrors, 'error'); } else { $initTemplate = new InitTemplate(); $initErrors = $initTemplate->identify(); if (!empty($initErrors)) { Flash::setFlash($initErrors, 'error'); } else { ?> <div class="navbar motopress-navbar"> <div class="navbar-inner"> <div id="motopress-logo"> <img src="<?php echo $motopressSettings['plugin_root_url'] . '/' . $motopressSettings['plugin_name'] . '/images/logo.png?ver=' . $motopressSettings['plugin_version']; ?> " /> </div> <div id="motopress-editor-group"> <div class="pull-left navbar-form motopress-navbar"> <ul class="nav"> <li> <span><?php echo $lang->page; ?> </span> <?php require_once 'includes/showPageList.php'; ?> </li> <li id="motopress-page-templates-wrapper"> <!--<span id="motopress-page-templates-wrapper">--> <span><?php echo $lang->template; ?> </span> <?php require_once 'includes/showTemplateList.php'; ?> <!--</span>--> <button class="btn-default" id="motopress-duplicate-template" data-toggle="modal" data-target="#motopress-duplicate-modal"><?php echo $lang->duplicate; ?> </button> </li> </ul> </div> </div> <div id="motopress-preview-group" style="display: none"> <button class="btn-default pull-left active" data-toggle="button" id="motopress-show-hide-blocks"> <i class="icon-eye-open"></i> <span><?php echo $lang->showHiddenBlocks; ?> </span> </button> </div> <div class="pull-right"> <ul class="nav pull-right"> <li> <button class="btn-blue" id="motopress-save"><?php echo $lang->save; ?> </button> <!--<button class="btn-red" id="motopress-reset"><?php //echo $lang->reset; ?> </button>--> <button class="btn-default" id="motopress-visit-site"><?php echo $lang->visitSite; ?> </button> </li> <li class="dropdown" id="screenViews"> <a href="javascript:void(0);" class="dropdown-toggle" data-toggle="dropdown"> <div id="currentViewMode" class="screen-views-icon screen-views-editor-icon"></div> <b class="caret"></b> </a> <ul class="dropdown-menu"> <li><a href="javascript:void(0);" id="defaultScreenView"><div class="screen-views-icon screen-views-desktop-icon"></div></a><hr/></li> <li><a href="javascript:void(0);" id="tabletScreenView"><div class="screen-views-icon screen-views-tablet-icon"></div></a><hr/></li> <li><a href="javascript:void(0);" id="phoneScreenView"><div class="screen-views-icon screen-views-phone-icon"></div></a><hr/></li> <li><a href="javascript:void(0);" id="editorView"><div class="screen-views-icon screen-views-editor-icon"></div></a></li> </ul> </li> </ul> </div> </div> </div> <div id="motopress-flash"></div> <div id="motopress-iframe-wrapper"> <iframe id="motopress-iframe"></iframe> </div> <div id="motopress-preview-iframe-wrapper"> <iframe id="motopress-preview-iframe"></iframe> </div> <!-- Welcome --> <div id="motopress-welcome-modal" class="modal hide fade" role="dialog" aria-labelledby="welcomeModalLabel" aria-hidden="true"> <div class="modal-header"> <div class="motopress-close motopress-icon-remove" data-dismiss="modal" aria-hidden="true"></div> <p id="welcomeModalLabel"><?php echo $lang->welcomeToMotopressTitle; ?> </p> </div> <div class="modal-body"> <?php echo $lang->welcomeToMotopressMessage; ?> </div> <div class="modal-footer"> <button class="btn-default" data-dismiss="modal" aria-hidden="true"><?php echo $lang->close; ?> </button> </div> </div> <!-- Dublicate --> <div id="motopress-duplicate-modal" class="modal hide fade" role="dialog" aria-labelledby="duplicateModalLabel" aria-hidden="true"> <div class="modal-header"> <div class="motopress-close motopress-icon-remove" data-dismiss="modal" aria-hidden="true"></div> <p id="duplicateModalLabel"><?php echo $lang->newTemplateName; ?> </p> </div> <div class="modal-body"> <input type="text" id="motopress-new-template-name" placeholder="<?php echo $lang->newTemplateName; ?> " required maxlength="30"> </div> <div class="modal-footer"> <button class="btn-blue" id="motopress-duplicate-template-create"><?php echo $lang->create; ?> </button> <button class="btn-default" data-dismiss="modal" aria-hidden="true"><?php echo $lang->cancel; ?> </button> </div> </div> <!-- Static editor --> <div id="motopress-static-editor-modal" class="modal hide fade" role="dialog" aria-labelledby="staticModalLabel" aria-hidden="true"> <div class="modal-header"> <div class="motopress-close motopress-icon-remove" data-dismiss="modal" aria-hidden="true"></div> <p id="staticModalLabel"><?php echo $lang->editContent; ?> </p> </div> <div class="modal-body"> <label for="motopress-static-name" class="blockName-label"><?php echo $lang->staticName; ?> :*</label> <input id="motopress-static-name" type="text" placeholder="<?php echo $lang->staticName; ?> " required maxlength="30"> <div id="motopress-static-editor-wrapper"> <?php if (isset($_COOKIE['wp-settings-1'])) { $_COOKIE['wp-settings-1'] = preg_replace('/editor=(tinymce|html)/is', 'editor=html', $_COOKIE['wp-settings-1'], 1); } wp_editor('', 'motopress-static-content', array('remove_linebreaks' => 'false', 'schema' => 'html5')); ?> </div> </div> <div class="modal-footer"> <button id="motopress-save-static-content" class="btn-blue"><?php echo $lang->save; ?> </button> <button class="btn-default" data-dismiss="modal" aria-hidden="true"><?php echo $lang->cancel; ?> </button> </div> </div> <!-- Confirm --> <div id="motopress-confirm-modal" class="modal hide fade" role="dialog" aria-labelledby="confirmModalLabel" aria-hidden="true"></div> <!-- Preload --> <div id="motopress-preload"></div> <script type="text/javascript"> var steal = { production: 'mp/production.js?ver=<?php echo $motopressSettings['plugin_version']; ?> ' }; </script> <?php $protocol = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http'; $wpIncludesUrl = str_replace($protocol . '://' . $_SERVER['HTTP_HOST'], '', includes_url()); wp_enqueue_script('steal', plugins_url('steal/steal.production.js?mp', __FILE__), null, null); wp_localize_script('steal', 'motopress', array('ajaxUrl' => admin_url('admin-ajax.php'), 'wpJQueryUrl' => $wpIncludesUrl . 'js/jquery/', 'wpCssUrl' => $wpIncludesUrl . 'css/', 'pluginVersion' => $motopressSettings['plugin_version'], 'pluginVersionParam' => '?ver=' . $motopressSettings['plugin_version'], 'nonces' => array('motopress_get_wp_settings' => wp_create_nonce('wp_ajax_motopress_get_wp_settings'), 'motopress_get_list' => wp_create_nonce('wp_ajax_motopress_get_list'), 'motopress_get_loop' => wp_create_nonce('wp_ajax_motopress_get_loop'), 'motopress_save' => wp_create_nonce('wp_ajax_motopress_save'), 'motopress_reset' => wp_create_nonce('wp_ajax_motopress_reset'), 'motopress_set_page_template' => wp_create_nonce('wp_ajax_motopress_set_page_template'), 'motopress_duplicate_template' => wp_create_nonce('wp_ajax_motopress_duplicate_template'), 'motopress_save_static_content' => wp_create_nonce('wp_ajax_motopress_save_static_content'), 'motopress_get_static_content' => wp_create_nonce('wp_ajax_motopress_get_static_content'), 'motopress_get_static_block' => wp_create_nonce('wp_ajax_motopress_get_static_block'), 'motopress_get_sidebar' => wp_create_nonce('wp_ajax_motopress_get_sidebar'), 'motopress_get_wrapper' => wp_create_nonce('wp_ajax_motopress_get_wrapper')))); } } }
function motopressGetWrapper() { require_once 'verifyNonce.php'; require_once 'settings.php'; require_once 'access.php'; require_once 'Requirements.php'; require_once 'SaveTemplate.php'; require_once 'functions.php'; require_once 'getLanguageDict.php'; if (isset($_POST['wrapper']) && !empty($_POST['wrapper'])) { $wrapper = $_POST['wrapper']; $file = explode('.php', $wrapper); $wrapperName = $file[0]; get_template_part($wrapperName); } elseif (isset($_POST['link']) && !empty($_POST['link']) && (isset($_POST['page']) && !empty($_POST['page'])) && (isset($_POST['newWrapper']) && !empty($_POST['newWrapper'])) && (isset($_POST['data']) && !empty($_POST['data']))) { $link = $_POST['link']; $page = $_POST['page']; $newWrapper = $_POST['newWrapper']; $data = stripslashes($_POST['data']); global $motopressSettings; $lang = getLanguageDict(); $errors = array(); $pageWithExt = explode('.php', $page); $pageName = $pageWithExt[0]; $copy = copy($motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $page, $motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $pageName . '-original.php'); if ($copy) { $content = file_get_contents($motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $page); preg_match_all('/data-motopress-wrapper-file=[\'"]wrapper\\/([^\'"]+)[\'"]/is', $content, $wrapperMatches); if (!empty($wrapperMatches[1])) { $wrappers = $wrapperMatches[1]; $newWrapperPath = explode('/', $newWrapper); $newWrapperName = $newWrapperPath[1]; if (!in_array($newWrapperName, $wrappers)) { $wrappers[] = $newWrapperName; } foreach ($wrappers as $wrapper) { $wrapperWithExt = explode('.php', $wrapper); $wrapperName = $wrapperWithExt[0]; $wrapperCopy = copy($motopressSettings['theme_wrapper_root'] . '/' . $wrapper, $motopressSettings['theme_wrapper_root'] . '/' . $wrapperName . '-original.php'); if (!$wrapperCopy) { $errors[] = strtr($lang->copyError, array('%source%' => $motopressSettings['theme_wrapper_root'] . '/' . $wrapper, '%dest%' => $motopressSettings['theme_wrapper_root'] . '/' . $wrapperName . '-original.php')); } } new SaveTemplate($page, $data); $newHtml = false; $requirements = new Requirements(); if ($requirements->getCurl()) { $ch = curl_init(); $options = array(CURLOPT_URL => $link, CURLOPT_RETURNTRANSFER => true); curl_setopt_array($ch, $options); $newHtml = curl_exec($ch); curl_close($ch); } else { $newHtml = file_get_contents($link); } if (!$newHtml) { $errors[] = strtr($lang->openError, array('%name%' => $link)); } foreach ($wrappers as $wrapper) { if (!unlink($motopressSettings['theme_wrapper_root'] . '/' . $wrapper)) { $errors[] = strtr($lang->removeError, array('%name%' => $motopressSettings['theme_wrapper_root'] . '/' . $wrapper)); } $wrapperWithExt = explode('.php', $wrapper); $wrapperName = $wrapperWithExt[0]; $wrapperRename = rename($motopressSettings['theme_wrapper_root'] . '/' . $wrapperName . '-original.php', $motopressSettings['theme_wrapper_root'] . '/' . $wrapper); if (!$wrapperRename) { $errors[] = strtr($lang->renameError, array('%source%' => $motopressSettings['theme_wrapper_root'] . '/' . $wrapperName . '-original.php', '%dest%' => $motopressSettings['theme_wrapper_root'] . '/' . $wrapper)); } } } if (!unlink($motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $page)) { $errors[] = strtr($lang->removeError, array('%name%' => $motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $page)); } $rename = rename($motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $pageName . '-original.php', $motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $page); if (!$rename) { $errors[] = strtr($lang->renameError, array('%source%' => $motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $pageName . '-original.php', '%dest%' => $motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $page)); } } else { $errors[] = strtr($lang->copyError, array('%source%' => $motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $page, '%dest%' => $motopressSettings['theme_root'] . '/' . $motopressSettings['current_theme'] . '/' . $pageName . '-original.php')); } if (empty($errors)) { echo $newHtml; } else { if ($motopressSettings['debug']) { print_r($errors); } else { setError($lang->wrapperError); } } } exit; }
function motopressSaveStaticContent() { require_once 'verifyNonce.php'; require_once 'settings.php'; require_once 'access.php'; require_once 'functions.php'; require_once 'getLanguageDict.php'; $lang = getLanguageDict(); if (isset($_POST['staticName']) && !empty($_POST['staticName']) && preg_match('/^[^\\*\\/]{1,30}$/is', $_POST['staticName']) && isset($_POST['staticFile']) && !empty($_POST['staticFile']) && isset($_POST['staticContent'])) { $staticName = trim($_POST['staticName']); $staticName = htmlspecialchars($staticName); $staticFile = $_POST['staticFile']; $staticContent = $_POST['staticContent']; global $motopressSettings; $errors = array(); $file = explode('/', $staticFile); if (count($file) == 2) { $fileName = $file[1]; $fileWithExt = explode('.php', $staticFile); $name = $fileWithExt[0]; $filePath = $motopressSettings['theme_static_root'] . '/' . $fileName; $pattern = '/\\*\\s*Static\\s+Name:\\s*([^\\*]+)\\s*\\*/is'; $replacement = '* Static Name: ' . $staticName . ' *'; $content = stripslashes($staticContent); if (file_exists($filePath)) { $content = preg_replace($pattern, $replacement, $content, 1); } else { file_put_contents($filePath, ''); $content = '<?php /' . $replacement . "/ ?>\n" . $content; } $search = array('[php]', '[/php]'); $replace = array('<?php', '?>'); $content = str_replace($search, $replace, $content); if (!is_writable($motopressSettings['theme_static_root'])) { if (@(!chmod($motopressSettings['theme_static_root'], 0777))) { $errors[] = strtr($lang->changePermissionsError, array('%name%' => $motopressSettings['theme_static_root'])); } } if (is_writable($motopressSettings['theme_static_root'])) { if (!is_writable($filePath)) { if (@(!chmod($filePath, 0777))) { $errors[] = strtr($lang->changePermissionsError, array('%name%' => $filePath)); } } if (is_writable($filePath)) { $write = file_put_contents($filePath, htmlspecialchars_decode($content)); if ($write) { get_template_part($name); } else { $errors[] = strtr($lang->writeError, array('%name%' => $filePath)); } } else { $errors[] = strtr($lang->notWritable, array('%name%' => $filePath)); } } else { $errors[] = strtr($lang->notWritable, array('%name%' => $motopressSettings['theme_static_root'])); } } if (!empty($errors)) { if ($motopressSettings['debug']) { print_r($errors); } else { setError($lang->saveStaticContentError); } } } else { setError($lang->saveStaticContentError); } exit; }
<?php if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) and strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { require_once ABSPATH . WPINC . '/pluggable.php'; $currentUser = wp_get_current_user(); if (!is_user_logged_in() or !in_array('administrator', $currentUser->roles) or !current_user_can('edit_themes')) { require_once 'functions.php'; require_once 'getLanguageDict.php'; global $lang; $lang = getLanguageDict(); setError($lang->permissionDenied); } }