コード例 #1
0
 public function Tinhte_XenTag_execute(XenForo_DataWriter $dw)
 {
     if ($dw->isChanged('tags')) {
         return;
     }
     /** @var Tinhte_XenTag_XenForo_DataWriter_Discussion_Thread $dw */
     if (empty($this->_data['actions']['tinhte_xentag'])) {
         return;
     }
     $data = $this->_data['actions']['tinhte_xentag'];
     if (empty($data['remove']) && empty($data['add']) && empty($data['replace']) && empty($data['remove_all'])) {
         return;
     }
     /** @var XenForo_Model_Tag $tagModel */
     $tagModel = $dw->getModelFromCache('XenForo_Model_Tag');
     $tagger = $tagModel->getTagger('thread');
     $tagger->setContent($dw->get('thread_id'))->setPermissionsFromContext($dw->getMergedData(), $dw->Tinhte_XenTag_getForumData());
     if (!empty($data['remove'])) {
         $tagTexts = $tagModel->splitTags($data['remove']);
         $tagger->removeTags($tagTexts, false);
     }
     if (!empty($data['add'])) {
         $tagTexts = $tagModel->splitTags($data['add']);
         $tagger->addTags($tagTexts);
     }
     if (!empty($data['replace'])) {
         $tagTexts = $tagModel->splitTags($data['replace']);
         $tagger->setTags($tagTexts, false);
     } elseif (!empty($data['remove_all'])) {
         $tagger->setTags(array(), false);
     }
     $tagger->save();
 }
コード例 #2
0
 public static function postDataWriterSave(XenForo_DataWriter $writer, array $extraData = array())
 {
     $self = new self();
     $oldPath = false;
     $oldData = array_merge($writer->getMergedExistingData(), array('id' => $writer->get('phrase_id')));
     if ($writer->isUpdate()) {
         $oldPath = $self->getDirectory($writer->getMergedExistingData()) . self::$s . $self->getFileName($oldData);
     }
     $newPath = false;
     $newData = array_merge($writer->getMergedData(), array('id' => $writer->get('phrase_id')));
     if ($writer->isChanged('addon_id') or $writer->isChanged('title')) {
         $newPath = $self->getDirectory($newData) . self::$s . $self->getFileName($newData);
     }
     if (!$oldPath) {
         $oldPath = $newPath;
     }
     if (!DevTools_Helper_File::write($oldPath, $writer->get('phrase_text'), array('id' => $writer->get('phrase_id')))) {
         throw new XenForo_Exception("Failed to write phrase file to {$oldPath}");
         return;
     }
     if ($newPath && $oldPath) {
         rename($oldPath, $newPath);
     }
     $self->touchDb();
 }
コード例 #3
0
 public static function postDataWriterDelete(XenForo_DataWriter $writer, array $extraData = array())
 {
     if (!isset($extraData['styleId']) || !isset($extraData['self'])) {
         return;
     }
     $styleId = $extraData['styleId'];
     $self = $extraData['self'];
     $contents = XenForo_Model::create('XenForo_Model_StyleProperty')->replacePropertiesInTemplateForEditor($writer->get('template'), $styleId, $self->getPropertiesInStyle($styleId));
     $contents = XenForo_Model::create('XenForo_Model_Template')->replaceIncludesWithLinkRel($contents);
     $template = array('id' => $writer->get('template_id'), 'contents' => $contents, 'addon_id' => $writer->get('addon_id'), 'title' => $writer->get('title'));
     $template['fileName'] = $self->getFileName($template);
     $self->trashFile($template);
     unlink($self->getDirectory($writer->getMergedData()) . self::$s . $template['fileName']);
     $self->touchDb();
 }
コード例 #4
0
 public function assertNoDwErrors(XenForo_DataWriter $dw, $checkMethod, $dataType)
 {
     switch (strtolower($checkMethod)) {
         case 'delete':
         case 'predelete':
             $checkMethod = 'preDelete';
             break;
         case 'save':
         case 'presave':
         default:
             $checkMethod = 'preSave';
             break;
     }
     $dw->{$checkMethod}();
     if ($errors = $dw->getErrors()) {
         $filePath = $this->getDirectory($dw->getMergedData()) . self::$s . $this->getFileName($dw->getMergedData());
         if (count($errors) == 1) {
             $error = htmlspecialchars_decode($errors[key($errors)]);
             // Yes Nathan, I could use regex but fuu
             if (strpos($error, 'Line ') === 0) {
                 $pos = strpos($error, ':');
                 $line = substr($error, 5, $pos - 5);
                 $error = trim(substr($error, $pos + 1));
             }
             $errorString = 'E: ' . $dataType . ' Error: ' . $error . " in " . $filePath;
             if (isset($line)) {
                 $errorString .= ", line {$line} \n\n";
             } else {
                 $errorString .= "\n\n";
             }
         } else {
             foreach ($errors as &$err) {
                 $err = htmlspecialchars_decode($err);
             }
             $errorString = 'E: ' . $dataType . " Error: \nin " . $filePath . "\n";
             $errorString .= implode("\n", $errors) . "\n\n";
         }
         XenForo_Helper_File::log('devtools-error', str_replace("\n", ' ', $errorString));
         $this->printDebugInfo($errorString);
         die;
         // throwing wasn't working with console so just doing this
         throw new XenForo_Exception($errorString);
     }
 }