cms = 'WordPress'; $this->pluginDescription->name = acym_translation('ACYM_PAGE'); $this->pluginDescription->icon = ''; $this->pluginDescription->icontype = 'raw'; if (ACYM_CMS === 'wordpress') { $this->displayOptions = [ 'title' => ['ACYM_TITLE', true], 'image' => ['ACYM_FEATURED_IMAGE', true], 'intro' => ['ACYM_INTRO_ONLY', true], 'content' => ['ACYM_FULL_TEXT', false], 'readmore' => ['ACYM_READ_MORE', false], ]; $this->initCustomView(); $this->settings = [ 'custom_view' => [ 'type' => 'custom_view', 'tags' => array_merge($this->displayOptions, $this->replaceOptions, $this->elementOptions), ], ]; } } public function getStandardStructure(string &$customView): void { $tag = new stdClass(); $tag->id = 0; $format = new stdClass(); $format->tag = $tag; $format->title = '{title}'; $format->afterTitle = ''; $format->afterArticle = ''; $format->imagePath = '{image}'; $format->description = '{intro}'; $format->link = '{link}'; $format->customFields = []; $customView = '
'.$this->pluginHelper->getStandardDisplay($format).'
'; } public function initReplaceOptionsCustomView(): void { $this->replaceOptions = [ 'link' => ['ACYM_LINK'], 'picthtml' => ['ACYM_IMAGE'], 'readmore' => ['ACYM_READ_MORE'], ]; } public function initElementOptionsCustomView(): void { $query = 'SELECT page.* FROM #__posts AS page WHERE page.post_type = "page" AND page.post_status = "publish"'; $element = acym_loadObject($query); if (empty($element)) return; foreach ($element as $key => $value) { $this->elementOptions[$key] = [$key]; } } public function getPossibleIntegrations(): ?object { return $this->pluginDescription; } public function insertionOptions(?object $defaultValues = null): void { $this->defaultValues = $defaultValues; $displayOptions = [ [ 'title' => 'ACYM_DISPLAY', 'type' => 'checkbox', 'name' => 'display', 'options' => $this->displayOptions, ], [ 'title' => 'ACYM_CLICKABLE_TITLE', 'type' => 'boolean', 'name' => 'clickable', 'default' => true, ], [ 'title' => 'ACYM_CLICKABLE_IMAGE', 'type' => 'boolean', 'name' => 'clickableimg', 'default' => false, ], [ 'title' => 'ACYM_REPLACE_SHORTCODES', 'type' => 'boolean', 'name' => 'replaceshortcode', 'default' => false, ], [ 'title' => 'ACYM_TRUNCATE', 'type' => 'intextfield', 'isNumber' => 1, 'name' => 'wrap', 'text' => 'ACYM_TRUNCATE_AFTER', 'default' => 0, ], [ 'title' => 'ACYM_DISPLAY_PICTURES', 'type' => 'pictures', 'name' => 'pictures', ], ]; $zoneContent = $this->getFilteringZone(false).$this->prepareListing(); $this->displaySelectionZone($zoneContent); $this->pluginHelper->displayOptions($displayOptions, $this->name, 'individual', $this->defaultValues); } public function prepareListing(): string { $this->querySelect = 'SELECT page.ID, page.post_title, page.post_date, page.post_content '; $this->query = 'FROM #__posts AS page '; $this->filters = []; $this->filters[] = 'page.post_type = "page"'; $this->filters[] = 'page.post_status = "publish"'; $this->searchFields = ['page.ID', 'page.post_title']; $this->pageInfo->order = 'page.ID'; $this->elementIdTable = 'page'; $this->elementIdColumn = 'ID'; parent::prepareListing(); $rows = $this->getElements(); foreach ($rows as $i => $row) { if (str_replace(['wp:core-embed', 'wp:shortcode'], '', $row->post_content) !== $row->post_content) { ob_start(); acym_tooltip( [ 'hoveredText' => '', 'textShownInTooltip' => acym_translation('ACYM_SPECIAL_CONTENT_WARNING'), ] ); $rows[$i]->post_title = ob_get_clean().$rows[$i]->post_title; } } $listingOptions = [ 'header' => [ 'post_title' => [ 'label' => 'ACYM_TITLE', 'size' => '7', ], 'post_date' => [ 'label' => 'ACYM_DATE_CREATED', 'size' => '4', 'type' => 'date', ], 'ID' => [ 'label' => 'ACYM_ID', 'size' => '1', 'class' => 'text-center', ], ], 'id' => 'ID', 'rows' => $rows, ]; return $this->getElementsListing($listingOptions); } public function replaceContent(object &$email): void { $this->replaceOne($email); } public function replaceIndividualContent(object $tag): string { $query = 'SELECT page.* FROM #__posts AS page WHERE page.post_type = "page" AND page.post_status = "publish" AND page.ID = '.intval($tag->id); $element = $this->initIndividualContent($tag, $query); if (empty($element)) return ''; $varFields = $this->getCustomLayoutVars($element); $link = get_permalink($element->ID); $link = $this->getLinkTranslated($link); $varFields['{link}'] = $link; $title = ''; $varFields['{title}'] = $element->post_title; if (in_array('title', $tag->display)) $title = $varFields['{title}']; $afterTitle = ''; $afterArticle = ''; $imagePath = ''; $imageId = get_post_thumbnail_id($tag->id); if (!empty($imageId)) { $imagePath = get_the_post_thumbnail_url($tag->id); } $varFields['{image}'] = $imagePath; $varFields['{picthtml}'] = ''; if (!in_array('image', $tag->display)) $imagePath = ''; $contentText = ''; $varFields['{content}'] = $this->cleanExtensionContent($element->post_content); $varFields['{intro}'] = $this->cleanExtensionContent($this->getIntro($element->post_content)); $varFields['{content}'] = !empty($tag->replaceshortcode) ? $this->replaceShortcode($varFields['{content}']) : $varFields['{content}']; $varFields['{intro}'] = !empty($tag->replaceshortcode) ? $this->replaceShortcode($varFields['{intro}']) : $varFields['{intro}']; if (in_array('content', $tag->display)) { $contentText .= $varFields['{content}']; } elseif (in_array('intro', $tag->display)) { $contentText .= $varFields['{intro}']; } $customFields = []; $varFields['{readmore}'] = ''.esc_html( acym_translation('ACYM_READ_MORE') ).''; 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) && empty($tag->clickableimg) ? '' : $link; $format->customFields = $customFields; $result = '
'.$this->pluginHelper->getStandardDisplay($format).'
'; return $this->finalizeElementFormat($result, $tag, $varFields); } protected function getTranslationId(int $elementId, string $translationTool, bool $defaultLanguage = false): int { $languageCode = $this->emailLanguage; if ($defaultLanguage) { $languageCode = $this->config->get('multilingual_default', ACYM_DEFAULT_LANGUAGE); } else { $idDefaultLanguage = $this->getTranslationId($elementId, $translationTool, true); // We only translate inserted articles of the default language if ($idDefaultLanguage !== $elementId) { return $elementId; } } $languageCode = substr($languageCode, 0, 2); if ($translationTool === 'polylang') { if (acym_isExtensionActive('polylang/polylang.php') && function_exists('pll_get_post')) { $translationId = pll_get_post($elementId, $languageCode); if (!empty($translationId)) $elementId = $translationId; } } elseif ($translationTool === 'wpml') { if (acym_isExtensionActive('sitepress-multilingual-cms/sitepress.php')) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- WPML hook for integration. $elementId = apply_filters('wpml_object_id', $elementId, 'post', true, $languageCode); } } return intval($elementId); } }