FOF30\Model\DataModel\Behaviour\Language::onBeforeBuildQuery PHP Метод

onBeforeBuildQuery() публичный Метод

This event runs before we have built the query used to fetch a record list in a model. It is used to blacklist the language filter
public onBeforeBuildQuery ( &$model, &$query ) : void
Результат void
    public function onBeforeBuildQuery(&$model, &$query)
    {
        if ($model->getContainer()->platform->isFrontend()) {
            $model->blacklistFilters('language');
        }
        // Make sure the field actually exists AND we're not in CLI
        if (!$model->hasField('language') || $model->getContainer()->platform->isCli()) {
            return;
        }
        /** @var \JApplicationSite $app */
        $app = \JFactory::getApplication();
        $hasLanguageFilter = method_exists($app, 'getLanguageFilter');
        if ($hasLanguageFilter) {
            $hasLanguageFilter = $app->getLanguageFilter();
        }
        if (!$hasLanguageFilter) {
            return;
        }
        // Ask Joomla for the plugin only if we don't already have it. Useful for tests
        if (!$this->lang_filter_plugin) {
            $this->lang_filter_plugin = \JPluginHelper::getPlugin('system', 'languagefilter');
        }
        $lang_filter_params = new \JRegistry($this->lang_filter_plugin->params);
        $languages = array('*');
        if ($lang_filter_params->get('remove_default_prefix')) {
            // Get default site language
            $platform = $model->getContainer()->platform;
            $lg = $platform->getLanguage();
            $languages[] = $lg->getTag();
        } else {
            // We have to use JInput since the language fragment is not set in the $_REQUEST, thus we won't have it in our model
            // TODO Double check the previous assumption
            $languages[] = \JFactory::getApplication()->input->getCmd('language', '*');
        }
        // Filter out double languages
        $languages = array_unique($languages);
        // And filter the query output by these languages
        $db = $model->getDbo();
        $languages = array_map(array($db, 'quote'), $languages);
        $fieldName = $model->getFieldAlias('language');
        $model->whereRaw($db->qn($fieldName) . ' IN(' . implode(', ', $languages) . ')');
    }