Пример #1
0
 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();
 }
Пример #2
0
 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);
     }
 }