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