Ejemplo n.º 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();
 }
Ejemplo n.º 2
0
 public function bdSocialShare_actionSave(XenForo_DataWriter $dw)
 {
     $dataId = $dw->get('photo_data_id');
     if (empty($dataId)) {
         // sonnb - XenGallery v2.0.0
         $dataId = $dw->get('content_data_id');
     }
     if ($this->_bdSocialShare_shouldProcessDataId($dataId)) {
         /* @var $helper bdSocialShare_ControllerHelper_SocialShare */
         $helper = $this->getHelper('bdSocialShare_ControllerHelper_SocialShare');
         if ($dw instanceof sonnb_XenGallery_DataWriter_Photo) {
             $helper->publishAsNeeded('sonnbXenGalleryPhotoAttach', new bdSocialShare_Shareable_sonnb_XenGallery_Photo($dw), $dataId);
         } else {
             $helper->publishAsNeeded('sonnbXenGalleryPhotoAttach', new bdSocialShare_Shareable_sonnb_XenGallery_Video($dw), $dataId);
         }
     }
 }
Ejemplo n.º 3
0
 public static function verifyPosition(&$positions, XenForo_DataWriter $dw, $fieldName = false)
 {
     $positions = trim($positions);
     if (empty($positions)) {
         $dw->error(new XenForo_Phrase('wf_position_can_not_be_empty'), $fieldName);
     }
     if ('all' == $positions) {
         return true;
     }
     /** @var XenForo_Model_Template $templateModel */
     $templateModel = $dw->getModelFromCache('XenForo_Model_Template');
     $db = XenForo_Application::getDb();
     $positionsArray = explode(',', $positions);
     $positionsGood = array();
     $templateForHooks = array();
     foreach ($positionsArray as $position) {
         $position = trim($position);
         if (empty($position)) {
             continue;
         }
         if (in_array($position, array('wf_widget_page', 'hook:wf_widget_page_contents'), true) and !$dw->get('widget_page_id')) {
             $dw->error(new XenForo_Phrase('wf_position_x_requires_widget_page', array('position' => $position)), $fieldName);
             return false;
         }
         if (in_array($position, array('wf_widget_ajax'), true)) {
             $dw->error(new XenForo_Phrase('wf_invalid_position_x', array('position' => $position)), $fieldName);
             return false;
         }
         // sondh@2012-08-25
         // added support for hook:hook_name
         if (substr($position, 0, 5) == 'hook:') {
             // accept all kind of hooks, just need to get parent templates for them
             $templates = $db->fetchAll("\n\t\t\t\t\tSELECT title\n\t\t\t\t\tFROM `xf_template_compiled`\n\t\t\t\t\tWHERE template_compiled LIKE " . XenForo_Db::quoteLike('callTemplateHook(\'' . substr($position, 5) . '\',', 'lr') . "\n\t\t\t\t");
             if (count($templates) > 0) {
                 $templateForHooks[$position] = array();
                 foreach ($templates as $template) {
                     $templateForHooks[$position][] = $template['title'];
                 }
                 $templateForHooks[$position] = array_unique($templateForHooks[$position]);
             } else {
                 $dw->error(new XenForo_Phrase('wf_non_existent_hook_x', array('hook' => substr($position, 5))), $fieldName);
                 return false;
             }
         } elseif (!$templateModel->getTemplateInStyleByTitle($position)) {
             $dw->error(new XenForo_Phrase('wf_invalid_position_x', array('position' => $position)), $fieldName);
             return false;
         }
         $positionsGood[] = $position;
     }
     $dw->setExtraData(WidgetFramework_DataWriter_Widget::EXTRA_DATA_TEMPLATE_FOR_HOOKS, $templateForHooks);
     asort($positionsGood);
     $positions = implode(', ', $positionsGood);
     return true;
 }
Ejemplo n.º 4
0
 public static function VerifyDefaultValue(&$defaultValue, XenForo_DataWriter $dw, $inputName = false)
 {
     if ($defaultValue == '') {
         return true;
     }
     $fieldType = $dw->get('field_type');
     if ($fieldType == 'datetime') {
         if (is_string($defaultValue)) {
             $temp = explode(' ', $defaultValue);
             if (count($temp) != 2) {
                 $dw->error(new XenForo_Phrase('lpsf_please_enter_a_datetime_in_format'), $inputName);
                 return false;
             }
             $defaultValue = array('date' => $temp[0], 'time' => $temp[1]);
         }
         if (is_array($defaultValue) && array_key_exists('date', $defaultValue) && array_key_exists('time', $defaultValue)) {
             // validate
             $dateTimeStr = $defaultValue['date'] . ' ' . $defaultValue['time'];
             $dateTime = DateTime::createFromFormat('Y-m-d g:ia', $dateTimeStr);
             if (!$dateTime) {
                 $dw->error(new XenForo_Phrase('lpsf_please_enter_a_datetime_in_format'), $inputName);
                 return false;
             }
             $defaultValue = $dateTimeStr;
         }
     }
     if ($fieldType == 'time') {
         $dateTime = DateTime::createFromFormat('g:ia', $defaultValue);
         if (!$dateTime) {
             $dw->error(new XenForo_Phrase('lpsf_please_enter_a_time_in_format'), $inputName);
             return false;
         }
     }
     if ($fieldType == 'date') {
         $dateTime = DateTime::createFromFormat('Y-m-d', $defaultValue);
         if (!$dateTime) {
             $dw->error(new XenForo_Phrase('lpsf_please_enter_a_date_in_format'), $inputName);
             return false;
         }
     }
     return true;
 }
Ejemplo n.º 5
0
 public static function assertNoErrors(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()) {
         $errorString = implode("\n\t", $errors);
         XenForo_Helper_File::log('webdav-error', sprintf("%s:\n\t%s\n\t%s", $dataType, $dw->get('title'), $errorString), false);
         // Note that in order to have Dreamweaver actually show an error, we have to use 'Forbidden'.
         throw new Sabre_DAV_Exception_Forbidden($errorString);
     }
 }
Ejemplo n.º 6
0
 public static function postDataWriterDelete(XenForo_DataWriter $writer, array $extraData = array())
 {
     $self = new self();
     $phrase = array('id' => $writer->get('phrase_id'), 'contents' => $writer->get('phrase_text'), 'addon_id' => $writer->get('addon_id'), 'title' => $writer->get('title'));
     $phrase['fileName'] = $self->getFileName($phrase);
     $self->trashFile($phrase);
     unlink($self->getDirectory($phrase) . self::$s . $phrase['fileName']);
 }
Ejemplo n.º 7
0
 public function rebuildFieldChoices(XenForo_DataWriter $dw)
 {
     $classId = $dw->get('class_id');
     $objects = $this->getObjects(array('class_id' => $classId));
     $fieldChoices = array();
     foreach ($objects as $object) {
         $fieldChoices[$object['object_id']] = $object['title'];
     }
     $dw->setFieldChoices($fieldChoices);
 }
Ejemplo n.º 8
0
 public static function verifyPosition(&$positions, XenForo_DataWriter $dw, $fieldName = false)
 {
     if ($dw->get('widget_page_id') > 0) {
         if ($positions === 'sidebar') {
             // good
         } else {
             $positions = '';
         }
         return true;
     }
     // sondh@2012-08-28
     // it may be better to use strtolower with $positions (making it easier for
     // admins)
     // but some add-on developers decided to use template with mixed case characters
     // so...
     // no strtolower goodness for everyone.
     $positions = trim($positions);
     if (empty($positions)) {
         $dw->error(new XenForo_Phrase('wf_position_can_not_be_empty'), $fieldName);
     }
     if ('all' == $positions) {
         return true;
     }
     $templateModel = $dw->getModelFromCache('XenForo_Model_Template');
     $db = XenForo_Application::getDb();
     $positionsArray = explode(',', $positions);
     $positionsGood = array();
     $templateForHooks = array();
     foreach ($positionsArray as $position) {
         $position = trim($position);
         if (empty($position)) {
             continue;
         }
         // sondh@2012-08-25
         // added support for hook:hook_name
         if (substr($position, 0, 5) == 'hook:') {
             // accept all kind of hooks, just need to get parent templates for them
             $templates = $db->fetchAll("\n\t\t\t\t\tSELECT title\n\t\t\t\t\tFROM `xf_template_compiled`\n\t\t\t\t\tWHERE template_compiled LIKE " . XenForo_Db::quoteLike('callTemplateHook(\'' . substr($position, 5) . '\',', 'lr') . "\n\t\t\t\t");
             if (count($templates) > 0) {
                 $templateForHooks[$position] = array();
                 foreach ($templates as $template) {
                     $templateForHooks[$position][] = $template['title'];
                 }
                 $templateForHooks[$position] = array_unique($templateForHooks[$position]);
             } else {
                 $dw->error(new XenForo_Phrase('wf_non_existent_hook_x', array('hook' => substr($position, 5))), $fieldName);
                 return false;
             }
         } else {
             $found = $templateModel->getTemplateInStyleByTitle($position);
             if (!$found) {
                 $dw->error(new XenForo_Phrase('wf_invalid_position_x', array('position' => $position)), $fieldName);
                 return false;
             }
         }
         $positionsGood[] = $position;
     }
     $dw->setExtraData(WidgetFramework_DataWriter_Widget::EXTRA_DATA_TEMPLATE_FOR_HOOKS, $templateForHooks);
     asort($positionsGood);
     $positions = implode(', ', $positionsGood);
     return true;
 }
Ejemplo n.º 9
0
 protected function _checkContentState(XenForo_DataWriter $dw)
 {
     switch ($this->get('content_type')) {
         case sonnb_XenGallery_Model_Album::$contentType:
             return $dw->get('album_state');
             break;
         case sonnb_XenGallery_Model_Photo::$contentType:
         case sonnb_XenGallery_Model_Video::$contentType:
         default:
             return $dw->get('content_state');
             break;
     }
 }
Ejemplo n.º 10
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();
 }