cms = 'Joomla'; $this->name = 'article'; } public function insertOptions() { $plugin = new stdClass(); $plugin->name = acym_translation('ACYM_ARTICLE'); $plugin->icon = ''; $plugin->icontype = 'raw'; $plugin->plugin = __CLASS__; return $plugin; } public function contentPopup() { $this->categories = acym_loadObjectList( 'SELECT id, parent_id, title FROM `#__categories` WHERE extension = "com_content"' ); $tabHelper = acym_get('helper.tab'); $tabHelper->startTab(acym_translation('ACYM_ONE_BY_ONE')); $displayOptions = [ [ 'title' => 'ACYM_DISPLAY', 'type' => 'checkbox', 'name' => 'display', 'options' => [ 'title' => ['ACYM_TITLE', true], 'content' => ['ACYM_CONTENT', true], 'cat' => ['ACYM_CATEGORY', false], 'readmore' => ['ACYM_READ_MORE', false], ], ], [ 'title' => 'ACYM_CLICKABLE_TITLE', 'type' => 'boolean', 'name' => 'clickable', 'default' => true, ], [ 'title' => 'ACYM_TRUNCATE', 'type' => 'intextfield', 'name' => 'wrap', 'text' => 'ACYM_TRUNCATE_AFTER', 'default' => 0, ], [ 'title' => 'ACYM_DISPLAY_PICTURES', 'type' => 'pictures', 'name' => 'pictures', ], ]; echo $this->acympluginHelper->displayOptions($displayOptions, $this->name); echo $this->getFilteringZone(); $this->displayListing(); $tabHelper->endTab(); $tabHelper->startTab(acym_translation('ACYM_BY_CATEGORY')); $catOptions = [ [ 'title' => 'ACYM_ORDER_BY', 'type' => 'select', 'name' => 'order', 'options' => [ 'id' => 'ACYM_ID', 'publish_up' => 'ACYM_PUBLISHING_DATE', 'modified' => 'ACYM_MODIFICATION_DATE', 'title' => 'ACYM_TITLE', 'rand' => 'ACYM_RANDOM', ], ], [ 'title' => 'ACYM_COLUMNS', 'type' => 'number', 'name' => 'cols', 'default' => 1, 'min' => 1, 'max' => 10, ], [ 'title' => 'ACYM_MAX_NB_ELEMENTS', 'type' => 'number', 'name' => 'max', 'default' => 20, ], ]; $displayOptions = array_merge($displayOptions, $catOptions); echo $this->acympluginHelper->displayOptions($displayOptions, 'auto'.$this->name, 'grouped'); echo $this->getCategoryListing(); $tabHelper->endTab(); $tabHelper->display('plugin'); } public function displayListing() { $this->pageInfo = new stdClass(); $this->pageInfo->limit = acym_getCMSConfig('list_limit'); $this->pageInfo->page = acym_getVar('int', 'pagination_page_ajax', 1); $this->pageInfo->start = ($this->pageInfo->page - 1) * $this->pageInfo->limit; $this->pageInfo->search = acym_getVar('string', 'plugin_search', ''); $this->pageInfo->filter_cat = acym_getVar('int', 'plugin_category', 0); $this->pageInfo->order = 'article.id'; $this->pageInfo->orderdir = 'DESC'; $query = 'SELECT SQL_CALC_FOUND_ROWS article.id, article.title, article.publish_up FROM #__content AS article '; $filters = []; $searchFields = ['article.id', 'article.title']; if (!empty($this->pageInfo->search)) { $searchVal = '%'.acym_getEscaped($this->pageInfo->search, true).'%'; $filters[] = implode(' LIKE '.acym_escapeDB($searchVal).' OR ', $searchFields).' LIKE '.acym_escapeDB($searchVal); } if (!empty($this->pageInfo->filter_cat)) { $filters[] = "article.catid = ".intval($this->pageInfo->filter_cat); } $filters[] = 'article.state = 1'; $query .= ' WHERE ('.implode(') AND (', $filters).')'; if (!empty($this->pageInfo->order)) $query .= ' ORDER BY '.acym_secureDBColumn($this->pageInfo->order).' '.acym_secureDBColumn($this->pageInfo->orderdir); $rows = acym_loadObjectList($query, '', $this->pageInfo->start, $this->pageInfo->limit); $this->pageInfo->total = acym_loadResult('SELECT FOUND_ROWS()'); $listingOptions = [ 'header' => [ 'title' => [ 'label' => 'ACYM_TITLE', 'size' => '7', ], 'publish_up' => [ 'label' => 'ACYM_PUBLISHING_DATE', 'size' => '4', 'type' => 'date', ], 'id' => [ 'label' => 'ACYM_ID', 'size' => '1', 'class' => 'text-center', ], ], 'id' => 'id', 'rows' => $rows, ]; echo $this->getElementsListing($listingOptions); } public function replaceContent(&$email) { $this->replaceAuto($email); $this->replaceOne($email); } private function replaceAuto(&$email) { $this->generateByCategory($email); if (empty($this->tags)) return; $this->acympluginHelper->replaceTags($email, $this->tags, true); } private function generateByCategory(&$email) { $tags = $this->acympluginHelper->extractTags($email, 'auto'.$this->name); $return = new stdClass(); $return->status = true; $return->message = ''; $this->tags = []; $time = time(); if (empty($tags)) return $return; foreach ($tags as $oneTag => $parameter) { if (isset($this->tags[$oneTag])) continue; $allcats = explode('-', $parameter->id); $selectedArea = []; foreach ($allcats as $oneCat) { if (empty($oneCat)) continue; $selectedArea[] = intval($oneCat); } $query = 'SELECT DISTINCT article.`id` FROM #__content AS article '; $where = []; if (!empty($selectedArea)) { $where[] = 'article.catid IN ('.implode(',', $selectedArea).')'; } $where[] = 'article.state = 1'; $where[] = '`publish_up` < '.acym_escapeDB(date('Y-m-d H:i:s', $time - date('Z'))); $where[] = '`publish_down` > '.acym_escapeDB(date('Y-m-d H:i:s', $time - date('Z'))).' OR `publish_down` = 0'; $query .= ' WHERE ('.implode(') AND (', $where).')'; if (!empty($parameter->order)) { $ordering = explode(',', $parameter->order); if ($ordering[0] == 'rand') { $query .= ' ORDER BY rand()'; } else { $query .= ' ORDER BY article.`'.acym_secureDBColumn(trim($ordering[0])).'` '.acym_secureDBColumn(trim($ordering[1])); } } if (empty($parameter->max)) $parameter->max = 20; $query .= ' LIMIT '.intval($parameter->max); $allArticles = acym_loadResultArray($query); $this->tags[$oneTag] = $this->finalizeCategoryFormat($this->name, $allArticles, $parameter); } return $return; } private function replaceOne(&$email) { $tags = $this->acympluginHelper->extractTags($email, $this->name); if (empty($tags)) return; require_once JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php'; $tagsReplaced = []; foreach ($tags as $i => $oneTag) { if (isset($tagsReplaced[$i])) continue; $tagsReplaced[$i] = $this->replaceIndividualContent($oneTag); } $this->acympluginHelper->replaceTags($email, $tagsReplaced, true); } private function replaceIndividualContent($tag) { $query = 'SELECT article.* FROM #__content AS article WHERE article.state = 1 AND article.id = '.intval($tag->id); $element = acym_loadObject($query); if (empty($element)) { if (acym_isAdmin()) { acym_enqueueMessage('The article "'.$tag->id.'" could not be found', 'notice'); } return ''; } if (empty($tag->display)) { $tag->display = []; } else { $tag->display = explode(',', $tag->display); } $varFields = []; $varFields['{picthtml}'] = ''; foreach ($element as $fieldName => $oneField) { $varFields['{'.$fieldName.'}'] = $oneField; } $completeId = $element->id; if (!empty($element->alias)) $completeId .= ':'.$element->alias; $link = ContentHelperRoute::getArticleRoute($completeId, $element->catid); $link = acym_frontendLink($link, false); $varFields['{link}'] = $link; $title = $element->title; $afterTitle = ''; $afterArticle = ''; $imagePath = ''; if (!empty($tag->pict) && !empty($element->images)) { $images = json_decode($element->images); $pictVar = empty($images->image_fulltext) ? 'image_intro' : 'image_fulltext'; if (!empty($images->$pictVar)) { $imagePath = acym_rootURI().$images->$pictVar; $varFields['{picthtml}'] = ''; } } $contentText = ''; if (in_array('content', $tag->display)) $contentText .= $element->introtext.$element->fulltext; $customFields = []; if (in_array('cat', $tag->display)) { $category = acym_loadResult('SELECT title FROM #__categories WHERE id = '.intval($element->catid)); $customFields[] = [ ''.acym_escape($category).'', acym_translation('ACYM_CATEGORY'), ]; } $readMoreText = empty($tag->readmore) ? acym_translation('ACYM_READ_MORE') : $tag->readmore; $varFields['{readmore}'] = ''.acym_escape($readMoreText).''; if (in_array('readmore', $tag->display)) $afterArticle .= $varFields['{readmore}']; $format = new stdClass(); $format->tag = $tag; $format->title = $title; $format->afterTitle = $afterTitle; $format->afterArticle = $afterArticle; $format->imagePath = $imagePath; $format->description = $contentText; $format->link = empty($tag->clickable) ? '' : $link; $format->cols = empty($tag->nbcols) ? 1 : intval($tag->nbcols); $format->customFields = $customFields; $result = '
'.$this->acympluginHelper->getStandardDisplay($format).'
'; return $this->finalizeElementFormat($this->name, $result, $tag, $varFields); } }