%PDF- %PDF-
Direktori : /var/www/pn/beta/64801_wp-content/plugins/wysija-newsletters/helpers/ |
Current File : /var/www/pn/beta/64801_wp-content/plugins/wysija-newsletters/helpers/articles.php |
<?php defined('WYSIJA') or die('Restricted access'); class WYSIJA_help_articles extends WYSIJA_object { function __construct(){ parent::__construct(); } function stripShortcodes($content) { if(strlen(trim($content)) === 0) { return ''; } // remove captions $content = preg_replace("/\[caption.*?\](.*<\/a>)(.*?)\[\/caption\]/", '$1', $content); // remove other shortcodes $content = preg_replace('/\[[^\[\]]*\]/', '', $content); return $content; } function convertPostToBlock($post, $params = array()) { // defaults $defaults = array( 'title_tag' => 'h1', 'title_alignment' => 'left', 'title_position' => 'inside', 'image_alignment' => 'left', 'image_width' => 325, 'readmore' => __('Read online.', WYSIJA), 'post_content' => 'full', 'author_show' => 'no', 'author_label' => '', 'category_show' => 'no', 'category_label' => '' ); // merge params with default params $params = array_merge($defaults, $params); if($params['post_content'] === 'full') { $content = $post['post_content']; } else if($params['post_content'] === 'title') { $content = $this->getPostTitle($post, $params); } else { // get excerpt if(!empty($post['post_excerpt'])) { $content = $post['post_excerpt']; } else { // strip shortcodes before getting the excerpt $post['post_content'] = $this->stripShortcodes($post['post_content']); // if excerpt is empty then try to find the "more" tag $excerpts = explode('<!--more-->', $post['post_content']); if(count($excerpts) > 1){ $content = $excerpts[0]; }else{ // finally get a made up excerpt if there is no other choice $helper_toolbox = WYSIJA::get('toolbox', 'helper'); $content = $helper_toolbox->excerpt($post['post_content'], apply_filters('mpoet_excerpt_length', 60)); } } // strip title tags from excerpt $content = preg_replace('/<([\/])?h[123456](.*?)>/', '<$1p$2>', $content); } // convert new lines into <p> $content = wpautop($content); // remove images $content = preg_replace('/<img[^>]+./','', $content); // strip shortcodes $content = $this->stripShortcodes($content); // remove wysija nl shortcode $content= preg_replace('/\<div class="wysija-register">(.*?)\<\/div>/','',$content); // convert embedded content if necessary $content = $this->convertEmbeddedContent($content); // convert h4 h5 h6 to h3 $content = preg_replace('/<([\/])?h[456](.*?)>/', '<$1h3$2>', $content); // convert ol to ul $content = preg_replace('/<([\/])?ol(.*?)>/', '<$1ul$2>', $content); // convert currency signs $content = str_replace(array('$', '€', '£', '¥'), array('$', '€', '£', '¥'), $content); // strip useless tags // TODO should we add table, tr, td and th into that list it could create issues in some cases $tags_not_being_stripped = array('<p>','<em>','<span>','<b>','<strong>','<i>','<h1>','<h2>','<h3>','<a>','<ul>','<ol>','<li>','<br>'); // filter to modify that list $tags_not_being_stripped = apply_filters('mpoet_strip_tags_ignored',$tags_not_being_stripped); $content = strip_tags($content, implode('',$tags_not_being_stripped)); // post meta (author, categories) $post_meta_above = ''; // if the author or categories are displayed, open a new paragraph if($params['author_show'] === 'above' || $params['category_show'] === 'above') { $post_meta_above .= '<p>'; } // author above if($params['author_show'] === 'above') { $post_meta_above .= $this->getPostAuthor($post, $params); } // categories above if($params['category_show'] === 'above') { // if there is an author already, we need to add an extra break if($params['author_show'] === 'above') { $post_meta_above .= '<br />'; } // display post categories $post_meta_above .= $this->getPostCategories($post, $params); } // close the paragraph around author and categories if($params['author_show'] === 'above' || $params['category_show'] === 'above') { $post_meta_above .= '</p>'; } if($params['post_content'] !== 'title') { if($params['title_position'] === 'inside') { // add title $content = $this->getPostTitle($post, $params).$post_meta_above.$content; } else { $content = $post_meta_above.$content; } } else { $content = $post_meta_above.$content; } if($params['post_content'] !== 'title') { // add read online link $content .= '<p><a href="'.get_permalink($post['ID']).'" target="_blank">'.stripslashes($params['readmore']).'</a></p>'; } // post meta (author, categories) below $post_meta_below = ''; // if the author or categories are displayed, open a new paragraph if($params['author_show'] === 'below' || $params['category_show'] === 'below') { $post_meta_below .= '<p>'; } // author below if($params['author_show'] === 'below') { $post_meta_below .= $this->getPostAuthor($post, $params); } // categories below if($params['category_show'] === 'below') { // if there is an author already, we need to add an extra break if($params['author_show'] === 'below') { $post_meta_below .= '<br />'; } $post_meta_below .= $this->getPostCategories($post, $params); } // close the paragraph around author and categories if($params['author_show'] === 'below' || $params['category_show'] === 'below') { $post_meta_below .= '</p>'; } if($post_meta_below !== '') $content .= $post_meta_below; // set image/text alignment based on present data $post_image = null; if(($params['title_tag'] !== 'list') && isset($post['post_image'])) { $post_image = $post['post_image']; // set image alignment to match block's $post_image['alignment'] = $params['image_alignment']; // constrain size depending on alignment if(empty($post_image['height']) or $post_image['height'] === 0) { $post_image = null; } else { $ratio = round(($post_image['width'] / $post_image['height']) * 1000) / 1000; switch($params['image_alignment']) { case 'alternate': case 'left': case 'right': // constrain width to 325px max $post_image['width'] = min($params['image_width'], 325); break; case 'center': // constrain width to 564px max $post_image['width'] = min($params['image_width'], 564); break; } if($ratio > 0) { // if ratio has been calculated, deduce image height $post_image['height'] = (int)($post_image['width'] / $ratio); } else { // otherwise skip the image $post_image = null; } } } $position = 0; if(isset($params['position']) && (int)$params['position'] > 0) { $position = (int)$params['position']; } $block = array( 'position' => $position, 'type' => 'content', 'text' => array( 'value' => base64_encode($content) ), 'image' => $post_image, 'alignment' => $params['image_alignment'] ); return $block; } public function getPostAuthor($post = array(), $params = array()) { $content = ''; if(isset($post['post_author'])) { $author_name = get_the_author_meta('display_name', (int)$post['post_author']); // check if the user specified a label to be displayed before the author's name if(strlen(trim($params['author_label'])) > 0) { $author_name = stripslashes(trim($params['author_label'])).' '.$author_name; } $content .= $author_name; } return $content; } public function getPostCategories($post = array(), $params = array()) { $content = ''; // get categories //$categories = get_the_category($post['ID']); $helper_wp_tools = WYSIJA::get('wp_tools', 'helper'); $categories = $helper_wp_tools->get_post_categories($post); if(empty($categories) === false) { // check if the user specified a label to be displayed before the author's name if(strlen(trim($params['category_label'])) > 0) { $content = stripslashes($params['category_label']).' '; } $content .= join(', ', $categories); } return $content; } public function getPostTitle($post = array(), $params = array()) { $content = ''; if(strlen(trim($post['post_title'])) > 0) { // cleanup post title and convert currency signs $post_title = trim(str_replace(array('$', '€', '£', '¥'), array('$', '€', '£', '¥'), strip_tags($post['post_title']))); // open title tag if($params['title_tag'] === 'list') { $params['title_tag'] = 'li'; } $content .= '<'.$params['title_tag'].' class="align-'.$params['title_alignment'].'">'; // set title link $content .= '<a href="'.get_permalink($post['ID']).'" target="_blank">'; // set title $content .= $post_title; // close title link $content .= '</a>'; // close title tag $content .= '</'.$params['title_tag'].'>'; } return $content; } function getImage($post) { $image_info = null; $post_image = null; // check if has_post_thumbnail function exists, if not, include wordpress class if(!function_exists('has_post_thumbnail')) { require_once(ABSPATH.WPINC.'/post-thumbnail-template.php'); } // check for post thumbnail if(has_post_thumbnail($post['ID'])) { $post_thumbnail = get_post_thumbnail_id($post['ID']); // get attachment data (src, width, height) $image_info = wp_get_attachment_image_src($post_thumbnail, 'wysija-newsletters-max'); // get alt text $altText = trim(strip_tags(get_post_meta($post_thumbnail, '_wp_attachment_image_alt', true))); if(strlen($altText) === 0) { // if the alt text is empty then use the post title $altText = trim(strip_tags($post['post_title'])); } } if($image_info !== null) { $post_image = array( 'src' => $image_info[0], 'width' => $image_info[1], 'height' => $image_info[2], 'alt' => urlencode($altText) ); } else { $matches = $matches2 = array(); $output = preg_match_all('/<img.+src=['."'".'"]([^'."'".'"]+)['."'".'"].*>/i', $post['post_content'], $matches); if(isset($matches[0][0])){ preg_match_all('/(src|height|width|alt)="([^"]*)"/i', $matches[0][0], $matches2); if(isset($matches2[1])){ foreach($matches2[1] as $k2 => $v2) { if(in_array($v2, array('src', 'width', 'height', 'alt'))) { if($post_image === null) $post_image = array(); if($v2 === 'alt') { // special case for alt text as it requireds url encoding $post_image[$v2] = urlencode($matches2[2][$k2]); } else { // otherwise simply get the value $post_image[$v2] = $matches2[2][$k2]; } } } } } } $helper_images = WYSIJA::get('image','helper'); $post_image = $helper_images->valid_image($post_image); if($post_image===null) return $post_image; return array_merge($post_image, array('url' => get_permalink($post['ID']))); } function convertEmbeddedContent($content = '') { // remove embedded video and replace with links $content = preg_replace('#<iframe.*?src=\"(.+?)\".*><\/iframe>#', '<a href="$1">'.__('Click here to view media.', WYSIJA).'</a>', $content); // replace youtube links $content = preg_replace('#http://www.youtube.com/embed/([a-zA-Z0-9_-]*)#Ui', 'http://www.youtube.com/watch?v=$1', $content); return $content; } function field_select_post_type( $params = array() ) { if ( array_key_exists( 'value', $params ) ) { $value = $params['value']; } else { return; } // make sure value is null if it's an empty string if ( $value !== null && strlen( trim( $value ) ) === 0 ){ $value = null; } // get all post types $helper_wp_tools = WYSIJA::get( 'wp_tools', 'helper' ); $post_types = $helper_wp_tools->get_post_types(); // build post type selection $output = '<select name="post_type" data-placeholder="' . esc_attr__( 'Filter by type', WYSIJA ) . '" class="mailpoet-field-select2-simple" data-minimum-results-for-search="-1" style="margin-right: 5px;" width="150" id="post_type">'; $output .= '<option></option>'; // This is require because of Select2 placeholding structure $output .= '<option value="post"' . ( ( $value === 'post' ) ? ' selected="selected"' : '' ) . '>' . __( 'Posts', WYSIJA ) . '</option>'; $output .= '<option value="page"' . ( ( $value === 'page' ) ? ' selected="selected"' : '' ) . '>' . __( 'Pages', WYSIJA ) . '</option>'; foreach ( $post_types as $key => $object_post_type ) { $selected = ($value === $key) ? ' selected="selected"' : ''; $output .= '<option value="'.$key.'"'.$selected.'>'.$object_post_type->labels->name.'</option>'; } $output .= '</select>'; return $output; } function field_select_terms() { return '<input name="post_category" data-placeholder="' . esc_attr__( 'Categories and tags', WYSIJA ) . '" class="mailpoet-field-select2-terms post_category" style="margin-right: 5px; width: 180px" width="180" value="" data-multilple="false" type="hidden">'; } function field_select_status( $current_status = 'publish' ) { $output = ''; $helper_wp_tools = WYSIJA::get( 'wp_tools', 'helper' ); $statuses = $helper_wp_tools->get_post_statuses(); $output .= '<select data-placeholder="' . esc_attr__( 'Filter by status', WYSIJA ) . '" class="mailpoet-field-select2-simple post_status" data-minimum-results-for-search="-1" id="post_status" name="post_status" width="150">'; $output .= '<option></option>'; // This is require because of Select2 placeholding structure foreach ( $statuses as $key => $label ) { $is_selected = ( $current_status === $key ) ? 'selected="selected"' : ''; $output .= '<option value="' . $key . '" ' . $is_selected . '>' . $label . '</option>'; } $output .= '</select>'; return $output; } }