Backend\Modules\Extensions\Actions\Themes::validateForm PHP Method

validateForm() private method

Validates the form.
private validateForm ( )
    private function validateForm()
    {
        // is the form submitted?
        if ($this->frm->isSubmitted()) {
            // no errors?
            if ($this->frm->isCorrect()) {
                // determine themes
                $newTheme = $this->frm->getField('installedThemes')->getValue();
                $oldTheme = $this->get('fork.settings')->get('Core', 'theme', 'core');
                // check if we actually switched themes
                if ($newTheme != $oldTheme) {
                    // fetch templates
                    $oldTemplates = BackendExtensionsModel::getTemplates($oldTheme);
                    $newTemplates = BackendExtensionsModel::getTemplates($newTheme);
                    // check if templates already exist
                    if (empty($newTemplates)) {
                        // templates do not yet exist; don't switch
                        $this->redirect(BackendModel::createURLForAction('Themes') . '&error=no-templates-available');
                        return;
                    }
                    // fetch current default template
                    $oldDefaultTemplatePath = $oldTemplates[$this->get('fork.settings')->get('Pages', 'default_template')]['path'];
                    // loop new templates
                    foreach ($newTemplates as $newTemplateId => $newTemplate) {
                        // check if a a similar default template exists
                        if ($newTemplate['path'] == $oldDefaultTemplatePath) {
                            // set new default id
                            $newDefaultTemplateId = (int) $newTemplateId;
                            break;
                        }
                    }
                    // no default template was found, set first template as default
                    if (!isset($newDefaultTemplateId)) {
                        $newDefaultTemplateId = array_keys($newTemplates);
                        $newDefaultTemplateId = $newDefaultTemplateId[0];
                    }
                    // update theme
                    $this->get('fork.settings')->set('Core', 'theme', $newTheme);
                    // save new default template
                    $this->get('fork.settings')->set('Pages', 'default_template', $newDefaultTemplateId);
                    // loop old templates
                    foreach ($oldTemplates as $oldTemplateId => $oldTemplate) {
                        // loop new templates
                        foreach ($newTemplates as $newTemplateId => $newTemplate) {
                            // if the templates don't match we can skip this one
                            if ($oldTemplate['path'] != $newTemplate['path']) {
                                continue;
                            }
                            // switch template
                            BackendPagesModel::updatePagesTemplates($oldTemplateId, $newTemplateId);
                            // break loop
                            continue 2;
                        }
                        // getting here meant we found no matching template for the new theme; pick first theme's template as default
                        BackendPagesModel::updatePagesTemplates($oldTemplateId, $newDefaultTemplateId);
                    }
                    // trigger event
                    BackendModel::triggerEvent($this->getModule(), 'after_changed_theme');
                }
                // assign report
                $this->tpl->assign('report', true);
                $this->tpl->assign('reportMessage', BL::msg('Saved'));
            }
        }
    }