File "PostsPosts.php"
Full Path: /home2/sdektunc/cepali.edu.mx/wp-content/plugins/smart-slider-3/Nextend/SmartSlider3/Generator/WordPress/Posts/Sources/PostsPosts.php
File size: 17.46 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Nextend\SmartSlider3\Generator\WordPress\Posts\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\Translation\Translation;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Generator\WordPress\Posts\Elements\PostsCategories;
use Nextend\SmartSlider3\Generator\WordPress\Posts\Elements\PostsTags;
use Nextend\SmartSlider3\Generator\WordPress\Posts\Elements\PostsTaxonomies;
use Nextend\SmartSlider3\Generator\WordPress\Posts\GeneratorGroupPosts;
class PostsPosts extends AbstractGenerator {
protected $layout = 'article';
protected $postType = 'post';
public function getDescription() {
return n2_('Creates slides from your posts in the selected categories.');
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container, 'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new PostsCategories($filter, 'postscategory', n2_('Categories'), 0);
new PostsTags($filter, 'posttags', n2_('Tags'), 0);
new PostsTaxonomies($filter, 'postcustomtaxonomy', n2_('Taxonomies'), 0, array(
'postType' => 'post',
'skip' => true
));
$posts = $filterGroup->createRow('posts');
new Filter($posts, 'poststicky', n2_('Sticky'), 0);
new OnOff($posts, 'postshortcode', n2_('Remove shortcodes'), 1, array(
'relatedFieldsOn' => array(
'generatorpostshortcodevariables'
),
'tipLabel' => n2_('Remove shortcodes'),
'tipDescription' => n2_('You can remove shortcodes from variables to avoid 3rd party content rendering in your slider.')
));
new Text($posts, 'postshortcodevariables', n2_('Remove from variables'), 'description, content, excerpt', array(
'tipLabel' => n2_('Remove from variables'),
'tipDescription' => n2_('Write the name of the variables you want to remove the shortcodes from. Separate new variables with a comma and space. E.g. description, content')
));
$date = $filterGroup->createRow('date');
new Textarea($date, 'customdates', n2_('Custom date variables'), "variable||PHP date format\nmodified||Ymd\ndate||F j, Y, g:i a\nstarted||F\nended||D", array(
'tipLabel' => n2_('Custom date variables'),
'tipDescription' => sprintf(n2_('You can create custom date variables from your existing date variables. Write each variable to a new line and use the following format: variable||format. %3$s The "variable" should be an existing variable. Based on this existing variable, we create a new one with the "_datetime" suffix. (E.g. date_datetime.) %3$s The "format" can be any %1$sPHP date format%2$s.'), '<a href="http://php.net/manual/en/function.date.php" target="_blank">', '</a>', '<br>'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/1891-wordpress---posts-generator',
'width' => 300,
'height' => 100
));
new Textarea($date, 'translatecustomdates', n2_('Translate custom dates'), "from||to\nMonday||Monday\njan||jan", array(
'tipLabel' => n2_('Translate custom dates'),
'tipDescription' => sprintf(n2_('You can translate the content of the newly created variables. %1$s Use the following format: from||to. Eg.: Monday||Montag'), '<br>'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/1891-wordpress---posts-generator',
'width' => 300,
'height' => 100
));
new Select($date, 'datefunction', n2_('Date function'), 'date_i18n', array(
'tipLabel' => n2_('Date function'),
'tipDescription' => n2_('This function will be used to format these custom date variables. Usually the date_i18n works, but if your date will be off a little bit, then try out the other one.'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/1891-wordpress---posts-generator',
'options' => array(
'date_i18n' => 'date_i18n',
'date' => 'date'
)
));
$orderGroup = new ContainerTable($container, 'order-group', n2_('Order'));
$order = $orderGroup->createRow('order');
new GeneratorOrder($order, 'postscategoryorder', 'post_date|*|desc', array(
'options' => array(
'none' => n2_('None'),
'post_date' => n2_('Post date'),
'ID' => 'ID',
'title' => n2_('Title'),
'post_modified' => n2_('Modification date'),
'rand' => n2_('Random'),
'comment_count' => n2_('Comment count'),
'menu_order' => n2_('Menu order')
)
));
}
private function translate($from, $translate) {
if (!empty($translate) && !empty($from)) {
foreach ($translate as $key => $value) {
$from = str_replace($key, $value, $from);
}
}
return $from;
}
private function linesToArray($lines) {
$value = preg_split('/$\R?^/m', $lines);
$data = array();
if (!empty($value)) {
foreach ($value as $v) {
$array = explode('||', $v);
if (!empty($array) && count($array) == 2) {
$data[$array[0]] = trim($array[1]);
}
}
}
return $data;
}
private function isTimeStamp($timestamp) {
return ((string)(int)$timestamp === $timestamp) && ($timestamp <= PHP_INT_MAX) && ($timestamp >= ~PHP_INT_MAX);
}
public function getPostType() {
return $this->postType;
}
public function filterName($name) {
return $name . Translation::getCurrentLocale();
}
function get_string_between($str, $startDelimiter, $endDelimiter) {
$contents = array();
$startDelimiterLength = strlen($startDelimiter);
$endDelimiterLength = strlen($endDelimiter);
$startFrom = $contentStart = $contentEnd = 0;
while (false !== ($contentStart = strpos($str, $startDelimiter, $startFrom))) {
$contentStart += $startDelimiterLength;
$contentEnd = strpos($str, $endDelimiter, $contentStart);
if (false === $contentEnd) {
break;
}
$contents[] = substr($str, $contentStart, $contentEnd - $contentStart);
$startFrom = $contentEnd + $endDelimiterLength;
}
return $contents;
}
protected function _getData($count, $startIndex) {
global $post, $wp_query;
$tmpPost = $post;
list($orderBy, $order) = Common::parse($this->data->get('postscategoryorder', 'post_date|*|desc'));
$allTags = $this->data->get('posttags', '');
$tax_query = '';
if (!empty($allTags)) {
$tags = explode('||', $allTags);
if (!in_array('0', $tags)) {
$tax_query = array(
array(
'taxonomy' => 'post_tag',
'terms' => $tags,
'field' => 'id'
)
);
}
}
$allTerms = $this->data->get('postcustomtaxonomy', '');
if (!empty($allTerms)) {
$terms = explode('||', $allTerms);
if (!in_array('0', $terms)) {
$termarray = array();
foreach ($terms as $key => $value) {
$term = explode("_x_", $value);
if (array_key_exists($term[0], $termarray)) {
$termarray[$term[0]][] = $term[1];
} else {
$termarray[$term[0]] = array();
$termarray[$term[0]][] = $term[1];
}
}
$term_helper = array();
foreach ($termarray as $taxonomy => $termids) {
$term_helper[] = array(
'taxonomy' => $taxonomy,
'terms' => $termids,
'field' => 'id'
);
}
if (!empty($tax_query)) {
array_unshift($tax_query, array('relation' => 'AND'));
} else {
$tax_query = array('relation' => 'AND');
}
$tax_query = array_merge($tax_query, $term_helper);
}
}
$postsFilter = array(
'include' => '',
'exclude' => '',
'meta_key' => '',
'meta_value' => '',
'post_type' => 'post',
'post_mime_type' => '',
'post_parent' => '',
'post_status' => 'publish',
'suppress_filters' => false,
'offset' => $startIndex,
'posts_per_page' => $count,
'tax_query' => $tax_query
);
if ($orderBy != 'none') {
$postsFilter += array(
'orderby' => $orderBy,
'order' => $order,
'ignore_custom_sort' => true
);
}
$categories = (array)Common::parse($this->data->get('postscategory'));
if (!in_array(0, $categories)) {
$postsFilter['category'] = implode(',', $categories);
}
$poststicky = $this->data->get('poststicky');
switch ($poststicky) {
case 1:
$postsFilter += array(
'post__in' => get_option('sticky_posts')
);
break;
case -1:
$postsFilter += array(
'post__not_in' => get_option('sticky_posts')
);
break;
}
if (has_filter('the_content', 'siteorigin_panels_filter_content')) {
$siteorigin_panels_filter_content = true;
remove_filter('the_content', 'siteorigin_panels_filter_content');
} else {
$siteorigin_panels_filter_content = false;
}
$posts = get_posts($postsFilter);
$custom_dates = $this->linesToArray($this->data->get('customdates', ''));
$translate = $this->linesToArray($this->data->get('translatecustomdates', ''));
$date_function = $this->data->get('datefunction', 'date_i18n');
if ($this->data->get('postshortcode', 1)) {
$remove_shortcode = array_map('trim', explode(',', $this->data->get('postshortcodevariables', 'description, content, excerpt')));
} else {
$remove_shortcode = null;
}
$data = array();
for ($i = 0; $i < count($posts); $i++) {
$record = array();
$post = $posts[$i];
setup_postdata($post);
$wp_query->post = $post;
$record['id'] = $post->ID;
$record['url'] = get_permalink();
$record['title'] = apply_filters('the_title', get_the_title(), $post->ID);
$record['content'] = get_the_content();
$record['description'] = $record['content'];
if (class_exists('ET_Builder_Plugin')) {
if (strpos($record['description'], 'et_pb_slide background_image') !== false) {
$et_slides = $this->get_string_between($record['description'], 'et_pb_slide background_image="', '"');
for ($j = 0; $j < count($et_slides); $j++) {
$record['et_slide' . $j] = $et_slides[$j];
}
}
if (strpos($record['description'], 'background_url') !== false) {
$et_backgrounds = $this->get_string_between($record['description'], 'background_url="', '"');
for ($j = 0; $j < count($et_backgrounds); $j++) {
$record['et_background' . $j] = $et_backgrounds[$j];
}
}
if (strpos($record['description'], 'logo_image_url') !== false) {
$et_logoImages = $this->get_string_between($record['description'], 'logo_image_url="', '"');
for ($j = 0; $j < count($et_logoImages); $j++) {
$record['et_logoImage' . $j] = $et_logoImages[$j];
}
}
if (strpos($record['description'], 'slider-content') !== false) {
$et_contents = $this->get_string_between($record['description'], 'slider-content">', '</p>');
for ($j = 0; $j < count($et_contents); $j++) {
$record['et_content' . $j] = $et_contents[$j];
}
}
}
$record['slug'] = $post->post_name;
$record['author_name'] = $record['author'] = get_the_author();
$userID = get_the_author_meta('ID');
$record['author_url'] = get_author_posts_url($userID);
$record['author_avatar'] = get_avatar_url($userID);
$record['date'] = get_the_date('Y-m-d H:i:s');
$record['modified'] = get_the_modified_date('Y-m-d H:i:s');
$record = array_merge($record, GeneratorGroupPosts::getCategoryData($post->ID));
$thumbnail_id = get_post_thumbnail_id($post->ID);
$record['featured_image'] = wp_get_attachment_image_url($thumbnail_id, 'full');
if (!$record['featured_image']) {
$record['featured_image'] = '';
} else {
$thumbnail_meta = get_post_meta($thumbnail_id, '_wp_attachment_metadata', true);
if (isset($thumbnail_meta['sizes'])) {
$sizes = GeneratorGroupPosts::getImageSizes($thumbnail_id, $thumbnail_meta['sizes']);
$record = array_merge($record, $sizes);
}
$record['alt'] = '';
$alt = get_post_meta($thumbnail_id, '_wp_attachment_image_alt', true);
if (isset($alt)) {
$record['alt'] = $alt;
}
}
$record['thumbnail'] = $record['image'] = $record['featured_image'];
$record['url_label'] = 'View post';
$tags = wp_get_post_tags($post->ID);
for ($j = 0; $j < count($tags); $j++) {
$record['tag_' . ($j + 1)] = $tags[$j]->name;
}
$record = array_merge($record, GeneratorGroupPosts::getACFData($post->ID));
$record = array_merge($record, GeneratorGroupPosts::extractPostMeta(get_post_meta($post->ID)));
if (isset($record['primarytermcategory'])) {
$primary = get_category($record['primarytermcategory']);
$record['primary_category_name'] = $primary->name;
$record['primary_category_link'] = get_category_link($primary->cat_ID);
}
$record['excerpt'] = get_the_excerpt();
$record['comment_count'] = $post->comment_count;
$record['guid'] = $post->guid;
if (!empty($custom_dates)) {
foreach ($custom_dates as $custom_date_key => $custom_date_format) {
if (array_key_exists($custom_date_key, $record)) {
if ($this->isTimeStamp($record[$custom_date_key])) {
$date = $record[$custom_date_key];
} else {
$date = strtotime($record[$custom_date_key]);
}
if ($date_function == 'date_i18n') {
$record[$custom_date_key . '_datetime'] = $this->translate(date_i18n($custom_date_format, $date), $translate);
} else {
$record[$custom_date_key . '_datetime'] = $this->translate(date($custom_date_format, $date), $translate);
}
}
}
}
/**
* We used 'Y-m-d H:i:s' date format, so we can get the hour, minute and second for custom date variables.
* but we need to set the date and modified variables back to the WordPress default date_format.
*/
$record['date'] = get_the_date();
$record['modified'] = get_the_modified_date();
if (!empty($remove_shortcode)) {
foreach ($remove_shortcode as $variable) {
if (isset($record[$variable])) {
$record[$variable] = GeneratorGroupPosts::removeShortcodes($record[$variable]);
}
}
}
$record = apply_filters('smartslider3_posts_posts_data', $record);
$data[$i] = &$record;
unset($record);
}
if ($siteorigin_panels_filter_content) {
add_filter('the_content', 'siteorigin_panels_filter_content');
}
$wp_query->post = $tmpPost;
wp_reset_postdata();
return $data;
}
}