public function autoMergeTemplate(array $template, XenForo_Diff3 $diff) { /** @var $styleModel XenForo_Model_Style */ $styleModel = $this->getModelFromCache('XenForo_Model_Style'); $style = $styleModel->getStyleById($template['style_id']); if (!$style) { return false; } $parentStyle = $styleModel->getStyleById($style['parent_id'], true); if (!$parentStyle) { return false; } if ($parentStyle['style_id']) { $parentTemplate = $this->getEffectiveTemplateByTitle($template['title'], $parentStyle['style_id']); } else { $parentTemplate = $this->getTemplateInStyleByTitle($template['title'], 0); } if (!$parentTemplate) { return false; } if (!$parentTemplate['last_edit_date'] || $parentTemplate['last_edit_date'] < $template['last_edit_date']) { return false; } $previousVersion = $this->getLatestTemplateHistoryForTemplate($template['title'], $parentTemplate['style_id'], $template['last_edit_date']); if (!$previousVersion) { return false; } if (!isset($template['template'])) { $template = $this->getTemplateById($template['template_id']); } if (!$template) { return false; } $final = $diff->mergeToFinal($template['template'], $previousVersion['template'], $parentTemplate['template']); if ($final === false) { return false; } $dw = XenForo_DataWriter::create('XenForo_DataWriter_Template'); $dw->setExistingData($template); $dw->set('template', $final); $dw->set('last_edit_date', XenForo_Application::$time); return $dw->save(); }
public function actionMergeOutdated() { $results = $this->_getTemplateWithParentForCompare(); $template = $results['template']; $style = $results['style']; $parentStyle = $results['parentStyle']; $parentTemplate = $results['parentTemplate']; if (!$parentTemplate['last_edit_date'] || $parentTemplate['last_edit_date'] < $template['last_edit_date']) { return $this->responseError(new XenForo_Phrase('custom_template_out_of_date_edited_recently_no_merge')); } $previousVersion = $this->_getTemplateModel()->getLatestTemplateHistoryForTemplate($template['title'], $parentTemplate['style_id'], $template['last_edit_date']); if (!$previousVersion) { return $this->responseError(new XenForo_Phrase('no_previous_version_of_parent_could_be_found')); } if ($this->isConfirmedPost()) { $merged = $this->_input->filterSingle('merged', array(XenForo_Input::STRING, 'array' => true, 'noTrim' => true)); $final = implode("\n", $merged); $dw = XenForo_DataWriter::create('XenForo_DataWriter_Template'); $dw->setExistingData($template); $dw->set('template', $final); $dw->set('last_edit_date', XenForo_Application::$time); $dw->save(); return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildAdminLink('templates/outdated')); } else { $diff = new XenForo_Diff3(); $diffs = $diff->findDifferences($template['template'], $previousVersion['template'], $parentTemplate['template']); $viewParams = array('template' => $template, 'parentTemplate' => $parentTemplate, 'previousVersion' => $previousVersion, 'style' => $style, 'parentStyle' => $parentStyle, 'diffs' => $diffs); return $this->responseView('XenForo_ViewAdmin_Template_MergeOutdated', 'template_merge_outdated', $viewParams); } }