Пример #1
0
 function get_edit_form($showheader = false)
 {
     global $post, $wp_version, $edit_post, $post_id, $post_ID;
     if (!current_user_can('edit_wiki', $post->ID) && !current_user_can('edit_wikis', $post->ID) && !current_user_can('edit_others_wikis', $post->ID) && !current_user_can('edit_published_wikis', $post->ID)) {
         return __('You do not have permission to view this page.', 'wiki');
     }
     $return = '';
     $stack = debug_backtrace();
     // Jet pack compatibility
     if (isset($stack[3]) && isset($stack[3]['class']) && isset($stack[3]['function']) && $stack[3]['class'] == 'Jetpack_PostImages' && $stack[3]['function'] == 'from_html') {
         return $showheader;
     }
     if ($showheader) {
         $return .= '<div class="incsub_wiki incsub_wiki_single">';
         $return .= '<div class="incsub_wiki_tabs incsub_wiki_tabs_top">' . $this->tabs() . '<div class="incsub_wiki_clear"></div></div>';
     }
     $return .= '<h2>' . __('Edit', 'wiki') . '</h2>';
     $return .= '<form action="' . get_permalink() . '" method="post">';
     if (isset($_REQUEST['eaction']) && $_REQUEST['eaction'] == 'create') {
         $edit_post = $this->get_default_post_to_edit($post->post_type, true, $post->ID);
         $return .= '<input type="hidden" name="parent_id" id="parent_id" value="' . $post->ID . '" />';
         $return .= '<input type="hidden" name="original_publish" id="original_publish" value="Publish" />';
         $return .= '<input type="hidden" name="publish" id="publish" value="Publish" />';
     } else {
         $edit_post = $post;
         $return .= '<input type="hidden" name="parent_id" id="parent_id" value="' . $edit_post->post_parent . '" />';
         $return .= '<input type="hidden" name="original_publish" id="original_publish" value="Update" />';
     }
     $post_id = $edit_post->ID;
     $post_ID = $post_id;
     $return .= '<input type="hidden" name="post_type" id="post_type" value="' . $edit_post->post_type . '" />';
     $return .= '<input type="hidden" name="post_ID" id="wiki_id" value="' . $edit_post->ID . '" />';
     if ('private' == $edit_post->post_status) {
         $edit_post->post_password = '';
         $visibility = 'private';
         $visibility_trans = __('Private');
     } elseif (!empty($edit_post->post_password)) {
         $visibility = 'password';
         $visibility_trans = __('Password protected');
     } else {
         $visibility = 'public';
         $visibility_trans = __('Public');
     }
     $return .= '<input type="hidden" name="post_status" id="wiki_post_status" value="' . $edit_post->post_status . '" />';
     $return .= '<input type="hidden" name="visibility" id="wiki_visibility" value="' . $visibility . '" />';
     $return .= '<input type="hidden" name="comment_status" id="comment_status" value="' . $edit_post->comment_status . '" />';
     $return .= '<input type="hidden" name="action" id="wiki_action" value="editpost" />';
     $return .= '<div><input type="text" name="post_title" id="wiki_title" value="' . $edit_post->post_title . '" class="incsub_wiki_title" size="30" /></div>';
     $return .= '<div>';
     if (@ob_start()) {
         // Output buffering is on, capture the output from wp_editor() and append it to the $return variable
         wp_editor($edit_post->post_content, 'wikicontent', array('textarea_name' => 'content'));
         $return .= ob_get_clean();
     } else {
         /*
         This is hacky, but without output buffering on we needed to make a copy of the built-in _WP_Editors class and
         change the editor() method to return the output instead of echo it. The only bad thing about this is that we
         also had to remove the media_buttons action so plugins/themes won't be able to tie into it
         */
         require_once $this->plugin_dir . 'lib/classes/WPEditor.php';
         $return .= WikiEditor::editor($edit_post->post_content, 'wikicontent', array('textarea_name' => 'content'));
     }
     $return .= '</div>';
     $return .= '<input type="hidden" name="_wpnonce" id="_wpnonce" value="' . wp_create_nonce("wiki-editpost_{$edit_post->ID}") . '" />';
     if (is_user_logged_in()) {
         $return .= $this->get_meta_form(true);
     }
     $return .= '<div class="incsub_wiki_clear incsub_wiki_form_buttons">';
     $return .= '<input type="submit" name="save" id="btn_save" value="' . __('Save', 'wiki') . '" />&nbsp;';
     $return .= '<a href="' . get_permalink() . '">' . __('Cancel', 'wiki') . '</a>';
     $return .= '</div>';
     $return .= '</form>';
     if ($showheader) {
         $return .= '</div>';
     }
     $return .= '<style type="text/css">' . '#comments { display: none; }' . '.comments { display: none; }' . '</style>';
     return $return;
 }
Пример #2
0
 public static function editor_settings($editor_id, $set)
 {
     $first_run = false;
     if (empty(self::$first_init)) {
         if (is_admin()) {
             add_action('admin_print_footer_scripts', array(__CLASS__, 'editor_js'), 50);
             add_action('admin_footer', array(__CLASS__, 'enqueue_scripts'), 1);
         } else {
             add_action('wp_print_footer_scripts', array(__CLASS__, 'editor_js'), 50);
             add_action('wp_footer', array(__CLASS__, 'enqueue_scripts'), 1);
         }
     }
     if (self::$this_quicktags) {
         $qtInit = array('id' => $editor_id, 'buttons' => '');
         if (is_array($set['quicktags'])) {
             $qtInit = array_merge($qtInit, $set['quicktags']);
         }
         if (empty($qtInit['buttons'])) {
             $qtInit['buttons'] = 'strong,em,link,block,del,ins,img,ul,ol,li,code,more,close';
         }
         if ($set['dfw']) {
             $qtInit['buttons'] .= ',fullscreen';
         }
         /**
          * Filter the Quicktags settings.
          *
          * @since 3.3.0
          *
          * @param array  $qtInit    Quicktags settings.
          * @param string $editor_id The unique editor ID, e.g. 'content'.
          */
         $qtInit = apply_filters('quicktags_settings', $qtInit, $editor_id);
         self::$qt_settings[$editor_id] = $qtInit;
         self::$qt_buttons = array_merge(self::$qt_buttons, explode(',', $qtInit['buttons']));
     }
     if (self::$this_tinymce) {
         if (empty(self::$first_init)) {
             self::$baseurl = includes_url('js/tinymce');
             $mce_locale = get_locale();
             self::$mce_locale = $mce_locale = empty($mce_locale) ? 'en' : strtolower(substr($mce_locale, 0, 2));
             // ISO 639-1
             /** This filter is documented in wp-admin/includes/media.php */
             $no_captions = (bool) apply_filters('disable_captions', '');
             $first_run = true;
             $ext_plugins = '';
             if ($set['teeny']) {
                 /**
                  * Filter the list of teenyMCE plugins.
                  *
                  * @since 2.7.0
                  *
                  * @param array  $plugins   An array of teenyMCE plugins.
                  * @param string $editor_id Unique editor identifier, e.g. 'content'.
                  */
                 self::$plugins = $plugins = apply_filters('teeny_mce_plugins', array('fullscreen', 'image', 'wordpress', 'wpeditimage', 'wplink'), $editor_id);
             } else {
                 /**
                  * Filter the list of TinyMCE external plugins.
                  *
                  * The filter takes an associative array of external plugins for
                  * TinyMCE in the form 'plugin_name' => 'url'.
                  *
                  * The url should be absolute, and should include the js filename
                  * to be loaded. For example:
                  * 'myplugin' => 'http://mysite.com/wp-content/plugins/myfolder/mce_plugin.js'.
                  *
                  * If the external plugin adds a button, it should be added with
                  * one of the 'mce_buttons' filters.
                  *
                  * @since 2.5.0
                  *
                  * @param array $external_plugins An array of external TinyMCE plugins.
                  */
                 $mce_external_plugins = apply_filters('mce_external_plugins', array());
                 $plugins = array('charmap', 'hr', 'media', 'paste', 'tabfocus', 'textcolor', 'fullscreen', 'wordpress', 'wpeditimage', 'wpgallery', 'wplink', 'wpdialogs', 'wpview');
                 if (!self::$has_medialib) {
                     $plugins[] = 'image';
                 }
                 /**
                  * Filter the list of default TinyMCE plugins.
                  *
                  * The filter specifies which of the default plugins included
                  * in WordPress should be added to the TinyMCE instance.
                  *
                  * @since 3.3.0
                  *
                  * @param array $plugins An array of default TinyMCE plugins.
                  */
                 $plugins = array_unique(apply_filters('tiny_mce_plugins', $plugins));
                 if (($key = array_search('spellchecker', $plugins)) !== false) {
                     // Remove 'spellchecker' from the internal plugins if added with 'tiny_mce_plugins' filter to prevent errors.
                     // It can be added with 'mce_external_plugins'.
                     unset($plugins[$key]);
                 }
                 if (!empty($mce_external_plugins)) {
                     /**
                      * Filter the translations loaded for external TinyMCE 3.x plugins.
                      *
                      * The filter takes an associative array ('plugin_name' => 'path')
                      * where 'path' is the include path to the file.
                      *
                      * The language file should follow the same format as wp_mce_translation(),
                      * and should define a variable ($strings) that holds all translated strings.
                      *
                      * @since 2.5.0
                      *
                      * @param array $translations Translations for external TinyMCE plugins.
                      */
                     $mce_external_languages = apply_filters('mce_external_languages', array());
                     $loaded_langs = array();
                     $strings = '';
                     if (!empty($mce_external_languages)) {
                         foreach ($mce_external_languages as $name => $path) {
                             if (@is_file($path) && @is_readable($path)) {
                                 include_once $path;
                                 $ext_plugins .= $strings . "\n";
                                 $loaded_langs[] = $name;
                             }
                         }
                     }
                     foreach ($mce_external_plugins as $name => $url) {
                         if (in_array($name, $plugins, true)) {
                             unset($mce_external_plugins[$name]);
                             continue;
                         }
                         $url = set_url_scheme($url);
                         $mce_external_plugins[$name] = $url;
                         $plugurl = dirname($url);
                         $strings = $str1 = $str2 = '';
                         // Try to load langs/[locale].js and langs/[locale]_dlg.js
                         if (!in_array($name, $loaded_langs, true)) {
                             $path = str_replace(content_url(), '', $plugurl);
                             $path = WP_CONTENT_DIR . $path . '/langs/';
                             if (function_exists('realpath')) {
                                 $path = trailingslashit(realpath($path));
                             }
                             if (@is_file($path . $mce_locale . '.js')) {
                                 $strings .= @file_get_contents($path . $mce_locale . '.js') . "\n";
                             }
                             if (@is_file($path . $mce_locale . '_dlg.js')) {
                                 $strings .= @file_get_contents($path . $mce_locale . '_dlg.js') . "\n";
                             }
                             if ('en' != $mce_locale && empty($strings)) {
                                 if (@is_file($path . 'en.js')) {
                                     $str1 = @file_get_contents($path . 'en.js');
                                     $strings .= preg_replace('/([\'"])en\\./', '$1' . $mce_locale . '.', $str1, 1) . "\n";
                                 }
                                 if (@is_file($path . 'en_dlg.js')) {
                                     $str2 = @file_get_contents($path . 'en_dlg.js');
                                     $strings .= preg_replace('/([\'"])en\\./', '$1' . $mce_locale . '.', $str2, 1) . "\n";
                                 }
                             }
                             if (!empty($strings)) {
                                 $ext_plugins .= "\n" . $strings . "\n";
                             }
                         }
                         $ext_plugins .= 'tinyMCEPreInit.load_ext("' . $plugurl . '", "' . $mce_locale . '");' . "\n";
                         $ext_plugins .= 'tinymce.PluginManager.load("' . $name . '", "' . $url . '");' . "\n";
                     }
                 }
             }
             if ($set['dfw']) {
                 $plugins[] = 'wpfullscreen';
             }
             self::$plugins = $plugins;
             self::$ext_plugins = $ext_plugins;
             self::$first_init = array('theme' => 'modern', 'skin' => 'lightgray', 'language' => self::$mce_locale, 'formats' => "{\n\t\t\t\t\t\talignleft: [\n\t\t\t\t\t\t\t{selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'left'}},\n\t\t\t\t\t\t\t{selector: 'img,table,dl.wp-caption', classes: 'alignleft'}\n\t\t\t\t\t\t],\n\t\t\t\t\t\taligncenter: [\n\t\t\t\t\t\t\t{selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'center'}},\n\t\t\t\t\t\t\t{selector: 'img,table,dl.wp-caption', classes: 'aligncenter'}\n\t\t\t\t\t\t],\n\t\t\t\t\t\talignright: [\n\t\t\t\t\t\t\t{selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'right'}},\n\t\t\t\t\t\t\t{selector: 'img,table,dl.wp-caption', classes: 'alignright'}\n\t\t\t\t\t\t],\n\t\t\t\t\t\tstrikethrough: {inline: 'del'}\n\t\t\t\t\t}", 'relative_urls' => false, 'remove_script_host' => false, 'convert_urls' => false, 'browser_spellcheck' => true, 'fix_list_elements' => true, 'entities' => '38,amp,60,lt,62,gt', 'entity_encoding' => 'raw', 'keep_styles' => false, 'paste_webkit_styles' => 'font-weight font-style color', 'preview_styles' => 'font-family font-size font-weight font-style text-decoration text-transform', 'wpeditimage_disable_captions' => $no_captions, 'wpeditimage_html5_captions' => current_theme_supports('html5', 'caption'), 'plugins' => implode(',', $plugins));
             if (!empty($mce_external_plugins)) {
                 self::$first_init['external_plugins'] = json_encode($mce_external_plugins);
             }
             $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
             $version = 'ver=' . $GLOBALS['wp_version'];
             $dashicons = includes_url("css/dashicons{$suffix}.css?{$version}");
             $mediaelement = includes_url("js/mediaelement/mediaelementplayer.min.css?{$version}");
             $wpmediaelement = includes_url("js/mediaelement/wp-mediaelement.css?{$version}");
             // WordPress default stylesheet and dashicons
             $mce_css = array($dashicons, $mediaelement, $wpmediaelement, self::$baseurl . '/skins/wordpress/wp-content.css?' . $version);
             // load editor_style.css if the current theme supports it
             if (!empty($GLOBALS['editor_styles']) && is_array($GLOBALS['editor_styles'])) {
                 $editor_styles = $GLOBALS['editor_styles'];
                 $editor_styles = array_unique(array_filter($editor_styles));
                 $style_uri = get_stylesheet_directory_uri();
                 $style_dir = get_stylesheet_directory();
                 // Support externally referenced styles (like, say, fonts).
                 foreach ($editor_styles as $key => $file) {
                     if (preg_match('~^(https?:)?//~', $file)) {
                         $mce_css[] = esc_url_raw($file);
                         unset($editor_styles[$key]);
                     }
                 }
                 // Look in a parent theme first, that way child theme CSS overrides.
                 if (is_child_theme()) {
                     $template_uri = get_template_directory_uri();
                     $template_dir = get_template_directory();
                     foreach ($editor_styles as $key => $file) {
                         if ($file && file_exists("{$template_dir}/{$file}")) {
                             $mce_css[] = "{$template_uri}/{$file}";
                         }
                     }
                 }
                 foreach ($editor_styles as $file) {
                     if ($file && file_exists("{$style_dir}/{$file}")) {
                         $mce_css[] = "{$style_uri}/{$file}";
                     }
                 }
             }
             /**
              * Filter the comma-delimited list of stylesheets to load in TinyMCE.
              *
              * @since 2.1.0
              *
              * @param array $stylesheets Comma-delimited list of stylesheets.
              */
             $mce_css = trim(apply_filters('mce_css', implode(',', $mce_css)), ' ,');
             if (!empty($mce_css)) {
                 self::$first_init['content_css'] = $mce_css;
             }
         }
         if ($set['teeny']) {
             /**
              * Filter the list of teenyMCE buttons (Text tab).
              *
              * @since 2.7.0
              *
              * @param array  $buttons   An array of teenyMCE buttons.
              * @param string $editor_id Unique editor identifier, e.g. 'content'.
              */
             $mce_buttons = apply_filters('teeny_mce_buttons', array('bold', 'italic', 'underline', 'blockquote', 'strikethrough', 'bullist', 'numlist', 'alignleft', 'aligncenter', 'alignright', 'undo', 'redo', 'link', 'unlink', 'fullscreen'), $editor_id);
             $mce_buttons_2 = $mce_buttons_3 = $mce_buttons_4 = array();
         } else {
             /**
              * Filter the first-row list of TinyMCE buttons (Visual tab).
              *
              * @since 2.0.0
              *
              * @param array  $buttons   First-row list of buttons.
              * @param string $editor_id Unique editor identifier, e.g. 'content'.
              */
             $mce_buttons = apply_filters('mce_buttons', array('bold', 'italic', 'strikethrough', 'bullist', 'numlist', 'blockquote', 'hr', 'alignleft', 'aligncenter', 'alignright', 'link', 'unlink', 'wp_more', 'spellchecker', 'fullscreen', 'wp_adv'), $editor_id);
             /**
              * Filter the second-row list of TinyMCE buttons (Visual tab).
              *
              * @since 2.0.0
              *
              * @param array  $buttons   Second-row list of buttons.
              * @param string $editor_id Unique editor identifier, e.g. 'content'.
              */
             $mce_buttons_2 = apply_filters('mce_buttons_2', array('formatselect', 'underline', 'alignjustify', 'forecolor', 'pastetext', 'removeformat', 'charmap', 'outdent', 'indent', 'undo', 'redo', 'wp_help'), $editor_id);
             /**
              * Filter the third-row list of TinyMCE buttons (Visual tab).
              *
              * @since 2.0.0
              *
              * @param array  $buttons   Third-row list of buttons.
              * @param string $editor_id Unique editor identifier, e.g. 'content'.
              */
             $mce_buttons_3 = apply_filters('mce_buttons_3', array(), $editor_id);
             /**
              * Filter the fourth-row list of TinyMCE buttons (Visual tab).
              *
              * @since 2.5.0
              *
              * @param array  $buttons   Fourth-row list of buttons.
              * @param string $editor_id Unique editor identifier, e.g. 'content'.
              */
             $mce_buttons_4 = apply_filters('mce_buttons_4', array(), $editor_id);
         }
         $body_class = $editor_id;
         if ($post = get_post()) {
             $body_class .= ' post-type-' . sanitize_html_class($post->post_type) . ' post-status-' . sanitize_html_class($post->post_status);
             if (post_type_supports($post->post_type, 'post-formats')) {
                 $post_format = get_post_format($post);
                 if ($post_format && !is_wp_error($post_format)) {
                     $body_class .= ' post-format-' . sanitize_html_class($post_format);
                 } else {
                     $body_class .= ' post-format-standard';
                 }
             }
         }
         if (!empty($set['tinymce']['body_class'])) {
             $body_class .= ' ' . $set['tinymce']['body_class'];
             unset($set['tinymce']['body_class']);
         }
         if ($set['dfw']) {
             // replace the first 'fullscreen' with 'wp_fullscreen'
             if (($key = array_search('fullscreen', $mce_buttons)) !== false) {
                 $mce_buttons[$key] = 'wp_fullscreen';
             } elseif (($key = array_search('fullscreen', $mce_buttons_2)) !== false) {
                 $mce_buttons_2[$key] = 'wp_fullscreen';
             } elseif (($key = array_search('fullscreen', $mce_buttons_3)) !== false) {
                 $mce_buttons_3[$key] = 'wp_fullscreen';
             } elseif (($key = array_search('fullscreen', $mce_buttons_4)) !== false) {
                 $mce_buttons_4[$key] = 'wp_fullscreen';
             }
         }
         $mceInit = array('selector' => "#{$editor_id}", 'resize' => 'vertical', 'menubar' => false, 'wpautop' => (bool) $set['wpautop'], 'indent' => !$set['wpautop'], 'toolbar1' => implode($mce_buttons, ','), 'toolbar2' => implode($mce_buttons_2, ','), 'toolbar3' => implode($mce_buttons_3, ','), 'toolbar4' => implode($mce_buttons_4, ','), 'tabfocus_elements' => $set['tabfocus_elements'], 'body_class' => $body_class);
         if ($first_run) {
             $mceInit = array_merge(self::$first_init, $mceInit);
         }
         if (is_array($set['tinymce'])) {
             $mceInit = array_merge($mceInit, $set['tinymce']);
         }
         /*
          * For people who really REALLY know what they're doing with TinyMCE
          * You can modify $mceInit to add, remove, change elements of the config
          * before tinyMCE.init. Setting "valid_elements", "invalid_elements"
          * and "extended_valid_elements" can be done through this filter. Best
          * is to use the default cleanup by not specifying valid_elements,
          * as TinyMCE contains full set of XHTML 1.0.
          */
         if ($set['teeny']) {
             /**
              * Filter the teenyMCE config before init.
              *
              * @since 2.7.0
              *
              * @param array  $mceInit   An array with teenyMCE config.
              * @param string $editor_id Unique editor identifier, e.g. 'content'.
              */
             $mceInit = apply_filters('teeny_mce_before_init', $mceInit, $editor_id);
         } else {
             /**
              * Filter the TinyMCE config before init.
              *
              * @since 2.5.0
              *
              * @param array  $mceInit   An array with TinyMCE config.
              * @param string $editor_id Unique editor identifier, e.g. 'content'.
              */
             $mceInit = apply_filters('tiny_mce_before_init', $mceInit, $editor_id);
         }
         if (empty($mceInit['toolbar3']) && !empty($mceInit['toolbar4'])) {
             $mceInit['toolbar3'] = $mceInit['toolbar4'];
             $mceInit['toolbar4'] = '';
         }
         self::$mce_settings[$editor_id] = $mceInit;
     }
     // end if self::$this_tinymce
 }