* @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Categories\Administrator\Service\HTML; use Joomla\CMS\Factory; use Joomla\CMS\Language\LanguageHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\Layout\LayoutHelper; use Joomla\CMS\Router\Route; use Joomla\Component\Categories\Administrator\Helper\CategoriesHelper; use Joomla\Database\ParameterType; use Joomla\Utilities\ArrayHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Administrator category HTML * * @since 3.2 */ class AdministratorService { /** * Render the list of associated items * * @param integer $catid Category identifier to search its associations * @param string $extension Category Extension * * @return string The language HTML * * @since 3.2 * @throws \Exception */ public function association($catid, $extension = 'com_content') { // Defaults $html = ''; // Get the associations if ($associations = CategoriesHelper::getAssociations($catid, $extension)) { $associations = ArrayHelper::toInteger($associations); // Get the associated categories $db = Factory::getDbo(); $query = $db->getQuery(true) ->select( [ $db->quoteName('c.id'), $db->quoteName('c.title'), $db->quoteName('l.sef', 'lang_sef'), $db->quoteName('l.lang_code'), $db->quoteName('l.image'), $db->quoteName('l.title', 'language_title'), ] ) ->from($db->quoteName('#__categories', 'c')) ->whereIn($db->quoteName('c.id'), array_values($associations)) ->where($db->quoteName('c.id') . ' != :catid') ->bind(':catid', $catid, ParameterType::INTEGER) ->join( 'LEFT', $db->quoteName('#__languages', 'l'), $db->quoteName('c.language') . ' = ' . $db->quoteName('l.lang_code') ); $db->setQuery($query); try { $items = $db->loadObjectList('id'); } catch (\RuntimeException $e) { throw new \Exception($e->getMessage(), 500, $e); } if ($items) { $languages = LanguageHelper::getContentLanguages(array(0, 1)); $content_languages = array_column($languages, 'lang_code'); foreach ($items as &$item) { if (in_array($item->lang_code, $content_languages)) { $text = $item->lang_code; $url = Route::_('index.php?option=com_categories&task=category.edit&id=' . (int) $item->id . '&extension=' . $extension); $tooltip = '' . htmlspecialchars($item->language_title, ENT_QUOTES, 'UTF-8') . '
' . htmlspecialchars($item->title, ENT_QUOTES, 'UTF-8'); $classes = 'badge bg-secondary'; $item->link = '' . $text . '' . ''; } else { // Display warning if Content Language is trashed or deleted Factory::getApplication()->enqueueMessage(Text::sprintf('JGLOBAL_ASSOCIATIONS_CONTENTLANGUAGE_WARNING', $item->lang_code), 'warning'); } } } $html = LayoutHelper::render('joomla.content.associations', $items); } return $html; } }