FOF30\Model\DataModel\Behaviour\Language::onAfterLoad PHP Method

onAfterLoad() public method

The event runs after DataModel has retrieved a single item from the database. It is used to apply automatic filters.
public onAfterLoad ( &$model, &$keys ) : void
return void
    public function onAfterLoad(&$model, &$keys)
    {
        // Make sure we have a DataModel
        if (!$model instanceof DataModel) {
            return;
        }
        // Make sure the field actually exists AND we're not in CLI
        if (!$model->hasField('language') || $model->getContainer()->platform->isCli()) {
            return;
        }
        // Make sure it is a multilingual site and get a list of languages
        /** @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
            $lg = $model->getContainer()->platform->getLanguage();
            $languages[] = $lg->getTag();
        } else {
            $languages[] = \JFactory::getApplication()->input->getCmd('language', '*');
        }
        // Filter out double languages
        $languages = array_unique($languages);
        // Filter by language
        if (!in_array($model->getFieldValue('language'), $languages)) {
            $model->reset();
        }
    }