Current Path :
/
home
/
zrcdevco
/
public_html
/
zrcprod
/
plugins
/
fields
/
articles
/
Or
Select Your Path :
Upload File :
New :
File
Dir
/home/zrcdevco/public_html/zrcprod/plugins/fields/articles/helper.php
<?php /** * @package Articles Field * @version 3.0.0PRO * * @author Peter van Westen <info@regularlabs.com> * @link http://www.regularlabs.com * @copyright Copyright © 2019 Regular Labs All Rights Reserved * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL */ defined('_JEXEC') or die; use Joomla\CMS\Factory as JFactory; use Joomla\CMS\Plugin\PluginHelper as JPluginHelper; use Joomla\CMS\Router\Route as JRoute; use RegularLabs\Library\Article as RL_Article; use RegularLabs\Library\DB as RL_DB; use RegularLabs\Library\RegEx as RL_RegEx; if (is_file(JPATH_LIBRARIES . '/regularlabs/autoload.php')) { require_once JPATH_LIBRARIES . '/regularlabs/autoload.php'; } class PlgFieldsArticlesHelper { public static function renderLayout($ids, $layout, $field, $layout_type = 'title', $apply_ordering = true) { $settings = (object) []; switch ($layout_type) { case 'custom_html': $settings->custom_html = $field->fieldparams->get('custom_html', ''); break; case 'title_custom': $settings->custom_field = $field->fieldparams->get('custom_field', ''); $settings->link_title = $field->fieldparams->get('link_title', 1); break; case 'title': default: $settings->link_title = $field->fieldparams->get('link_title', 1); break; } $outputs = self::getOutputs($ids, $layout, $field, $settings, $apply_ordering); $separator = $field->fieldparams->get('use_separator') ? $field->fieldparams->get('separator', ', ') : ''; echo implode($separator, $outputs); } private static function getOutputs($ids, $layout, $field, $settings, $apply_ordering) { $ids = array_unique($ids); if ($apply_ordering) { return self::getOrderedOutputs($ids, $layout, $field, $settings); } return self::getUnOrderedOutputs($ids, $layout, $field, $settings); } private static function getUnOrderedOutputs($ids, $layout, $field, $settings) { $outputs = []; foreach ($ids as $id) { if ( ! $id) { continue; } $article = RL_Article::get($id); if (empty($article->id)) { continue; } $output = $layout->render(compact('article', 'settings')); if (empty($output)) { continue; } $outputs[] = $output; } return $outputs; } private static function getOrderedOutputs($ids, $layout, $field, $settings) { $ordering = $field->fieldparams->get('articles_ordering', 'title'); $direction = $field->fieldparams->get('articles_ordering_direction', 'ASC'); $texts = []; foreach ($ids as $id) { if ( ! $id) { continue; } $article = RL_Article::get($id); if (empty($article->id)) { continue; } $text = $layout->render(compact('article', 'settings')); if (empty($text)) { continue; } switch ($ordering) { case 'ordering': case 'hits': $order_id = ($article->{$ordering} * 1000000) + $article->id; break; case 'created_time': case 'modified_time': case 'publish_up': case 'alias': case 'title': default: $order_id = $article->{$ordering} . '.' . $article->id; break; } $texts[$order_id] = $text; } if (count($texts) < 2) { return $texts; } ksort($texts); if ($direction == 'DESC') { krsort($texts); } return $texts; } public static function prepareCustomField($context, $item, &$field) { JPluginHelper::importPlugin('fields'); $dispatcher = JEventDispatcher::getInstance(); // Event allow plugins to modify the output of the field before it is prepared $dispatcher->trigger('onCustomFieldsBeforePrepareField', [$context, $item, &$field]); // Gathering the value for the field $value = $dispatcher->trigger('onCustomFieldsPrepareField', [$context, $item, &$field]); if (is_array($value)) { $value = implode($value, ' '); } // Event allow plugins to modify the output of the prepared field $dispatcher->trigger('onCustomFieldsAfterPrepareField', [$context, $item, $field, &$value]); // Assign the value $field->value = $value; } public static function getLinkedArticleIds($field_ids, $article_id, $field) { $article_ids = []; foreach ($field_ids as $field_id) { $field_article_ids = self::getLinkedArticleIdsByFieldId($field_id, $article_id, $field); $article_ids = array_merge($article_ids, $field_article_ids); } if (empty($field_ids)) { $article_ids = self::getLinkedArticleIdsByFieldId(0, $article_id, $field); } $ordering = $field->fieldparams->get('linked_articles_ordering', 'title'); $direction = $field->fieldparams->get('linked_articles_ordering_direction', 'ASC'); $db = JFactory::getDbo(); $nullDate = $db->quote($db->getNullDate()); $nowDate = $db->quote(JFactory::getDate()->toSql()); $query = $db->getQuery(true) ->select($db->quoteName('id')) ->from($db->quoteName('#__content')) ->where($db->quoteName('id') . RL_DB::in($article_ids)) ->where($db->quoteName('state') . ' = 1') ->where('(publish_up = ' . $nullDate . ' OR publish_up <= ' . $nowDate . ')') ->where('(publish_down = ' . $nullDate . ' OR publish_down >= ' . $nowDate . ')') ->order($db->quoteName($ordering) . ' ' . $direction); $db->setQuery($query); return $db->loadColumn() ?: []; } public static function getLinkedArticleIdsByFieldId($field_id, $article_id, $field) { $db = JFactory::getDbo(); $nullDate = $db->quote($db->getNullDate()); $nowDate = $db->quote(JFactory::getDate()->toSql()); $query = $db->getQuery(true) ->select($db->quoteName('item_id')) ->from($db->quoteName('#__fields_values')) ->where($db->quoteName('value') . ' = ' . (int) $article_id); if ($field_id) { $query->where($db->quoteName('field_id') . ' = ' . (int) $field_id); } $db->setQuery($query); $article_ids = $db->loadColumn(); $categories = self::getCategoriesByFieldId($field_id); $query = $db->getQuery(true) ->select($db->quoteName('id')) ->from($db->quoteName('#__content', 'i')) ->where($db->quoteName('i.id') . RL_DB::in($article_ids)) ->where($db->quoteName('i.state') . ' = 1') ->where('(publish_up = ' . $nullDate . ' OR publish_up <= ' . $nowDate . ')') ->where('(publish_down = ' . $nullDate . ' OR publish_down >= ' . $nowDate . ')'); if ( ! empty($categories)) { $query->where($db->quoteName('i.catid') . RL_DB::in($categories)); } self::addFilters($query, $field); $db->setQuery($query); return $db->loadColumn(); } static function addFilters(&$query, $field) { require_once 'filters.php'; $filters = new PlgFieldsArticlesFilters($field->fieldparams); $filters->addToQuery($query); } public static function getCategoriesByFieldId($field_id) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('category_id')) ->from($db->quoteName('#__fields_categories')) ->where($db->quoteName('field_id') . ' = ' . (int) $field_id); $db->setQuery($query); $categories = $db->loadColumn(); $child_categories = self::getChildCategories($categories); return array_merge($categories, $child_categories); } public static function getChildCategories($categories) { $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('id')) ->from($db->quoteName('#__categories')) ->where($db->quoteName('parent_id') . RL_DB::in($categories)); $db->setQuery($query); $child_categories = $db->loadColumn(); if (empty($child_categories)) { return []; } $sub_child_categories = self::getChildCategories($child_categories); return array_merge($child_categories, $sub_child_categories); } public static function getDataTags($html) { RL_RegEx::matchAll('\[(?<key>[^ ]+?)\]', $html, $matches); return $matches; } public static function getDataTagValue(&$article, $tag) { if (isset($article->{$tag['key']}) && is_string($article->{$tag['key']})) { return $article->{$tag['key']}; } if ($tag['key'] == 'url') { $slug = $article->alias ? ($article->id . ':' . $article->alias) : $article->id; if ( ! class_exists('ContentHelperRoute')) { require_once JPATH_SITE . '/components/com_content/helpers/route.php'; } return JRoute::_(ContentHelperRoute::getArticleRoute($slug, $article->catid, $article->language)); } $article->urls = is_object($article->urls) ? $article->urls : json_decode($article->urls); if (isset($article->urls->{$tag['key']})) { return $article->urls->{$tag['key']}; } $article->images = is_object($article->images) ? $article->images : json_decode($article->images); if (isset($article->images->{$tag['key']})) { return $article->images->{$tag['key']}; } return self::getDataTagValueCustomField($article, $tag['key']); } public static function getDataTagValueCustomField(&$article, $key) { if ( ! isset($article->fields)) { $article->fields = FieldsHelper::getFields('com_content.article', $article); } foreach ($article->fields as $field) { if ($field->name != $key) { continue; } // Field has no value if (empty($field->value)) { return ''; } // Prepare the value if ($field->value == $field->rawvalue) { self::prepareCustomField('com_content.article', $article, $field); } return $field->value; } return false; } }