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) . ')');
}