diff -r d255fe9cd479 -r 00ac8f60d73f wp/wp-content/plugins/page-columnist/page-columnist.php --- a/wp/wp-content/plugins/page-columnist/page-columnist.php Tue Oct 15 15:48:13 2019 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,830 +0,0 @@ -_get_version_errors(); - if (is_array($version_error) && count($version_error) != 0) { - $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", 'active_plugins' ) ); - if ( is_object( $row ) ) { - $current = maybe_unserialize( $row->option_value ); - if (array_search($page_columnist_plug->basename, $current) !== false) { - array_splice($current, array_search($page_columnist_plug->basename, $current), 1 ); - update_option('active_plugins', $current); - } - } - exit(); - } - } - if (!get_option('cspc_page_columnist')) - update_option('cspc_page_columnist', get_option('cspc_page_columnist', $page_columnist_plug->defaults)); -} -function cspc_on_deactivate_plugin() { - //currently empty -} -register_activation_hook(plugin_basename(__FILE__), 'cspc_on_activate_plugin'); -register_deactivation_hook(plugin_basename(__FILE__), 'cspc_on_deactivate_plugin'); - - -class Page_columnist_page_transition { - - function Page_columnist_page_transition(&$plugin, $page_id = false) { - $this->plugin = $plugin; //reference to owner plugin - $this->transition = $this->plugin->page_default_trans; - $this->data = array(); - $this->data_keys = array('spacing', 'columns', 'overflow', 'multiposts'); - $this->padding = ''.__('* content missing', $this->plugin->textdomain).''; - if ($page_id) $this->load($page_id); - else $this->page_id = 0; - } - - function load($page_id) { - $this->page_id = ($page_id ? $page_id : 0); - $this->transition = $this->plugin->page_default_trans; - $this->data = array(); - $res = explode('|', get_post_meta($this->page_id, '_cspc-page-transitions', true)); - $num = count($res); - if ($num > 0) { - if (in_array($res[0], array_keys($this->plugin->page_transitions))) { - $this->transition = $res[0]; - if ($num > 1) { - $this->data = unserialize($res[1]); - } - } - } - } - - function save() { - if ($this->page_id > 0) { - $value = $this->transition.'|'.serialize($this->data); - update_post_meta($this->page_id, '_cspc-page-transitions', $value); - } - } - - function update_and_save() { - if (isset($_POST['cspc-page-transition']) && in_array($_POST['cspc-page-transition'], array_keys($this->plugin->page_transitions))) { - $this->transition = $_POST['cspc-page-transition']; - } - if (isset($_POST['cspc-count-columns'])) { - $this->data['columns'] = (int)$_POST['cspc-count-columns']; - } - if (isset($_POST['cspc-overflow-paging'])) { - $this->data['overflow'] = $_POST['cspc-overflow-paging']; - if($this->data['overflow'] != 'hidden' && $this->data['overflow'] != 'virtual') { - $this->data['overflow'] = 'hidden'; - } - } - if (isset($_POST['cspc-multiposts-paging']) && in_array($_POST['cspc-multiposts-paging'], $this->plugin->multiposts_style)) { - $this->data['multiposts'] = $_POST['cspc-multiposts-paging']; - } - if (!isset($this->data['distribution']) || !is_array($this->data['distribution'])) $this->data['distribution'] = array(); - $this->save(); - } - - - function spacing() { - return (isset($this->data['spacing']) ? (float)$this->data['spacing'] : (float)$this->plugin->options->spacing); - } - - function columns() { - return (isset($this->data['columns']) ? (int)$this->data['columns'] : 2); - } - - function overflow() { - return (isset($this->data['overflow']) ? $this->data['overflow'] : 'hidden'); - } - - function multiposts() { - return (isset($this->data['multiposts']) ? $this->data['multiposts'] : 'same'); - } - - function execute(&$pages) { - return call_user_func(array(&$this, '_exec_'.str_replace('-','_',$this->transition)), $pages); - } - - function _padding_pages($needed, &$pages) { - $res = array(); - while(count($pages) % $needed != 0) $pages[] = $this->padding; //padding count of sub pages - if ($this->overflow() == 'hidden') { - $res[] = array_slice($pages, 0, $needed); - }else{ - $res = array_chunk($pages, $needed); - } - return $res; - } - - function _get_distribution($num, $remaining) { - $res = array(); - if (!is_array($this->data['distribution']) || !isset($this->data['distribution'][$num])) { - $perc = $remaining / $num; - for ($i=0; $i<$num; $i++) $res[] = $perc; - } - else{ - $sum = 0.0; - for ($i=0; $i<$num; $i++) $sum += (float)$this->data['distribution'][$num][$i]; - for ($i=0; $i<$num; $i++) { - $res[]= ($remaining * ((float)$this->data['distribution'][$num][$i] / $sum)); - } - } - return $res; - } - - function _columnize_pages($num, $pages) { - $res = ''; - $base = 100.0; - $spacing = $this->spacing(); - $remaining = ($base - ($num - 1) * $spacing); - $dist = $this->_get_distribution($num, $remaining); - $lorr = 'left'; - global $wp_locale; - if ($wp_locale->text_direction == 'rtl') { - $lorr = 'right'; //make it work at RTL languages - } - for ($i=0; $i<$num; $i++) { - $page = $pages[$i]; - $perc = $dist[$i]; - if ($this->plugin->is_MSIE()) { - //IE is not able to calculate column sizes well, several 100% sums leads to get the last column display wrapped under the first - //in several cases (mostly where a periodic fraction of 1/3 or 1/6 occures) , IE seems to reach by internal rounding errors more than 100% of available width - $margin_left_i = ($i==0 ? 0 : $spacing * 0.66); - } - else{ - $margin_left_i = ($i==0 ? 0 : $spacing); - } - $extend = $this->plugin->is_page_preview() ? ' data="'.$perc.'"' : ''; - $res .= "
"; - if (has_filter('the_content', 'wpautop') && !preg_match('/^\s*
\s*$/', $page)) $res .= '

'; - $res .= '
'; - } - return $res; - } - - function _columnize_fullsize($page, $clearleft = false) { - if (empty($page)) return ''; - $res = ($clearleft ? ''; - $out[] = $res; - } - return $out; - } - - function _exec_cspc_trans_footer(&$pages) { - $work = $this->_padding_pages($this->columns() + 1, $pages); - $out = array(); - for ($i=0; $i 0 ? array_slice($work[$i],0,$num) : array()); - $res = "
transition-wrap\" class=\"cspc-wrapper\">"; - $res .= '
'; - $res .= $this->_columnize_pages($num, $work[$i]); - $res .= '
'; - $res .= $this->_columnize_fullsize($last, true); - $res .= '
'; - $out[] = $res; - } - return $out; - } - - function _exec_cspc_trans_interior(&$pages) { - $work = $this->_padding_pages($this->columns() + 2, $pages); - $out = array(); - for ($i=0; $i 0 ? end($work[$i]) : ''); - $work[$i] = ($num > 0 ? array_slice($work[$i],0,$num) : array()); - $res = "
transition-wrap\" class=\"cspc-wrapper\">"; - $res .= $this->_columnize_fullsize($top); - $res .= '
'; - $res .= $this->_columnize_pages($num, $work[$i]); - $res .= '
'; - $res .= $this->_columnize_fullsize($last, true); - $res .= '
'; - $out[] = $res; - } - return $out; - } -} - - -//page_columnist Plugin class -class Plugin_page_columnist { - - //initializes the whole plugin and enables the activation/deactivation handling - function Plugin_page_columnist() { - global $wp_version; - - $this->l10n_ready = false; - - //own plugin data - $this->basename = plugin_basename(__FILE__); - $this->url = WP_PLUGIN_URL.'/'.dirname($this->basename); - $this->textdomain = basename($this->basename); - $this->textdomain = substr($this->textdomain, 0, strrpos($this->textdomain, '.')); - $this->versions = new stdClass; - $this->versions->required = array( 'php' => '4.4.2', 'wp' => '2.7'); - $this->versions->found = array( 'php' => phpversion(), 'wp' => $wp_version); - $this->versions->above_27 = !version_compare($this->versions->found['wp'], '2.8alpha', '<'); - $this->do_resample_page = false; - $this->multiposts_style = array('flat', 'same', 'wp'); - - $this->page_default_trans = 'cspc-trans-wordpress'; - - $this->defaults = new stdClass; - $this->defaults->spacing = 3.0; - $this->defaults->preview_assistent = false; - - $this->options = get_option('cspc_page_columnist', $this->defaults); - $stored = get_object_vars($this->options); - $defaults = get_object_vars($this->defaults); - foreach($defaults as $key => $value) { - if (!isset($stored[$key])) $this->options->$key = $value; - } - - add_action('init', array(&$this, 'on_init')); - add_action('admin_init', array(&$this, 'on_admin_init')); - add_action('wp_head', array(&$this, 'on_wp_head')); - add_action('wp_footer', array(&$this, 'on_wp_footer')); - add_action('admin_head', array(&$this, 'on_admin_head')); - add_action('edit_page_form', array(&$this, 'on_extend_html_editor')); - add_action('edit_form_advanced', array(&$this, 'on_extend_html_editor')); - add_action('manage_pages_custom_column', array(&$this, 'on_manage_custom_column'), 10, 2); - add_action('manage_posts_custom_column', array(&$this, 'on_manage_custom_column'), 10, 2); - add_action('wp_insert_post', array(&$this, 'on_wp_insert_post'), 10, 2); - add_action('loop_start', array(&$this, 'on_loop_start'), 0 ); - add_action('the_post', array(&$this, 'on_the_post'), 0 ); - add_action('template_redirect', array(&$this, 'on_template_redirect')); - add_filter('mce_buttons', array(&$this, 'on_filter_mce_buttons')); - - $this->_display_version_errors(); - - //TODO: future development should be able to deal with removing the ugly wpautop algorithm - //remove_filter('the_content', 'wpautop'); - } - - function _get_version_errors() { - $res = array(); - foreach($this->versions->required as $key => $value) { - if (!version_compare($this->versions->found[$key], $value, '>=')) { - $res[strtoupper($key).' Version'] = array('required' => $value, 'found' => $this->versions->found[$key]); - } - } - return $res; - } - - function _display_version_errors() { - if (isset($_GET['action']) && isset($_GET['plugin']) && ($_GET['action'] == 'error_scrape') && ($_GET['plugin'] == $this->basename )) { - $this->setup_translation(); - $version_error = $this->_get_version_errors(); - if (count($version_error) != 0) { - echo ""; - echo ""; - foreach($version_error as $key => $value) { - echo ""; - } - echo "
".__('Plugin can not be activated.', $this->textdomain)." | ".__('required', $this->textdomain)." | ".__('actual', $this->textdomain)."
$key >= ".$value['required']."".$value['found']."
"; - } - } - } - - //load and setup the necessary translation files - function setup_translation() { - if (!$this->l10n_ready) { - $abs_rel_path = str_replace(ABSPATH, '', WP_PLUGIN_DIR.'/'.dirname($this->basename)); - $plugin_rel_path = dirname($this->basename); - load_plugin_textdomain($this->textdomain, $abs_rel_path, $plugin_rel_path); - $this->l10n_ready = true; - } - } - - //is the browser of current user IE ? - function is_MSIE() { - return preg_match('/msie/i', $_SERVER['HTTP_USER_AGENT']) && !preg_match('/opera/i', $_SERVER['HTTP_USER_AGENT']); - } - - //do we show a frontend page in preview mode ? - function is_page_preview() { - $id = (isset($_GET['preview_id']) ? (int)$_GET['preview_id'] : 0); - if ($id == 0 && isset($_GET['post_id'])) $id = (int)$_GET['post_id']; - if ($id == 0 && isset($_GET['page_id'])) $id = (int)$_GET['page_id']; - if ($id == 0 && isset($_GET['p'])) $id = (int)$_GET['p']; - $preview = (isset($_GET['preview']) ? $_GET['preview'] : ''); - if ($id > 0 && $preview == 'true' && $this->options->preview_assistent) { - global $wpdb; - $type = $wpdb->get_results("SELECT post_type FROM $wpdb->posts WHERE ID=$id"); - if (count($type) && ($type[0]->post_type == 'page' || $type[0]->post_type == 'post')){ - switch($type[0]->post_type) { - case 'post': - return current_user_can('edit_post', $id); - break; - case 'page': - return current_user_can('edit_page', $id); - break; - default: - return false; - break; - } - } - } - return false; - } - - //detects if we a currently render the posts or pages edit overview table page - function is_page_overview() { - global $pagenow; - return (is_admin() && ($pagenow == 'edit-pages.php' || $pagenow == 'edit.php')); - } - - //detects if we a currently render the posts or pages editor page - function is_page_editor() { - global $pagenow; - return (is_admin() && ( - ($pagenow == 'page.php') || ($pagenow == 'page-new.php') - || - ($pagenow == 'post.php') || ($pagenow == 'post-new.php') - ) - ); - } - - //gets called by WordPress action "init" after WordPress core is up and running - function on_init() { - //ensures the correct matching translation file gets loaded - $this->setup_translation(); - - $this->page_transitions = array( - 'cspc-trans-wordpress' => array('img-pos' => 0, 'text' => __('WordPress - Next Page (default)', $this->textdomain), 'default' => true), - 'cspc-trans-ordinary' => array('img-pos' => -16, 'text' => __('Ordinary Plain Page', $this->textdomain)), - 'cspc-trans-columns' => array('img-pos' => -32, 'text' => __('Every Sub Page as Column', $this->textdomain)), - 'cspc-trans-header' => array('img-pos' => -48, 'text' => __('First Sub Page as Header', $this->textdomain)), - 'cspc-trans-footer' => array('img-pos' => -64, 'text' => __('Last Sub Page as Footer', $this->textdomain)), - 'cspc-trans-interior' => array('img-pos' => -80, 'text' => __('Interior as Columns', $this->textdomain)), - ); - - if ($this->is_page_preview() && !defined('DOING_AJAX')) { - wp_enqueue_script('jquery-spin', $this->url.'/jquery.spin.js', array('jquery')); - wp_enqueue_script('cspc_page_columnist_assistance', $this->url.'/page-columnist-assistance.js', array('jquery', 'jquery-ui-draggable', 'jquery-spin')); - wp_enqueue_style('cspc_page_columnist_assistance', $this->url.'/page-columnist-assistance.css'); - } - - if(defined('DOING_AJAX')) { - add_action('wp_ajax_cspc_save_changes', array(&$this, 'on_ajax_save_changes')); - } - } - - //gets called by WordPress action "admin_init" to be able to setup correctly in backend mode - function on_admin_init() { - - if ($this->is_page_overview()) { - add_filter('manage_edit-pages_columns', array(&$this,'on_filter_manage_columns')); - add_filter('manage_posts_columns', array(&$this,'on_filter_manage_columns')); - } - - if ($this->is_page_editor()) { - add_meta_box('cspc-page-transitions', __('Page Columnist', $this->textdomain) , array(&$this, 'on_print_metabox_content_cspc_page_transitions'), 'page', 'side', 'core'); - add_meta_box('cspc-page-transitions', __('Page Columnist', $this->textdomain) , array(&$this, 'on_print_metabox_content_cspc_page_transitions'), 'post', 'side', 'core'); - wp_enqueue_script('jquery-spin', $this->url.'/jquery.spin.js', array('jquery')); - } - } - - //gets called by action "wp_head" to configure the preview assistance - function on_wp_head() { - if ($this->is_page_preview()) { - $id = (isset($_GET['preview_id']) ? (int)$_GET['preview_id'] : 0); - if ($id == 0 && isset($_GET['post_id'])) $id = (int)$_GET['post_id']; - if ($id == 0 && isset($_GET['page_id'])) $id = (int)$_GET['page_id']; - if ($id == 0 && isset($_GET['p'])) $id = (int)$_GET['p']; - $pt = new Page_columnist_page_transition($this, $id); - ?> - - is_page_preview()) { - $id = (isset($_GET['preview_id']) ? (int)$_GET['preview_id'] : 0); - if ($id == 0 && isset($_GET['post_id'])) $id = (int)$_GET['post_id']; - if ($id == 0 && isset($_GET['page_id'])) $id = (int)$_GET['page_id']; - if ($id == 0 && isset($_GET['p'])) $id = (int)$_GET['p']; - $pt = new Page_columnist_page_transition($this, $id); - ?> -
-
- -
- -
-
- - -   - -   - textdomain); ?> -
-
-
-
textdomain); ?>
-
- is_page_overview() || $this->is_page_editor()) : ?> - - is_page_editor()) : ?> - - - is_page_editor()) { - if (!in_array('wp_page', $buttons)) { - if (!in_array('wp_more', $buttons)) { - $last = array_pop($buttons); - $buttons[] = "wp_page"; - $buttons[] = $last; - }else{ - $txt = implode('|', $buttons); - $txt = str_replace('wp_more|','wp_more|wp_page|', $txt); - $buttons = explode('|', $txt); - } - } - } - return $buttons; - } - - //insert nextpage button to HTML editor, if not already present there - function on_extend_html_editor() { - if ($this->is_page_editor()) : ?> - - textdomain); - return $columns; - } - - //add content to the new edit posts / pages overview column - function on_manage_custom_column($column_name, $id) { - if ($column_name == 'cspc-page-transition-col') { - $pt = new Page_columnist_page_transition($this, $id); - if ($pt->transition != 'cspc-trans-wordpress' && $pt->transition != 'cspc-trans-ordinary') { - echo "
transition\">  (".$pt->columns().")
"; - } - else{ - echo "
transition\">  (-)
"; - } - } - } - - //save the page transition mode setting of page/post, if something has been saved - function on_wp_insert_post($post_ID, $post) { - $my_id = ((isset($_POST['wp-preview']) && $_POST['wp-preview'] == 'dopreview') ? $_POST['post_ID'] : $post_ID); - $my_type = ((isset($_POST['wp-preview']) && $_POST['wp-preview'] == 'dopreview') ? $_POST['post_type'] : $post->post_type); - - switch($my_type) { - case 'post': - if(!current_user_can('edit_post', $my_id)) return; - break; - case 'page': - if (!current_user_can('edit_page', $my_id)) return; - break; - default: - return; - break; - } - - if (($my_type == 'page') || ($my_type == 'post')) { - - $pt = new Page_columnist_page_transition($this, $my_id); - $pt->update_and_save(); - - $this->options->preview_assistent = (isset($_POST['cspc-preview-assistent']) ? (bool)$_POST['cspc-preview-assistent'] : $this->defaults->preview_assistent); - $this->options->spacing = (isset($_POST['cspc-default-column-spacing']) ? (float)$_POST['cspc-default-column-spacing'] : $this->defaults->spacing); - update_option('cspc_page_columnist', $this->options); - } - } - - //save the changes the user made at preview assistent - function on_ajax_save_changes() { - $page_id = (int)$_POST['page_id']; - $spacing = (float)$_POST['spacing']; - $default_spacing = ($_POST['default_spacing'] == 'true' ? true : false); - - global $wpdb; - $type = $wpdb->get_results("SELECT post_type FROM $wpdb->posts WHERE ID=$page_id"); - if (count($type) && ($type[0]->post_type == 'page' || $type[0]->post_type == 'post')){ - $checked = false; - switch($type[0]->post_type) { - case 'post': - $checked = current_user_can('edit_post', $page_id); - break; - case 'page': - $checked = current_user_can('edit_page', $page_id); - break; - default: - $checked = false; - break; - } - if ($checked) { - $pt = new Page_columnist_page_transition($this, $page_id); - $pt->data['spacing'] = $spacing; - if (!is_array($pt->data['distribution'])) $pt->data['distribution'] = array(); - $pt->data['distribution'][$pt->columns()] = explode('|',$_POST['distribution']); - $pt->save(); - if ($default_spacing) { - $this->options->spacing = $spacing; - update_option('cspc_page_columnist', $this->options); - } - exit(); - } - } - header('Status: 404 Not Found'); - header('HTTP/1.1 404 Not Found'); - _e('You do not have the permission to edit this page.', $this->textdomain); - exit(); - } - - - //ouput the content of new one sidebar box at page/post editing - function on_print_metabox_content_cspc_page_transitions($data) { - $pt = new Page_columnist_page_transition($this, $data->ID); ?> -
- - - - -
  -
-
-
- - page_transitions as $type => $val) : ?> - - - -
- transition) echo 'checked="checked"'; ?>/> - - -
-
- - - - - - - - - - - - versions->above_27) : ?> - - - - -
textdomain); ?>spacing(); ?> %
textdomain); ?> - - columns() == $i) echo 'checked="checked" '; ?>> - -
textdomain); ?> - overflow() == 'hidden') echo 'checked="checked"'; ?> autocomplete="off">textdomain); ?>
- overflow() == 'virtual') echo 'checked="checked"'; ?> autocomplete="off"/>textdomain); ?> -
-
textdomain); ?> - multiposts() == 'same') echo 'checked="checked"'; ?> autocomplete="off">textdomain); ?>
- multiposts() == 'wp') echo 'checked="checked"'; ?> autocomplete="off"/>textdomain); ?>
- multiposts() == 'flat') echo 'checked="checked"'; ?> autocomplete="off"/>textdomain); ?> -
-
-
- - - - - -
options->preview_assistent) echo 'checked="checked"'; ?>/>
-
- ID); - //user can change overview pages to support also columnization, default is off - if (!is_single()) { - switch($pt->multiposts()) { - case 'wp': - $pt->transition = $this->page_default_trans; - break; - case 'flat': - $pt->transition = 'cspc-trans-ordinary'; - break; - } - } - if($pt->transition == $this->page_default_trans) return; - $pages = $pt->execute($pages); - - if (count($pages) > 1) { - $multipage = 1; - $numpages = count($pages); - } - else{ - $multipage = 0; - $numpages = 1; - } - -/* - //TODO: future versions should check ugly invalid

based at shortcode api if possible - if (has_filter('the_content', 'wpautop')) { - preg_match('/'.get_shortcode_regex().'(\s\s|)/', $pages[0],$hits); - var_dump($hits); - } -*/ - } - - //beginning WP 2.8 the order of how hooks been called have been change - //that's why the handling of resampling the page if different for 2.7 and 2.8, this have to be respected - function on_the_post() { - if ($this->versions->above_27) { - $this->resample_page_content(); - } - } - - //beginning WP 2.8 the order of how hooks been called have been change - //that's why the handling of resampling the page if different for 2.7 and 2.8, this have to be respected - function on_loop_start() { - if ($this->versions->above_27 == false) { - if (is_page() || is_single()) { - $this->resample_page_content(); - } - } - } - - //if we are in none standard page mode, ensure a redirect to main page slug, if sub-page has been requested directly and doesn't support virtual paging - function on_template_redirect(){ - global $post, $page; - if ($post->post_type == 'page' || $post->post_type == 'post') { - $pt = new Page_columnist_page_transition($this, $post->ID); - if (($pt->transition != $this->page_default_trans) && $page && $pt->overflow() == 'hidden') { - wp_redirect(get_permalink($post->ID)); - exit(); - } - } - } - -} - -//nothing more remains to do as to create an instance of the plugin itself :-) -global $page_columnist_plug; -$page_columnist_plug = new Plugin_page_columnist(); - -}// if !function_exists('cspc_on_activate_plugin')) { -?> \ No newline at end of file