diff --git a/plugins/content/confirmconsent/confirmconsent.php b/plugins/content/confirmconsent/confirmconsent.php index 0149f62828ad8..8e3298b600ee2 100644 --- a/plugins/content/confirmconsent/confirmconsent.php +++ b/plugins/content/confirmconsent/confirmconsent.php @@ -9,13 +9,8 @@ defined('_JEXEC') or die; -use Joomla\CMS\Factory; -use Joomla\CMS\HTML\HTMLHelper; -use Joomla\CMS\Language\Associations; use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\CMSPlugin; -use Joomla\CMS\Router\Route; -use Joomla\CMS\Uri\Uri; /** * The Joomla Core confirm consent plugin @@ -32,14 +27,6 @@ class PlgContentConfirmConsent extends CMSPlugin */ protected $app; - /** - * The Database object. - * - * @var JDatabaseDriver - * @since 3.9.0 - */ - protected $db; - /** * Load the language file on instantiation. * @@ -78,37 +65,17 @@ public function onContentPrepareForm(JForm $form, $data) } // Get the consent box Text & the selected privacyarticle - $consentboxLabel = Text::_('PLG_CONTENT_CONFIRMCONSENT_CONSENTBOX_LABEL'); $consentboxText = (string) $this->params->get('consentbox_text', Text::_('PLG_CONTENT_CONFIRMCONSENT_FIELD_NOTE_DEFAULT')); $privacyArticle = $this->params->get('privacy_article', false); - // When we have a article let's add the modal and make the title clickable - if ($privacyArticle) - { - $modalName = 'privacyArticle'; - $modalParams['title'] = $consentboxLabel; - $modalParams['url'] = $this->getAssignedArticleUrl($privacyArticle); - $modalParams['height'] = 800; - $modalParams['width'] = "100%"; - echo HTMLHelper::_('bootstrap.renderModal', 'modal-' . $modalName, $modalParams); - - $attribs['data-toggle'] = 'modal'; - - $consentboxLabel = HTMLHelper::_( - 'link', - '#modal-' . $modalName, - $consentboxLabel, - $attribs - ); - } - $form->load('
-
+
@@ -119,71 +86,4 @@ public function onContentPrepareForm(JForm $form, $data) return true; } - - /** - * Return the url of the assigned article based on the current user language - * - * @param integer $articleId The form to be altered. - * - * @return string Returns the a tag containing everything for the modal - * - * @since 3.9.0 - */ - private function getAssignedArticleUrl($articleId) - { - // Get the info from the article - $query = $this->db->getQuery(true) - ->select($this->db->quoteName(array('id', 'catid', 'language'))) - ->from($this->db->quoteName('#__content')) - ->where($this->db->quoteName('id') . ' = ' . (int) $articleId); - $this->db->setQuery($query); - - try - { - $article = $this->db->loadObject(); - } - catch (JDatabaseExceptionExecuting $e) - { - // Something at the database layer went wrong - return Route::_( - 'index.php?option=com_content&view=article&id=' - . $articleId . '&tmpl=component' - ); - } - - // Register ContentHelperRoute - JLoader::register('ContentHelperRoute', JPATH_BASE . '/components/com_content/helpers/route.php'); - - if (!Associations::isEnabled()) - { - return Route::_( - ContentHelperRoute::getArticleRoute( - $article->id, - $article->catid, - $article->language - ) . '&tmpl=component' - ); - } - - $associatedArticles = Associations::getAssociations('com_content', '#__content', 'com_content.item', $article->id); - $currentLang = Factory::getLanguage()->getTag(); - - if (isset($associatedArticles) && $currentLang !== $article->language && array_key_exists($currentLang, $associatedArticles)) - { - return Route::_( - ContentHelperRoute::getArticleRoute( - $associatedArticles[$currentLang]->id, - $associatedArticles[$currentLang]->catid, - $associatedArticles[$currentLang]->language - ) . '&tmpl=component' - ); - } - - // Association is enabled but this article is not associated - return Route::_( - 'index.php?option=com_content&view=article&id=' - . $article->id . '&catid=' . $article->catid - . '&tmpl=component&lang=' . $article->language - ); - } } diff --git a/plugins/content/confirmconsent/fields/consentbox.php b/plugins/content/confirmconsent/fields/consentbox.php new file mode 100644 index 0000000000000..bbf554a082c71 --- /dev/null +++ b/plugins/content/confirmconsent/fields/consentbox.php @@ -0,0 +1,273 @@ +articleid = (int) $value; + break; + + default: + parent::__set($name, $value); + } + } + + /** + * Method to get certain otherwise inaccessible properties from the form field object. + * + * @param string $name The property name for which to get the value. + * + * @return mixed The property value or null. + * + * @since __DEPLOY_VERSION__ + */ + public function __get($name) + { + switch ($name) + { + case 'articleid': + return $this->$name; + } + + return parent::__get($name); + } + + /** + * Method to attach a JForm object to the field. + * + * @param SimpleXMLElement $element The SimpleXMLElement object representing the `` tag for the form field object. + * @param mixed $value The form field value to validate. + * @param string $group The field name group control value. This acts as an array container for the field. + * For example if the field has name="foo" and the group value is set to "bar" then the + * full field name would end up being "bar[foo]". + * + * @return boolean True on success. + * + * @see JFormField::setup() + * @since __DEPLOY_VERSION__ + */ + public function setup(SimpleXMLElement $element, $value, $group = null) + { + $return = parent::setup($element, $value, $group); + + if ($return) + { + $this->articleid = (int) $this->element['articleid']; + } + + return $return; + } + + /** + * Method to get the field label markup. + * + * @return string The field label markup. + * + * @since __DEPLOY_VERSION__ + */ + protected function getLabel() + { + if ($this->hidden) + { + return ''; + } + + $data = $this->getLayoutData(); + + // Forcing the Alias field to display the tip below + $position = $this->element['name'] == 'alias' ? ' data-placement="bottom" ' : ''; + + // When we have a article let's add the modal and make the title clickable + if ($data['articleid']) + { + $attribs['data-toggle'] = 'modal'; + + $data['label'] = HTMLHelper::_( + 'link', + '#modal-' . $this->id, + $data['label'], + $attribs + ); + } + + // Here mainly for B/C with old layouts. This can be done in the layouts directly + $extraData = array( + 'text' => $data['label'], + 'for' => $this->id, + 'classes' => explode(' ', $data['labelclass']), + 'position' => $position, + ); + + return $this->getRenderer($this->renderLabelLayout)->render(array_merge($data, $extraData)); + } + + /** + * Method to get a control group with label and input. + * + * @param array $options Options to be passed into the rendering of the field + * + * @return string A string containing the html for the control group + * + * @since __DEPLOY_VERSION__ + */ + public function renderField($options = array()) + { + $modalHtml = ''; + $layoutData = $this->getLayoutData(); + + if ($this->articleid) + { + $modalParams['title'] = $layoutData['label']; + $modalParams['url'] = $this->getAssignedArticleUrl(); + $modalParams['height'] = 800; + $modalParams['width'] = '100%'; + $modalHtml = HTMLHelper::_('bootstrap.renderModal', 'modal-' . $this->id, $modalParams); + } + + return $modalHtml . parent::renderField($options); + } + + /** + * Method to get the data to be passed to the layout for rendering. + * + * @return array + * + * @since __DEPLOY_VERSION__ + */ + protected function getLayoutData() + { + $data = parent::getLayoutData(); + + $extraData = array( + 'articleid' => (integer) $this->articleid, + ); + + return array_merge($data, $extraData); + } + + /** + * Return the url of the assigned article based on the current user language + * + * @return string Returns the link to the article + * + * @since __DEPLOY_VERSION__ + */ + private function getAssignedArticleUrl() + { + $db = Factory::getDbo(); + + // Get the info from the article + $query = $db->getQuery(true) + ->select($db->quoteName(array('id', 'catid', 'language'))) + ->from($db->quoteName('#__content')) + ->where($db->quoteName('id') . ' = ' . (int) $this->articleid); + $db->setQuery($query); + + try + { + $article = $db->loadObject(); + } + catch (JDatabaseExceptionExecuting $e) + { + // Something at the database layer went wrong + return Route::_( + 'index.php?option=com_content&view=article&id=' + . $this->articleid . '&tmpl=component' + ); + } + + // Register ContentHelperRoute + JLoader::register('ContentHelperRoute', JPATH_BASE . '/components/com_content/helpers/route.php'); + + if (!Associations::isEnabled()) + { + return Route::_( + ContentHelperRoute::getArticleRoute( + $article->id, + $article->catid, + $article->language + ) . '&tmpl=component' + ); + } + + $associatedArticles = Associations::getAssociations('com_content', '#__content', 'com_content.item', $article->id); + $currentLang = Factory::getLanguage()->getTag(); + + if (isset($associatedArticles) && $currentLang !== $article->language && array_key_exists($currentLang, $associatedArticles)) + { + return Route::_( + ContentHelperRoute::getArticleRoute( + $associatedArticles[$currentLang]->id, + $associatedArticles[$currentLang]->catid, + $associatedArticles[$currentLang]->language + ) . '&tmpl=component' + ); + } + + // Association is enabled but this article is not associated + return Route::_( + 'index.php?option=com_content&view=article&id=' + . $article->id . '&catid=' . $article->catid + . '&tmpl=component&lang=' . $article->language + ); + } +}