<?php /** * @package SP Page Builder * @author JoomShaper http://www.joomshaper.com * @copyright Copyright (c) 2010 - 2023 JoomShaper * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later */ //no direct access defined('_JEXEC') or die('Restricted access'); use Joomla\CMS\Factory; use Joomla\CMS\Log\Log; use Joomla\CMS\Uri\Uri; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\HtmlView; use Joomla\CMS\Component\ComponentHelper; class SppagebuilderViewPage extends HtmlView { protected $item; protected $canEdit; protected $additionalAttributes = []; function display($tpl = null) { $app = Factory::getApplication(); $user = Factory::getUser(); $this->item = $this->get('Item'); // If a page is unpublished/trashed and a user tries to preview it. if (is_string($this->item)) { throw new Exception($this->item, 404); } $this->item = ApplicationHelper::preparePageData($this->item); $this->canEdit = $user->authorise('core.edit', 'com_sppagebuilder') || $user->authorise('core.edit', 'com_sppagebuilder.page.' . $this->item->id) || ($user->authorise('core.edit.own', 'com_sppagebuilder.page.' . $this->item->id) && $this->item->created_by == $user->id); $this->checked_out = ($this->item->checked_out == 0 || $this->item->checked_out == $user->id); if (count($errors = (array) $this->get('Errors'))) { Log::add(implode('<br />', $errors), Log::WARNING, 'jerror'); return false; } // Temporary disabled if ($this->item->access_view == false) { $app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'error'); $app->setHeader('status', 403, true); return; } $this->_prepareDocument($this->item->title); // EasyStore Single Page View if (ComponentHelper::isEnabled('com_easystore') && file_exists(JPATH_ROOT . '/components/com_easystore/src/Helper/EasyStoreHelper.php')) { $extension = $this->item->extension ?? 'com_sppagebuilder'; $extension_view = $this->item->extension_view ?? 'page'; if ($extension == 'com_easystore') { $this->additionalAttributes = JoomShaper\Component\EasyStore\Site\Helper\EasyStoreHelper::initEasyStore($extension_view); } } parent::display($tpl); } protected function _prepareDocument($title = '') { $config = Factory::getConfig(); $app = Factory::getApplication(); $doc = Factory::getDocument(); $menus = $app->getMenu(); $menu = $menus->getActive(); $config_params = ComponentHelper::getParams('com_sppagebuilder'); $disable_og = $config_params->get('disable_og', 0); $disable_tc = $config_params->get('disable_tc', 0); //Title if (isset($meta['title']) && $meta['title']) { $title = $meta['title']; } else { if ($menu) { if ($menu->getParams()->get('page_title', '')) { $title = $menu->getParams()->get('page_title'); } else { $title = $menu->title; } } } //Include Site title $sitetitle = $title; if ($config->get('sitename_pagetitles') == 2) { $sitetitle = Text::sprintf('JPAGETITLE', $sitetitle, $app->get('sitename')); } elseif ($config->get('sitename_pagetitles') == 1) { $sitetitle = Text::sprintf('JPAGETITLE', $app->get('sitename'), $sitetitle); } $doc->setTitle($sitetitle); // Page Meta if (isset($this->item->attribs)) { $attribs = json_decode($this->item->attribs); } else { $attribs = new stdClass; } $og_title = $this->item->og_title; $language = ($this->item->language == '*') ? Factory::getLanguage()->getTag() : $this->item->language; $article_author = !empty($attribs->author) ? $attribs->author : $this->item->author_name; $this->document->addCustomTag('<meta property="article:author" content="' . $article_author . '"/>'); $this->document->addCustomTag('<meta property="article:published_time" content="' . $this->item->created_on . '"/>'); $this->document->addCustomTag('<meta property="article:modified_time" content="' . $this->item->modified . '"/>'); $this->document->addCustomTag('<meta property="og:locale" content="' . $language . '" />'); if (!$disable_og) { if ($og_title) { $this->document->addCustomTag('<meta property="og:title" content="' . $og_title . '" />'); } else { $doc->addCustomTag('<meta property="og:title" content="' . $title . '" />'); } $og_type = (isset($attribs->og_type) && $attribs->og_type) ? $attribs->og_type : 'website'; $this->document->addCustomTag('<meta property="og:type" content="' . $og_type . '" />'); $this->document->addCustomTag('<meta property="og:url" content="' . Uri::getInstance()->toString() . '" />'); if ($fb_app_id = $config_params->get('fb_app_id', '')) { $this->document->addCustomTag('<meta property="fb:app_id" content="' . $fb_app_id . '" />'); } if ($config->get('sitename', '')) { $this->document->addCustomTag('<meta property="og:site_name" content="' . htmlspecialchars($config->get('sitename', '')) . '" />'); } } $og_image = ""; if (!empty($this->item->og_image)) { $og_image = preg_match("@^{@", $this->item->og_image) ? json_decode($this->item->og_image)->src : $this->item->og_image; } if (!$disable_og && $og_image) { $this->document->addCustomTag('<meta property="og:image" content="' . Uri::root() . $og_image . '" />'); $this->document->addCustomTag('<meta property="og:image:width" content="1200" />'); $this->document->addCustomTag('<meta property="og:image:height" content="630" />'); } $og_description = $this->item->og_description; if (!$disable_og && $og_description) { $this->document->addCustomTag('<meta property="og:description" content="' . $og_description . '" />'); } if (!$disable_tc) { // Twitter $this->document->addCustomTag('<meta name="twitter:card" content="summary" />'); if ($config->get('sitename', '')) { $this->document->addCustomTag('<meta name="twitter:site" content="' . htmlspecialchars($config->get('sitename', '')) . '" />'); } if ($og_description) { $this->document->addCustomTag('<meta name="twitter:description" content="' . $og_description . '" />'); } if ($og_image) { $this->document->addCustomTag('<meta name="twitter:image:src" content="' . Uri::root() . $og_image . '" />'); } } $meta_description = (isset($attribs->meta_description) && $attribs->meta_description) ? $attribs->meta_description : ''; $meta_keywords = (isset($attribs->meta_keywords) && $attribs->meta_keywords) ? $attribs->meta_keywords : ''; $robots = (isset($attribs->robots) && $attribs->robots) ? $attribs->robots : ''; if ($menu) { if ($menu->getParams()->get('menu-meta_description')) { $meta_description = $menu->getParams()->get('menu-meta_description'); } if ($menu->getParams()->get('menu-meta_keywords')) { $meta_keywords = $menu->getParams()->get('menu-meta_keywords'); } if ($menu->getParams()->get('robots')) { $robots = $menu->getParams()->get('robots'); } } if (!empty($meta_description)) { $this->document->setDescription($meta_description); } if (!empty($meta_keywords)) { $this->document->setMetadata('keywords', $meta_keywords); } if (!empty($robots)) { $this->document->setMetadata('robots', $robots); } } }