Esempio n. 1
0
 public function actionEdit()
 {
     $mediaID = $this->_input->filterSingle('media_id', XenForo_Input::UINT);
     if (!($media = $this->getModelFromCache('EWRmedio_Model_Media')->getMediaByID($mediaID))) {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL_PERMANENT, XenForo_Link::buildPublicLink('media'));
     }
     if (!$this->perms['mod'] && $media['user_id'] !== XenForo_Visitor::getUserId()) {
         return $this->responseNoPermission();
     }
     if ($this->perms['admin'] || $media['user_id'] == XenForo_Visitor::getUserId()) {
         $this->perms['alter'] = true;
     }
     if ($this->_request->isPost()) {
         $input = $this->_input->filter(array('category_id' => XenForo_Input::UINT, 'media_title' => XenForo_Input::STRING, 'media_hours' => XenForo_Input::UINT, 'media_minutes' => XenForo_Input::UINT, 'media_seconds' => XenForo_Input::UINT, 'media_keywords' => XenForo_Input::STRING, 'media_keyarray' => XenForo_Input::ARRAY_SIMPLE, 'media_keylinks' => XenForo_Input::ARRAY_SIMPLE, 'media_oldlinks' => XenForo_Input::ARRAY_SIMPLE, 'media_custom1' => XenForo_Input::ARRAY_SIMPLE, 'media_custom2' => XenForo_Input::ARRAY_SIMPLE, 'media_custom3' => XenForo_Input::ARRAY_SIMPLE, 'media_custom4' => XenForo_Input::ARRAY_SIMPLE, 'media_custom5' => XenForo_Input::ARRAY_SIMPLE, 'submit' => XenForo_Input::STRING));
         $input['media_id'] = $media['media_id'];
         $input['media_description'] = $this->getHelper('Editor')->getMessageText('media_description', $this->_input);
         $input['bypass'] = $this->perms['bypass'];
         if (!empty($input['media_keyarray'])) {
             $input['media_keywords'] = implode(',', $input['media_keyarray']);
         }
         if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
             return $this->responseCaptchaFailed();
         }
         $media = $this->getModelFromCache('EWRmedio_Model_Media')->updateMedia($input);
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('media', $media));
     }
     $category = $this->getModelFromCache('EWRmedio_Model_Categories')->getCategoryByID($media['category_id']);
     $viewParams = array('perms' => $this->perms, 'captcha' => XenForo_Captcha_Abstract::createDefault(), 'media' => $media, 'customs' => $this->getModelFromCache('EWRmedio_Model_Custom')->getCustomOptions($media), 'keylinks' => $this->getModelFromCache('EWRmedio_Model_Media')->getKeywordLinks($media), 'fullList' => $this->getModelFromCache('EWRmedio_Model_Lists')->getCategoryList(), 'services' => $this->getModelFromCache('EWRmedio_Model_Services')->getServices(), 'breadCrumbs' => array_reverse($this->getModelFromCache('EWRmedio_Model_Lists')->getCrumbs($category)));
     if (!XenForo_Application::get('options')->EWRmedio_newkeywords) {
         $viewParams['keywords'] = $this->getModelFromCache('EWRmedio_Model_Media')->getKeywordNolinks($media);
     }
     return $this->responseView('EWRmedio_ViewPublic_MediaEdit', 'EWRmedio_MediaEdit', $viewParams);
 }
Esempio n. 2
0
 public function actionCreatePage()
 {
     if (!$this->perms['create']) {
         return $this->responseNoPermission();
     }
     $input = array('page_name' => '', 'page_content' => '', 'page_type' => $this->_input->filterSingle('page_type', XenForo_Input::STRING), 'page_index' => 0, 'page_protect' => 0, 'page_sidebar' => 1, 'page_sublist' => 1, 'page_groups' => '', 'page_users' => '', 'page_admins' => '');
     $attachmentParams = array('hash' => md5(uniqid('', true)), 'content_type' => 'wiki', 'content_data' => array('page_id' => ''));
     $attachmentConstraints = $this->getModelFromCache('XenForo_Model_Attachment')->getAttachmentConstraints();
     $attachments = array();
     if ($this->_request->isPost()) {
         $input = $this->_input->filter(array('attachment_hash' => XenForo_Input::STRING, 'page_name' => XenForo_Input::STRING, 'page_slug' => XenForo_Input::STRING, 'page_type' => XenForo_Input::STRING, 'page_parent' => XenForo_Input::UINT, 'submit' => XenForo_Input::STRING)) + $input;
         $input['page_content'] = $this->getHelper('Editor')->getMessageText('page_content', $this->_input);
         if ($this->perms['admin']) {
             $input = $this->_input->filter(array('page_index' => XenForo_Input::UINT, 'page_protect' => XenForo_Input::UINT, 'page_sidebar' => XenForo_Input::UINT, 'page_sublist' => XenForo_Input::UINT, 'page_groups' => array(XenForo_Input::UINT, array('array' => true)), 'usernames' => XenForo_Input::STRING, 'administrators' => XenForo_Input::STRING)) + $input;
             $input['page_groups'] = implode(',', $input['page_groups']);
         }
         if ($input['page_content'] && $input['submit']) {
             if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
                 return $this->responseCaptchaFailed();
             }
             $page = $this->getModelFromCache('EWRcarta_Model_Pages')->updatePage($input);
             return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('wiki', $page));
         }
         if ($input['attachment_hash']) {
             $attachmentParams['hash'] = $input['attachment_hash'];
             $attachments = $this->getModelFromCache('XenForo_Model_Attachment')->getAttachmentsByTempHash($attachmentParams['hash']);
         }
     }
     if ($input['page_type'] == 'phpfile' && !$this->perms['admin']) {
         $input['page_type'] = 'bbcode';
     }
     $viewParams = array('attachmentParams' => $attachmentParams, 'attachments' => $this->getModelFromCache('XenForo_Model_Attachment')->prepareAttachments($attachments), 'attachmentConstraints' => $attachmentConstraints, 'perms' => $this->perms, 'input' => $input, 'captcha' => XenForo_Captcha_Abstract::createDefault(), 'groups' => $this->getModelFromCache('XenForo_Model_UserGroup')->getUserGroupOptions($input['page_groups']), 'fullList' => $this->getModelFromCache('EWRcarta_Model_Lists')->getPageList());
     return $this->responseView('EWRcarta_ViewPublic_PageCreate', 'EWRcarta_PageCreate', $viewParams);
 }
Esempio n. 3
0
 /**
  * Submits a lost password reset request.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionLost()
 {
     if (XenForo_Visitor::getUserId()) {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL, XenForo_Link::buildPublicLink('index'));
     }
     $this->_assertPostOnly();
     $options = XenForo_Application::get('options');
     if ($options->lostPasswordCaptcha) {
         if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
             return $this->responseError(new XenForo_Phrase('did_not_complete_the_captcha_verification_properly'));
         }
     }
     $usernameOrEmail = $this->_input->filterSingle('username_email', XenForo_Input::STRING);
     $user = $this->_getUserModel()->getUserByNameOrEmail($usernameOrEmail);
     if (!$user) {
         return $this->responseError(new XenForo_Phrase('requested_member_not_found'), 404);
     }
     $confirmationModel = $this->_getUserConfirmationModel();
     if ($options->lostPasswordTimeLimit) {
         if ($confirmation = $confirmationModel->getUserConfirmationRecord($user['user_id'], 'password')) {
             $timeDiff = XenForo_Application::$time - $confirmation['confirmation_date'];
             if ($options->lostPasswordTimeLimit > $timeDiff) {
                 return $this->responseFlooding($options->lostPasswordTimeLimit - $timeDiff);
             }
         }
     }
     $confirmationModel->sendPasswordResetRequest($user);
     return $this->responseMessage(new XenForo_Phrase('password_reset_request_has_been_emailed_to_you'));
 }
Esempio n. 4
0
 protected function _getDefaultViewParams(array $forum, array $thread, array $posts, $page = 1, array $viewParams = array())
 {
     $viewParams = parent::_getDefaultViewParams($forum, $thread, $posts, $page, $viewParams);
     //prd($thread);
     if (!empty($thread['node_id']) && $this->_getCaptchaModel()->checkRequiredCaptcha('thread_reply_captcha', $thread['node_id'])) {
         $viewParams['captcha'] = XenForo_Captcha_Abstract::createDefault(true);
     }
     return $viewParams;
 }
Esempio n. 5
0
 protected function _loginErrorResponse($error, $defaultLogin, $needCaptcha, $redirect = false, array $postData = null)
 {
     if ($needCaptcha && XenForo_Application::getOptions()->loginLimit == 'captcha') {
         $captcha = XenForo_Captcha_Abstract::createDefault(true);
     } else {
         $captcha = false;
     }
     return $this->responseView('XenForo_ViewPublic_Login', 'error_with_login', array('text' => $error, 'defaultLogin' => $defaultLogin, 'captcha' => $captcha, 'redirect' => $redirect, 'postData' => $postData));
 }
Esempio n. 6
0
 protected function _loginErrorResponse($error, $defaultLogin, $needCaptcha, $redirect = false)
 {
     if ($needCaptcha) {
         $captcha = XenForo_Captcha_Abstract::createDefault(true);
     } else {
         $captcha = false;
     }
     return $this->responseView('XenForo_ViewPublic_Login', 'error_with_login', array('text' => $error, 'defaultLogin' => $defaultLogin, 'captcha' => $captcha, 'redirect' => $redirect));
 }
Esempio n. 7
0
 public function actionAddThread()
 {
     $forumId = $this->_input->filterSingle('node_id', XenForo_Input::UINT);
     $forumName = $this->_input->filterSingle('node_name', XenForo_Input::STRING);
     $ftpHelper = $this->getHelper('ForumThreadPost');
     $forum = $ftpHelper->assertForumValidAndViewable($forumId ? $forumId : $forumName);
     if (!empty($forum['node_id']) && $this->_getCaptchaModel()->checkRequiredCaptcha('edit_thread_captcha', $forum['node_id']) && !XenForo_Captcha_Abstract::validateDefault($this->_input, true)) {
         return $this->responseCaptchaFailed();
     }
     return parent::actionAddThread();
 }
Esempio n. 8
0
 /**
  * Returns a new CAPTCHA
  *
  * @return XenForo_ControllerResponse_View
  */
 public function actionCaptcha()
 {
     $viewParams = array('captcha' => XenForo_Captcha_Abstract::createDefault());
     return $this->responseView('XenForo_ViewPublic_Misc_Captcha', 'captcha', $viewParams);
 }
Esempio n. 9
0
 /**
  * Inserts a new reply into an existing thread.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionAddReply()
 {
     $this->_assertPostOnly();
     if ($this->_input->inRequest('more_options')) {
         return $this->responseReroute(__CLASS__, 'reply');
     }
     $threadId = $this->_input->filterSingle('thread_id', XenForo_Input::UINT);
     $visitor = XenForo_Visitor::getInstance();
     $ftpHelper = $this->getHelper('ForumThreadPost');
     $threadFetchOptions = array('readUserId' => $visitor['user_id']);
     $forumFetchOptions = array('readUserId' => $visitor['user_id']);
     list($thread, $forum) = $ftpHelper->assertThreadValidAndViewable($threadId, $threadFetchOptions, $forumFetchOptions);
     $this->_assertCanReplyToThread($thread, $forum);
     if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
         return $this->responseCaptchaFailed();
     }
     $input = $this->_input->filter(array('attachment_hash' => XenForo_Input::STRING, 'watch_thread_state' => XenForo_Input::UINT, 'watch_thread' => XenForo_Input::UINT, 'watch_thread_email' => XenForo_Input::UINT, '_set' => array(XenForo_Input::UINT, 'array' => true), 'discussion_open' => XenForo_Input::UINT, 'sticky' => XenForo_Input::UINT));
     $input['message'] = $this->getHelper('Editor')->getMessageText('message', $this->_input);
     $input['message'] = XenForo_Helper_String::autoLinkBbCode($input['message']);
     $writer = XenForo_DataWriter::create('XenForo_DataWriter_DiscussionMessage_Post');
     $writer->set('user_id', $visitor['user_id']);
     $writer->set('username', $visitor['username']);
     $writer->set('message', $input['message']);
     $writer->set('message_state', $this->_getPostModel()->getPostInsertMessageState($thread, $forum));
     $writer->set('thread_id', $threadId);
     $writer->setExtraData(XenForo_DataWriter_DiscussionMessage::DATA_ATTACHMENT_HASH, $input['attachment_hash']);
     $writer->setExtraData(XenForo_DataWriter_DiscussionMessage_Post::DATA_FORUM, $forum);
     $writer->setOption(XenForo_DataWriter_DiscussionMessage_Post::OPTION_MAX_TAGGED_USERS, $visitor->hasPermission('general', 'maxTaggedUsers'));
     $spamModel = $this->_getSpamPreventionModel();
     if (!$writer->hasErrors() && $writer->get('message_state') == 'visible' && $spamModel->visitorRequiresSpamCheck()) {
         $spamExtraParams = array('permalink' => XenForo_Link::buildPublicLink('canonical:threads', $thread));
         switch ($spamModel->checkMessageSpam($input['message'], $spamExtraParams, $this->_request)) {
             case XenForo_Model_SpamPrevention::RESULT_MODERATED:
                 $writer->set('message_state', 'moderated');
                 break;
             case XenForo_Model_SpamPrevention::RESULT_DENIED:
                 $spamModel->logSpamTrigger('post', null);
                 $writer->error(new XenForo_Phrase('your_content_cannot_be_submitted_try_later'));
                 break;
         }
     }
     $writer->preSave();
     if (!$writer->hasErrors()) {
         $this->assertNotFlooding('post');
     }
     $writer->save();
     $post = $writer->getMergedData();
     $spamModel->logContentSpamCheck('post', $post['post_id']);
     $spamModel->logSpamTrigger('post', $post['post_id']);
     $this->_getDraftModel()->deleteDraft('thread-' . $thread['thread_id']);
     $this->_getThreadWatchModel()->setVisitorThreadWatchStateFromInput($threadId, $input);
     $threadUpdateData = array();
     if (!empty($input['_set']['discussion_open']) && $this->_getThreadModel()->canLockUnlockThread($thread, $forum)) {
         if ($thread['discussion_open'] != $input['discussion_open']) {
             $threadUpdateData['discussion_open'] = $input['discussion_open'];
         }
     }
     // discussion sticky state - moderator permission required
     if (!empty($input['_set']['sticky']) && $this->_getForumModel()->canStickUnstickThreadInForum($forum)) {
         if ($thread['sticky'] != $input['sticky']) {
             $threadUpdateData['sticky'] = $input['sticky'];
         }
     }
     if ($threadUpdateData) {
         $threadWriter = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
         $threadWriter->setExistingData($thread['thread_id']);
         $threadWriter->bulkSet($threadUpdateData);
         $threadWriter->setExtraData(XenForo_DataWriter_Discussion_Thread::DATA_FORUM, $forum);
         $threadWriter->save();
     }
     $canViewPost = $this->_getPostModel()->canViewPost($post, $thread, $forum);
     $page = floor(($thread['reply_count'] + 1) / XenForo_Application::get('options')->messagesPerPage) + 1;
     // this is a standard redirect
     if (!$this->_noRedirect() || !$this->_input->inRequest('last_date') || !$canViewPost) {
         $this->_getThreadModel()->markThreadRead($thread, $forum, XenForo_Application::$time);
         if (!$canViewPost) {
             $return = XenForo_Link::buildPublicLink('threads', $thread, array('page' => $page, 'posted' => 1));
         } else {
             $return = XenForo_Link::buildPublicLink('posts', $post);
         }
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $return, new XenForo_Phrase('your_message_has_been_posted'));
     } else {
         // load a selection of posts that are newer than the last post viewed
         $lastDate = $this->_input->filterSingle('last_date', XenForo_Input::UINT);
         $viewParams = $this->_getNewPosts($thread, $forum, $lastDate, 3);
         return $this->responseView('XenForo_ViewPublic_Thread_ViewNewPosts', 'thread_reply_new_posts', $viewParams);
     }
 }
Esempio n. 10
0
 public function actionSave()
 {
     $this->_assertPostOnly();
     $formId = $this->_input->filterSingle('form_id', XenForo_Input::UINT);
     $form = $this->_getFormOrError($formId);
     if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
         return $this->responseCaptchaFailed();
     }
     /* @var $writer LiquidPro_SimpleForms_DataWriter_Response */
     $writer = XenForo_DataWriter::create('LiquidPro_SimpleForms_DataWriter_Response');
     $writerData = array('form_id' => $formId, 'ip_address' => $_SERVER['REMOTE_ADDR'], 'response_date' => XenForo_Application::$time);
     // user id
     if (XenForo_Visitor::getUserId()) {
         $writerData['user_id'] = XenForo_Visitor::getUserId();
     }
     $writer->bulkSet($writerData);
     // attachment data
     $attachmentHash = $this->_input->filterSingle('attachment_hash', XenForo_Input::STRING);
     if ($attachmentHash) {
         $writer->setExtraData(LiquidPro_SimpleForms_DataWriter_Response::DATA_ATTACHMENT_HASH, $this->_input->filterSingle('attachment_hash', XenForo_Input::STRING));
     }
     // form_field values should go in the response data writer
     $fields = $this->_input->filterSingle('fields', XenForo_Input::ARRAY_SIMPLE);
     $fieldsShown = $this->_input->filterSingle('fields_shown', XenForo_Input::ARRAY_SIMPLE);
     // array to string conversion
     foreach ($fields as $fieldId => &$field) {
         //  handle wysiwyg
         if (is_array($field) && count($field) == 1) {
             if (array_key_exists('editor_html', $field)) {
                 $field = $this->getHelper('Editor')->convertEditorHtmlToBbCode($field['editor_html'], $this->_input);
             } else {
                 if (array_key_exists('editor', $field)) {
                     $field = $field['editor'];
                 }
             }
         }
         // handle datetime
         if (is_array($field) && count($field) == 2) {
             if (array_key_exists('date', $field) && array_key_exists('time', $field)) {
                 $field = $field['date'] . ' ' . $field['time'];
             }
         }
     }
     $writer->setFields($fields, $fieldsShown);
     $writer->preSave();
     if ($dwErrors = $writer->getErrors()) {
         return $this->responseError($dwErrors);
     }
     $writer->save();
     switch ($form['redirect_method']) {
         case 'url':
             if ($form['redirect_url'] == '') {
                 $visitor = XenForo_Visitor::getInstance();
                 if ($visitor->hasPermission('form', 'viewFormsList')) {
                     $redirectUrl = XenForo_Link::buildPublicLink('forms');
                 } else {
                     $redirectUrl = XenForo_Link::buildPublicLink('index');
                 }
             } else {
                 $redirectUrl = $form['redirect_url'];
             }
             break;
         case 'destination':
             $redirectUrl = $writer->getRedirectUrl();
             break;
         default:
             // redirect back to the form
             $redirectUrl = XenForo_Link::buildPublicLink('forms/respond', $form);
             break;
     }
     return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirectUrl, new XenForo_Phrase($form['complete_message']));
 }
Esempio n. 11
0
 public function actionEdit()
 {
     $pageSlug = $this->_input->filterSingle('page_slug', XenForo_Input::STRING);
     if (!($page = $this->getModelFromCache('EWRcarta_Model_Pages')->getPageBySlug($pageSlug))) {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('wiki'));
     }
     if (!empty($page['page_groups']) || !empty($page['page_users']) || !empty($page['page_admins'])) {
         $visitor = XenForo_Visitor::getInstance();
         if (!empty($page['page_groups'])) {
             $groups = explode(',', $page['page_groups']);
             $member = false;
             foreach ($groups as $group) {
                 if ($visitor->isMemberOf($group)) {
                     $this->perms['edit'] = true;
                     $override = true;
                     break;
                 }
             }
         }
         if (!empty($page['page_users'])) {
             $userIDs = explode(',', $page['page_users']);
             if (in_array($visitor['user_id'], $userIDs)) {
                 $this->perms['edit'] = true;
                 $override = true;
             }
             $users = $this->getModelFromCache('XenForo_Model_User')->getUsersByIds($userIDs);
             $usernames = array();
             foreach ($users as $user) {
                 $usernames[] = $user['username'];
             }
             $page['page_users'] = implode(', ', $usernames);
         }
         if (!empty($page['page_admins'])) {
             $userIDs = explode(',', $page['page_admins']);
             if (in_array($visitor['user_id'], $userIDs)) {
                 $this->perms['edit'] = true;
                 $this->perms['masks'] = true;
                 $override = true;
             }
             $users = $this->getModelFromCache('XenForo_Model_User')->getUsersByIds($userIDs);
             $usernames = array();
             foreach ($users as $user) {
                 $usernames[] = $user['username'];
             }
             $page['page_admins'] = implode(', ', $usernames);
         }
     }
     if (!$this->perms['edit']) {
         return $this->responseNoPermission();
     }
     if (!$this->perms['admin'] && $page['page_protect'] && empty($override)) {
         return $this->responseNoPermission();
     }
     $page['timestamp'] = XenForo_Application::$time;
     $attachmentParams = array('hash' => md5(uniqid('', true)), 'content_type' => 'wiki', 'content_data' => array('page_id' => $page['page_id']));
     $attachmentConstraints = $this->getModelFromCache('XenForo_Model_Attachment')->getAttachmentConstraints();
     $attachments = $this->getModelFromCache('XenForo_Model_Attachment')->getAttachmentsByContentId('wiki', $page['page_id']);
     if ($this->_request->isPost()) {
         $input = $this->_input->filter(array('attachment_hash' => XenForo_Input::STRING, 'page_name' => XenForo_Input::STRING, 'page_slugNew' => XenForo_Input::STRING, 'page_type' => XenForo_Input::STRING, 'page_parent' => XenForo_Input::UINT, 'timestamp' => XenForo_Input::UINT, 'submit' => XenForo_Input::STRING));
         $input['page_id'] = $page['page_id'];
         $input['page_content'] = $this->getHelper('Editor')->getMessageText('page_content', $this->_input);
         $input['page_slug'] = $input['page_slugNew'];
         if ($this->perms['admin']) {
             $input = $this->_input->filter(array('page_index' => XenForo_Input::UINT, 'page_protect' => XenForo_Input::UINT, 'page_sidebar' => XenForo_Input::UINT, 'page_sublist' => XenForo_Input::UINT)) + $input;
             $page['page_index'] = $input['page_index'];
             $page['page_protect'] = $input['page_protect'];
             $page['page_sidebar'] = $input['page_sidebar'];
             $page['page_sublist'] = $input['page_sublist'];
         }
         if ($this->perms['admin'] || $this->perms['masks']) {
             $input = $this->_input->filter(array('page_groups' => array(XenForo_Input::UINT, array('array' => true)), 'usernames' => XenForo_Input::STRING, 'administrators' => XenForo_Input::STRING)) + $input;
             $input['page_groups'] = implode(',', $input['page_groups']);
             $page['page_groups'] = $input['page_groups'];
             $page['page_users'] = $input['usernames'];
             $page['page_admins'] = $input['administrators'];
         }
         if ($input['page_content'] && $input['submit']) {
             if ($page['page_date'] > $input['timestamp']) {
                 throw new XenForo_Exception(new XenForo_Phrase('page_has_been_edited'), true);
             }
             if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
                 return $this->responseCaptchaFailed();
             }
             $page = $this->getModelFromCache('EWRcarta_Model_Pages')->updatePage($input);
             return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('wiki', $page));
         }
         $attachmentParams['hash'] = $input['attachment_hash'];
         $page['page_name'] = $input['page_name'];
         $page['page_type'] = $input['page_type'];
         $page['page_parent'] = $input['page_parent'];
         $page['page_content'] = $input['page_content'];
         $page['timestamp'] = $input['timestamp'];
         $attachments += $this->getModelFromCache('XenForo_Model_Attachment')->getAttachmentsByTempHash($attachmentParams['hash']);
     }
     $children = array($page['page_id'] => $page);
     $children = $this->getModelFromCache('EWRcarta_Model_Lists')->getPageList($page['page_id'], $children);
     $fullList = $this->getModelFromCache('EWRcarta_Model_Lists')->getPageList();
     foreach ($fullList as &$list) {
         $list['disabled'] = array_key_exists($list['page_id'], $children) ? true : false;
     }
     $forums = array();
     foreach (XenForo_Application::get('options')->EWRcarta_wikiforum as $forum) {
         if ($forum = $this->getModelFromCache('XenForo_Model_Forum')->getForumById($forum)) {
             $forums[] = $forum;
         }
     }
     $viewParams = array('attachmentParams' => $attachmentParams, 'attachments' => $this->getModelFromCache('XenForo_Model_Attachment')->prepareAttachments($attachments), 'attachmentConstraints' => $attachmentConstraints, 'perms' => $this->perms, 'page' => $page, 'input' => !empty($input) ? $input : false, 'forums' => !empty($forums) ? $forums : false, 'thread' => !empty($page['thread_id']) ? $this->getModelFromCache('XenForo_Model_Thread')->getThreadById($page['thread_id']) : false, 'captcha' => XenForo_Captcha_Abstract::createDefault(), 'fullList' => $fullList, 'groups' => $this->getModelFromCache('XenForo_Model_UserGroup')->getUserGroupOptions($page['page_groups']), 'breadCrumbs' => array_reverse($this->getModelFromCache('EWRcarta_Model_Lists')->getCrumbs($page)));
     return $this->responseView('EWRcarta_ViewPublic_PageEdit', 'EWRcarta_PageEdit', $viewParams);
 }
Esempio n. 12
0
 /**
  * Registers a new user.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionRegister()
 {
     $this->_assertPostOnly();
     $this->_assertRegistrationActive();
     $errors = array();
     if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
         $errors[] = new XenForo_Phrase('did_not_complete_the_captcha_verification_properly');
     }
     $data = $this->_input->filter(array('username' => XenForo_Input::STRING, 'email' => XenForo_Input::STRING, 'timezone' => XenForo_Input::STRING, 'gender' => XenForo_Input::STRING, 'dob_day' => XenForo_Input::UINT, 'dob_month' => XenForo_Input::UINT, 'dob_year' => XenForo_Input::UINT));
     $passwords = $this->_input->filter(array('password' => XenForo_Input::STRING, 'password_confirm' => XenForo_Input::STRING));
     if (XenForo_Dependencies_Public::getTosUrl() && !$this->_input->filterSingle('agree', XenForo_Input::UINT)) {
         $errors[] = new XenForo_Phrase('you_must_agree_to_terms_of_service');
     }
     $options = XenForo_Application::get('options');
     $writer = XenForo_DataWriter::create('XenForo_DataWriter_User');
     if ($options->registrationDefaults) {
         $writer->bulkSet($options->registrationDefaults, array('ignoreInvalidFields' => true));
     }
     $writer->bulkSet($data);
     $writer->setPassword($passwords['password'], $passwords['password_confirm']);
     // if the email corresponds to an existing Gravatar, use it
     if ($options->gravatarEnable && XenForo_Model_Avatar::gravatarExists($data['email'])) {
         $writer->set('gravatar', $data['email']);
     }
     $writer->set('user_group_id', XenForo_Model_User::$defaultRegisteredGroupId);
     $writer->set('language_id', XenForo_Visitor::getInstance()->get('language_id'));
     $writer->advanceRegistrationUserState();
     $writer->preSave();
     if ($options->get('registrationSetup', 'requireDob')) {
         // dob required
         if (!$data['dob_day'] || !$data['dob_month'] || !$data['dob_year']) {
             $writer->error(new XenForo_Phrase('please_enter_valid_date_of_birth'), 'dob');
         } else {
             $userAge = $this->_getUserProfileModel()->getUserAge($writer->getMergedData(), true);
             if ($userAge < 1) {
                 $writer->error(new XenForo_Phrase('please_enter_valid_date_of_birth'), 'dob');
             } else {
                 if ($userAge < intval($options->get('registrationSetup', 'minimumAge'))) {
                     // TODO: set a cookie to prevent re-registration attempts
                     $errors[] = new XenForo_Phrase('sorry_you_too_young_to_create_an_account');
                 }
             }
         }
     }
     $errors = array_merge($errors, $writer->getErrors());
     if ($errors) {
         $fields = $data;
         $fields['tos'] = $this->_input->filterSingle('agree', XenForo_Input::UINT);
         return $this->_getRegisterFormResponse($fields, $errors);
     }
     $writer->save();
     $user = $writer->getMergedData();
     // log the ip of the user registering
     XenForo_Model_Ip::log($user['user_id'], 'user', $user['user_id'], 'register');
     if ($user['user_state'] == 'email_confirm') {
         $this->_getUserConfirmationModel()->sendEmailConfirmation($user);
     }
     XenForo_Application::get('session')->changeUserId($user['user_id']);
     XenForo_Visitor::setup($user['user_id']);
     $viewParams = array('user' => $user);
     return $this->responseView('XenForo_ViewPublic_Register_Process', 'register_process', $viewParams, $this->_getRegistrationContainerParams());
 }
Esempio n. 13
0
 public function actionAddReplyLive()
 {
     $this->_assertPostOnly();
     if ($this->_input->inRequest('more_options')) {
         return $this->responseReroute('XenForo_ControllerPublic_Thread', 'reply');
     }
     $threadId = $this->_input->filterSingle('thread_id', XenForo_Input::UINT);
     $visitor = XenForo_Visitor::getInstance();
     $xenOptions = XenForo_Application::getOptions();
     $ftpHelper = $this->getHelper('ForumThreadPost');
     $threadFetchOptions = array('readUserId' => $visitor['user_id']);
     $forumFetchOptions = array('readUserId' => $visitor['user_id']);
     list($thread, $forum) = $ftpHelper->assertThreadValidAndViewable($threadId, $threadFetchOptions, $forumFetchOptions);
     if (!$thread['sonnb_live_thread'] && !$this->_isAlwaysLive($thread['node_id'])) {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_UPDATED, XenForo_Link::buildPublicLink('threads', $thread));
     }
     $this->_assertCanReplyToThread($thread, $forum);
     if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
         return $this->responseCaptchaFailed();
     }
     $input = $this->_input->filter(array('attachment_hash' => XenForo_Input::STRING, 'watch_thread_state' => XenForo_Input::UINT, 'watch_thread' => XenForo_Input::UINT, 'watch_thread_email' => XenForo_Input::UINT, '_set' => array(XenForo_Input::UINT, 'array' => true), 'discussion_open' => XenForo_Input::UINT, 'sticky' => XenForo_Input::UINT));
     $input['message'] = $this->getHelper('Editor')->getMessageText('message', $this->_input);
     $input['message'] = XenForo_Helper_String::autoLinkBbCode($input['message']);
     $writer = XenForo_DataWriter::create('XenForo_DataWriter_DiscussionMessage_Post');
     $writer->set('user_id', $visitor['user_id']);
     $writer->set('username', $visitor['username']);
     $writer->set('message', $input['message']);
     $writer->set('message_state', $this->_getPostModel()->getPostInsertMessageState($thread, $forum));
     $writer->set('thread_id', $threadId);
     $writer->setExtraData(XenForo_DataWriter_DiscussionMessage::DATA_ATTACHMENT_HASH, $input['attachment_hash']);
     $writer->setExtraData(XenForo_DataWriter_DiscussionMessage_Post::DATA_FORUM, $forum);
     $writer->preSave();
     if (!$writer->hasErrors()) {
         $this->assertNotFlooding('post');
     }
     $writer->save();
     $post = $writer->getMergedData();
     $this->_getThreadWatchModel()->setVisitorThreadWatchStateFromInput($threadId, $input);
     $threadUpdateData = array();
     if (!empty($input['_set']['discussion_open']) && $this->_getThreadModel()->canLockUnlockThread($thread, $forum)) {
         if ($thread['discussion_open'] != $input['discussion_open']) {
             $threadUpdateData['discussion_open'] = $input['discussion_open'];
         }
     }
     if (!empty($input['_set']['sticky']) && $this->_getForumModel()->canStickUnstickThreadInForum($forum)) {
         if ($thread['sticky'] != $input['sticky']) {
             $threadUpdateData['sticky'] = $input['sticky'];
         }
     }
     if ($threadUpdateData) {
         $threadWriter = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
         $threadWriter->setExistingData($thread['thread_id']);
         $threadWriter->bulkSet($threadUpdateData);
         $threadWriter->setExtraData(XenForo_DataWriter_Discussion_Thread::DATA_FORUM, $forum);
         $threadWriter->save();
     }
     $canViewPost = $this->_getPostModel()->canViewPost($post, $thread, $forum);
     if ($visitor['user_id']) {
         $this->_getThreadModel()->markThreadRead($thread, $forum, XenForo_Application::$time);
     }
     $enablePagination = XenForo_Application::get('options')->sonnb_LiveThread_Pagination;
     $isLastPage = $this->_input->filterSingle('isLastPage', XenForo_Input::UINT);
     if ($enablePagination && !$isLastPage || !$this->_noRedirect() || !$this->_input->inRequest('last_date') || !$canViewPost) {
         if (!$canViewPost) {
             $return = XenForo_Link::buildPublicLink('threads', $thread);
         } else {
             $return = XenForo_Link::buildPublicLink('posts', $post) . '#post-' . $post['post_id'];
         }
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $return, new XenForo_Phrase('your_message_has_been_posted'));
     } else {
         $threadModel = $this->_getThreadModel();
         $postModel = $this->_getPostModel();
         $lastDate = $this->_input->filterSingle('last_date', XenForo_Input::UINT);
         $postFetchOptions = $this->_getPostFetchOptions($thread, $forum);
         $postFetchOptions += array('timestamp' => $lastDate, 'join' => XenForo_Model_Post::FETCH_USER);
         $posts = $postModel->getPostsInLiveThread($threadId, $postFetchOptions);
         $posts = $postModel->getAndMergeAttachmentsIntoPosts($posts);
         $permissions = $visitor->getNodePermissions($thread['node_id']);
         foreach ($posts as &$post) {
             $post = $postModel->preparePost($post, $thread, $forum, $permissions);
         }
         if ($xenOptions->sonnb_LiveThread_reserveOrder && !$xenOptions->sonnb_LiveThread_Pagination) {
             //$posts = array_reverse($posts, true);
         }
         if ($visitor['user_id']) {
             $threadModel->markThreadRead($thread, $forum, XenForo_Application::$time);
         }
         $viewParams = array('canViewAttachments' => $threadModel->canViewAttachmentsInThread($thread, $forum), 'canReply' => $threadModel->canReplyToThread($thread, $forum), 'canViewWarnings' => $this->getModelFromCache('XenForo_Model_User')->canViewWarnings(), 'ignoredNames' => $this->_getIgnoredContentUserNames($posts), 'canQuickReply' => $threadModel->canQuickReply($thread, $forum), 'canLiveManage' => $this->_hasLiveManagePermission(), 'canLiveThread' => $this->_hasLiveViewPermission(), 'onLiveThread' => true, 'thread' => $thread, 'forum' => $forum, 'posts' => $posts, 'reserveOrder' => $xenOptions->sonnb_LiveThread_reserveOrder && !$xenOptions->sonnb_LiveThread_Pagination);
         return $this->responseView('sonnb_LiveThread_ViewPublic_Thread_ReplyLive', 'thread_reply_new_posts', $viewParams);
     }
 }
Esempio n. 14
0
 /**
  * Inserts a new thread into this forum.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionAddThread()
 {
     $this->_assertPostOnly();
     $forumId = $this->_input->filterSingle('node_id', XenForo_Input::UINT);
     $forumName = $this->_input->filterSingle('node_name', XenForo_Input::STRING);
     $ftpHelper = $this->getHelper('ForumThreadPost');
     $forum = $ftpHelper->assertForumValidAndViewable($forumId ? $forumId : $forumName);
     $forumId = $forum['node_id'];
     $this->_assertCanPostThreadInForum($forum);
     if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
         return $this->responseCaptchaFailed();
     }
     $visitor = XenForo_Visitor::getInstance();
     $input = $this->_input->filter(array('title' => XenForo_Input::STRING, 'attachment_hash' => XenForo_Input::STRING, 'watch_thread_state' => XenForo_Input::UINT, 'watch_thread' => XenForo_Input::UINT, 'watch_thread_email' => XenForo_Input::UINT, '_set' => array(XenForo_Input::UINT, 'array' => true), 'discussion_open' => XenForo_Input::UINT, 'sticky' => XenForo_Input::UINT, 'poll' => XenForo_Input::ARRAY_SIMPLE));
     $input['message'] = $this->getHelper('Editor')->getMessageText('message', $this->_input);
     $input['message'] = XenForo_Helper_String::autoLinkBbCode($input['message']);
     $pollInputHandler = new XenForo_Input($input['poll']);
     $pollInput = $pollInputHandler->filter(array('question' => XenForo_Input::STRING, 'responses' => array(XenForo_Input::STRING, 'array' => true), 'multiple' => XenForo_Input::UINT, 'public_votes' => XenForo_Input::UINT, 'close' => XenForo_Input::UINT, 'close_length' => XenForo_Input::UNUM, 'close_units' => XenForo_Input::STRING));
     // note: assumes that the message dw will pick up the username issues
     $writer = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
     $writer->set('user_id', $visitor['user_id']);
     $writer->set('username', $visitor['username']);
     $writer->set('title', $input['title']);
     $writer->set('node_id', $forumId);
     // discussion state changes instead of first message state
     $writer->set('discussion_state', $this->getModelFromCache('XenForo_Model_Post')->getPostInsertMessageState(array(), $forum));
     // discussion open state - moderator permission required
     if (!empty($input['_set']['discussion_open']) && $this->_getForumModel()->canLockUnlockThreadInForum($forum)) {
         $writer->set('discussion_open', $input['discussion_open']);
     }
     // discussion sticky state - moderator permission required
     if (!empty($input['_set']['sticky']) && $this->_getForumModel()->canStickUnstickThreadInForum($forum)) {
         $writer->set('sticky', $input['sticky']);
     }
     $postWriter = $writer->getFirstMessageDw();
     $postWriter->set('message', $input['message']);
     $postWriter->setExtraData(XenForo_DataWriter_DiscussionMessage::DATA_ATTACHMENT_HASH, $input['attachment_hash']);
     $writer->preSave();
     if ($pollInput['question'] !== '') {
         $pollWriter = XenForo_DataWriter::create('XenForo_DataWriter_Poll');
         $pollWriter->bulkSet(XenForo_Application::arrayFilterKeys($pollInput, array('question', 'multiple', 'public_votes')));
         $pollWriter->set('content_type', 'thread');
         $pollWriter->set('content_id', 0);
         // changed before saving
         if ($pollInput['close']) {
             if (!$pollInput['close_length']) {
                 $pollWriter->error(new XenForo_Phrase('please_enter_valid_length_of_time'));
             } else {
                 $pollWriter->set('close_date', strtotime('+' . $pollInput['close_length'] . ' ' . $pollInput['close_units']));
             }
         }
         $pollWriter->addResponses($pollInput['responses']);
         $pollWriter->preSave();
         $writer->mergeErrors($pollWriter->getErrors());
         $writer->set('discussion_type', 'poll', '', array('setAfterPreSave' => true));
     } else {
         $pollWriter = false;
         foreach ($pollInput['responses'] as $response) {
             if ($response !== '') {
                 $writer->error(new XenForo_Phrase('you_entered_poll_response_but_no_question'));
                 break;
             }
         }
     }
     if (!$writer->hasErrors()) {
         $this->assertNotFlooding('post');
     }
     $writer->save();
     $thread = $writer->getMergedData();
     if ($pollWriter) {
         $pollWriter->set('content_id', $thread['thread_id'], '', array('setAfterPreSave' => true));
         $pollWriter->save();
     }
     $this->_getThreadWatchModel()->setVisitorThreadWatchStateFromInput($thread['thread_id'], $input);
     $this->_getThreadModel()->markThreadRead($thread, $forum, XenForo_Application::$time, $visitor['user_id']);
     if (!$this->_getThreadModel()->canViewThread($thread, $forum)) {
         $return = XenForo_Link::buildPublicLink('forums', $forum, array('posted' => 1));
     } else {
         $return = XenForo_Link::buildPublicLink('threads', $thread);
     }
     return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $return, new XenForo_Phrase('your_thread_has_been_posted'));
 }
Esempio n. 15
0
 public function actionSubmit()
 {
     if (!$this->perms['submit']) {
         return $this->responseNoPermission();
     }
     if ($this->_request->isPost()) {
         $input = $this->_input->filter(array('category_id' => XenForo_Input::UINT, 'service_id' => XenForo_Input::UINT, 'service_value' => XenForo_Input::STRING, 'service_value2' => XenForo_Input::STRING, 'media_thumb' => XenForo_Input::STRING, 'media_title' => XenForo_Input::STRING, 'media_hours' => XenForo_Input::UINT, 'media_minutes' => XenForo_Input::UINT, 'media_seconds' => XenForo_Input::UINT, 'media_keywords' => XenForo_Input::STRING, 'media_keyarray' => XenForo_Input::ARRAY_SIMPLE, 'media_custom1' => XenForo_Input::ARRAY_SIMPLE, 'media_custom2' => XenForo_Input::ARRAY_SIMPLE, 'media_custom3' => XenForo_Input::ARRAY_SIMPLE, 'media_custom4' => XenForo_Input::ARRAY_SIMPLE, 'media_custom5' => XenForo_Input::ARRAY_SIMPLE, 'media_node' => XenForo_Input::UINT, 'create_thread' => XenForo_Input::UINT, 'submit' => XenForo_Input::STRING));
         $input['bypass'] = $this->perms['bypass'];
         $input['media_description'] = $this->getHelper('Editor')->getMessageText('media_description', $this->_input);
         if (!($source = $this->_input->filterSingle('source', XenForo_Input::STRING))) {
             if (!empty($input['media_keyarray'])) {
                 $input['media_keywords'] = implode(',', $input['media_keyarray']);
             }
             if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
                 return $this->responseCaptchaFailed();
             }
             $media = $this->getModelFromCache('EWRmedio_Model_Media')->updateMedia($input);
             return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('media', $media));
         }
     }
     if ($source = $this->_input->filterSingle('source', XenForo_Input::STRING)) {
         $media = $this->getModelFromCache('EWRmedio_Model_Submit')->fetchFeedInfo($source);
     }
     $options = XenForo_Application::get('options');
     $forums = array();
     foreach ($options->EWRmedio_autoforum as $forum) {
         $forum = $this->getModelFromCache('XenForo_Model_Forum')->getForumById($forum);
         if ($forum && $this->getModelFromCache('XenForo_Model_Forum')->canPostThreadInForum($forum)) {
             $forums[] = $forum;
         }
     }
     $viewParams = array('captcha' => XenForo_Captcha_Abstract::createDefault(), 'media' => !empty($media) ? $media : false, 'customs' => $this->getModelFromCache('EWRmedio_Model_Custom')->getCustomOptions(), 'forums' => $forums, 'checked' => $options->EWRmedio_autocheck ? 'checked' : '', 'fullList' => $this->getModelFromCache('EWRmedio_Model_Lists')->getCategoryList());
     if (!$options->EWRmedio_newkeywords) {
         $viewParams['keywords'] = $this->getModelFromCache('EWRmedio_Model_Keywords')->getAllKeywords();
     }
     return $this->responseView('EWRmedio_ViewPublic_Submit', 'EWRmedio_Submit', $viewParams);
 }
Esempio n. 16
0
 /**
  * Inserts a new thread into this forum.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionAddThread()
 {
     $this->_assertPostOnly();
     $forumId = $this->_input->filterSingle('node_id', XenForo_Input::UINT);
     $forumName = $this->_input->filterSingle('node_name', XenForo_Input::STRING);
     $ftpHelper = $this->getHelper('ForumThreadPost');
     $forum = $ftpHelper->assertForumValidAndViewable($forumId ? $forumId : $forumName);
     $forumId = $forum['node_id'];
     $this->_assertCanPostThreadInForum($forum);
     if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
         return $this->responseCaptchaFailed();
     }
     $visitor = XenForo_Visitor::getInstance();
     $input = $this->_input->filter(array('title' => XenForo_Input::STRING, 'prefix_id' => XenForo_Input::UINT, 'attachment_hash' => XenForo_Input::STRING, 'tags' => XenForo_Input::STRING, 'watch_thread_state' => XenForo_Input::UINT, 'watch_thread' => XenForo_Input::UINT, 'watch_thread_email' => XenForo_Input::UINT, '_set' => array(XenForo_Input::UINT, 'array' => true), 'discussion_open' => XenForo_Input::UINT, 'sticky' => XenForo_Input::UINT, 'poll' => XenForo_Input::ARRAY_SIMPLE));
     $input['message'] = $this->getHelper('Editor')->getMessageText('message', $this->_input);
     $input['message'] = XenForo_Helper_String::autoLinkBbCode($input['message']);
     if (!$this->_getPrefixModel()->verifyPrefixIsUsable($input['prefix_id'], $forumId)) {
         $input['prefix_id'] = 0;
         // not usable, just blank it out
     }
     // note: assumes that the message dw will pick up the username issues
     $writer = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
     $writer->bulkSet(array('user_id' => $visitor['user_id'], 'username' => $visitor['username'], 'title' => $input['title'], 'prefix_id' => $input['prefix_id'], 'node_id' => $forumId));
     // discussion state changes instead of first message state
     $writer->set('discussion_state', $this->getModelFromCache('XenForo_Model_Post')->getPostInsertMessageState(array(), $forum));
     // discussion open state - moderator permission required
     if (!empty($input['_set']['discussion_open']) && $this->_getForumModel()->canLockUnlockThreadInForum($forum)) {
         $writer->set('discussion_open', $input['discussion_open']);
     }
     // discussion sticky state - moderator permission required
     if (!empty($input['_set']['sticky']) && $this->_getForumModel()->canStickUnstickThreadInForum($forum)) {
         $writer->set('sticky', $input['sticky']);
     }
     $postWriter = $writer->getFirstMessageDw();
     $postWriter->set('message', $input['message']);
     $postWriter->setExtraData(XenForo_DataWriter_DiscussionMessage::DATA_ATTACHMENT_HASH, $input['attachment_hash']);
     $postWriter->setExtraData(XenForo_DataWriter_DiscussionMessage_Post::DATA_FORUM, $forum);
     $postWriter->setOption(XenForo_DataWriter_DiscussionMessage_Post::OPTION_MAX_TAGGED_USERS, $visitor->hasPermission('general', 'maxTaggedUsers'));
     $writer->setExtraData(XenForo_DataWriter_Discussion_Thread::DATA_FORUM, $forum);
     $pollWriter = false;
     if ($this->_getForumModel()->canPostPollInForum($forum)) {
         $pollInputHandler = new XenForo_Input($input['poll']);
         $pollInput = $pollInputHandler->filter(array('question' => XenForo_Input::STRING, 'responses' => array(XenForo_Input::STRING, 'array' => true)));
         if ($pollInput['question'] !== '') {
             /** @var XenForo_Model_Poll $pollModel */
             $pollModel = $this->getModelFromCache('XenForo_Model_Poll');
             $pollWriter = $pollModel->setupNewPollFromForm($pollInputHandler);
             $pollWriter->set('content_type', 'thread');
             $pollWriter->set('content_id', 0);
             // changed before saving
             $pollWriter->preSave();
             $writer->mergeErrors($pollWriter->getErrors());
             $writer->set('discussion_type', 'poll', '', array('setAfterPreSave' => true));
         } else {
             foreach ($pollInput['responses'] as $response) {
                 if ($response !== '') {
                     $writer->error(new XenForo_Phrase('you_entered_poll_response_but_no_question'));
                     break;
                 }
             }
         }
     }
     $tagger = null;
     if ($this->_getThreadModel()->canEditTags(null, $forum)) {
         /** @var XenForo_Model_Tag $tagModel */
         $tagModel = $this->getModelFromCache('XenForo_Model_Tag');
         $tagger = $tagModel->getTagger('thread');
         $tagger->setPermissionsFromContext($forum)->setTags($tagModel->splitTags($input['tags']));
         $writer->mergeErrors($tagger->getErrors());
     }
     $spamModel = $this->_getSpamPreventionModel();
     if (!$writer->hasErrors() && $writer->get('discussion_state') == 'visible' && $spamModel->visitorRequiresSpamCheck()) {
         switch ($spamModel->checkMessageSpam($input['title'] . "\n" . $input['message'], array(), $this->_request)) {
             case XenForo_Model_SpamPrevention::RESULT_MODERATED:
                 $writer->set('discussion_state', 'moderated');
                 break;
             case XenForo_Model_SpamPrevention::RESULT_DENIED:
                 $spamModel->logSpamTrigger('thread', null);
                 $writer->error(new XenForo_Phrase('your_content_cannot_be_submitted_try_later'));
                 break;
         }
     }
     $writer->preSave();
     if ($forum['require_prefix'] && !$writer->get('prefix_id') && $this->_getPrefixModel()->getUsablePrefixesInForums($forum['node_id'])) {
         $writer->error(new XenForo_Phrase('please_select_a_prefix'), 'prefix_id');
     }
     if (!$writer->hasErrors()) {
         $this->assertNotFlooding('post');
     }
     $writer->save();
     $thread = $writer->getMergedData();
     if ($pollWriter) {
         $pollWriter->set('content_id', $thread['thread_id'], '', array('setAfterPreSave' => true));
         $pollWriter->save();
     }
     if ($tagger) {
         $tagger->setContent($thread['thread_id'], true)->save();
     }
     $spamModel->logContentSpamCheck('thread', $thread['thread_id']);
     $spamModel->logSpamTrigger('thread', $thread['thread_id']);
     $this->_getDraftModel()->deleteDraft('forum-' . $forum['node_id']);
     $this->_getThreadWatchModel()->setVisitorThreadWatchStateFromInput($thread['thread_id'], $input);
     $this->_getThreadModel()->markThreadRead($thread, $forum, XenForo_Application::$time);
     if (!$this->_getThreadModel()->canViewThread($thread, $forum)) {
         $return = XenForo_Link::buildPublicLink('forums', $forum, array('posted' => 1));
     } else {
         $return = XenForo_Link::buildPublicLink('threads', $thread);
     }
     return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $return, new XenForo_Phrase('your_thread_has_been_posted'));
 }
Esempio n. 17
0
 /**
  * Registers a new user.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionRegister()
 {
     $this->_assertPostOnly();
     $this->_assertRegistrationActive();
     $inputData = $this->_getRegistrationInputDataSafe();
     $data = $inputData['data'];
     $passwords = $inputData['passwords'];
     $customFields = $inputData['customFields'];
     $customFieldsShown = $inputData['customFieldsShown'];
     $errors = $inputData['errors'];
     $options = XenForo_Application::getOptions();
     if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
         $errors[] = new XenForo_Phrase('did_not_complete_the_captcha_verification_properly');
     }
     if (XenForo_Dependencies_Public::getTosUrl() && !$this->_input->filterSingle('agree', XenForo_Input::UINT)) {
         $errors[] = new XenForo_Phrase('you_must_agree_to_terms_of_service');
     }
     $writer = XenForo_DataWriter::create('XenForo_DataWriter_User');
     if ($options->registrationDefaults) {
         $writer->bulkSet($options->registrationDefaults, array('ignoreInvalidFields' => true));
     }
     $writer->bulkSet($data);
     $writer->setPassword($passwords['password'], $passwords['password_confirm'], null, true);
     // if the email corresponds to an existing Gravatar, use it
     if ($this->_canApplyAvatar() && $options->gravatarEnable && XenForo_Model_Avatar::gravatarExists($data['email'])) {
         $writer->set('gravatar', $data['email']);
     }
     $writer->set('user_group_id', XenForo_Model_User::$defaultRegisteredGroupId);
     $writer->set('language_id', XenForo_Visitor::getInstance()->get('language_id'));
     $writer->setCustomFields($customFields, $customFieldsShown);
     if (!$this->_validateBirthdayInput($writer, $birthdayError)) {
         $errors[] = $birthdayError;
     }
     $registerTime = XenForo_Application::getSession()->get('registrationTime');
     if (!$registerTime || $registerTime + $options->get('registrationTimer') > time()) {
         $errors[] = new XenForo_Phrase('sorry_you_must_wait_longer_to_create_account');
     }
     $regKey = XenForo_Application::getSession()->get('registrationKey');
     if (!$regKey || $regKey != $this->_input->filterSingle('reg_key', XenForo_Input::STRING)) {
         $errors[] = new XenForo_Phrase('something_went_wrong_please_try_again');
     }
     $spamModel = $this->_runSpamCheck($writer, $errors);
     $writer->advanceRegistrationUserState();
     $writer->preSave();
     $errors = array_merge($errors, $writer->getErrors());
     if ($errors) {
         $fields = $data;
         $fields['tos'] = $this->_input->filterSingle('agree', XenForo_Input::UINT);
         $fields['custom_fields'] = $customFields;
         return $this->_getRegisterFormResponse($fields, $errors);
     }
     $writer->save();
     $user = $writer->getMergedData();
     $spamModel->logSpamTrigger('user', $user['user_id']);
     if ($user['user_state'] == 'email_confirm') {
         $this->_getUserConfirmationModel()->sendEmailConfirmation($user);
     }
     return $this->_completeRegistration($user);
 }
Esempio n. 18
0
 /**
  * Inserts a new reply into an existing thread.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionAddReply()
 {
     $this->_assertPostOnly();
     if ($this->_input->inRequest('more_options')) {
         return $this->responseReroute(__CLASS__, 'reply');
     }
     $threadId = $this->_input->filterSingle('thread_id', XenForo_Input::UINT);
     $visitor = XenForo_Visitor::getInstance();
     $ftpHelper = $this->getHelper('ForumThreadPost');
     $threadFetchOptions = array('readUserId' => $visitor['user_id']);
     $forumFetchOptions = array('readUserId' => $visitor['user_id']);
     list($thread, $forum) = $ftpHelper->assertThreadValidAndViewable($threadId, $threadFetchOptions, $forumFetchOptions);
     $this->_assertCanReplyToThread($thread, $forum);
     if (!XenForo_Captcha_Abstract::validateDefault($this->_input)) {
         return $this->responseCaptchaFailed();
     }
     $input = $this->_input->filter(array('attachment_hash' => XenForo_Input::STRING, 'watch_thread_state' => XenForo_Input::UINT, 'watch_thread' => XenForo_Input::UINT, 'watch_thread_email' => XenForo_Input::UINT, '_set' => array(XenForo_Input::UINT, 'array' => true), 'discussion_open' => XenForo_Input::UINT, 'sticky' => XenForo_Input::UINT));
     $input['message'] = $this->getHelper('Editor')->getMessageText('message', $this->_input);
     $input['message'] = XenForo_Helper_String::autoLinkBbCode($input['message']);
     $writer = XenForo_DataWriter::create('XenForo_DataWriter_DiscussionMessage_Post');
     $writer->set('user_id', $visitor['user_id']);
     $writer->set('username', $visitor['username']);
     $writer->set('message', $input['message']);
     $writer->set('message_state', $this->_getPostModel()->getPostInsertMessageState($thread, $forum));
     $writer->set('thread_id', $threadId);
     $writer->setExtraData(XenForo_DataWriter_DiscussionMessage::DATA_ATTACHMENT_HASH, $input['attachment_hash']);
     $writer->preSave();
     if (!$writer->hasErrors()) {
         $this->assertNotFlooding('post');
     }
     $writer->save();
     $post = $writer->getMergedData();
     $this->_getThreadWatchModel()->setVisitorThreadWatchStateFromInput($threadId, $input);
     $threadUpdateData = array();
     if (!empty($input['_set']['discussion_open']) && $this->_getThreadModel()->canLockUnlockThread($thread, $forum)) {
         if ($thread['discussion_open'] != $input['discussion_open']) {
             $threadUpdateData['discussion_open'] = $input['discussion_open'];
         }
     }
     // discussion sticky state - moderator permission required
     if (!empty($input['_set']['sticky']) && $this->_getForumModel()->canStickUnstickThreadInForum($forum)) {
         if ($thread['sticky'] != $input['sticky']) {
             $threadUpdateData['sticky'] = $input['sticky'];
         }
     }
     if ($threadUpdateData) {
         $threadWriter = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
         $threadWriter->setExistingData($thread['thread_id']);
         $threadWriter->bulkSet($threadUpdateData);
         $threadWriter->save();
     }
     $canViewPost = $this->_getPostModel()->canViewPost($post, $thread, $forum);
     $page = floor(($thread['reply_count'] + 1) / XenForo_Application::get('options')->messagesPerPage) + 1;
     // this is a standard redirect
     if (!$this->_noRedirect() || !$this->_input->inRequest('last_date') || !$canViewPost) {
         $this->_getThreadModel()->markThreadRead($thread, $forum, XenForo_Application::$time, $visitor['user_id']);
         if (!$canViewPost) {
             $return = XenForo_Link::buildPublicLink('threads', $thread, array('page' => $page, 'posted' => 1));
         } else {
             $return = XenForo_Link::buildPublicLink('posts', $post);
         }
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $return, new XenForo_Phrase('your_message_has_been_posted'));
     } else {
         // load a selection of posts that are newer than the last post viewed
         $threadModel = $this->_getThreadModel();
         $postModel = $this->_getPostModel();
         // the max number of posts we want to fetch
         $limit = 3;
         $postPermissionOptions = $postModel->getPermissionBasedPostFetchOptions($thread, $forum);
         $postFetchOptions = $postPermissionOptions + array('limit' => $limit + 1, 'join' => XenForo_Model_Post::FETCH_USER | XenForo_Model_Post::FETCH_USER_PROFILE);
         if (!empty($postPermissionOptions['deleted'])) {
             $postFetchOptions['join'] |= XenForo_Model_Post::FETCH_DELETION_LOG;
         }
         $lastDate = $this->_input->filterSingle('last_date', XenForo_Input::UINT);
         $posts = $postModel->getNewestPostsInThreadAfterDate($threadId, $lastDate, $postFetchOptions);
         // We fetched one more post than needed, if more than $limit posts were returned,
         // we can show the 'there are more posts' notice
         if (count($posts) > $limit) {
             $firstUnshownPost = $postModel->getNextPostInThread($threadId, $lastDate, $postPermissionOptions);
             // remove the extra post
             array_pop($posts);
         } else {
             $firstUnshownPost = false;
         }
         // put the posts into oldest-first order
         $posts = array_reverse($posts, true);
         $posts = $postModel->getAndMergeAttachmentsIntoPosts($posts);
         $permissions = $visitor->getNodePermissions($thread['node_id']);
         foreach ($posts as &$post) {
             $post = $postModel->preparePost($post, $thread, $forum, $permissions);
         }
         // mark thread as read if we're showing the remaining posts in it or they've been read
         if ($visitor['user_id']) {
             if (!$firstUnshownPost || $firstUnshownPost['post_date'] <= $thread['thread_read_date']) {
                 $this->_getThreadModel()->markThreadRead($thread, $forum, XenForo_Application::$time, $visitor['user_id']);
             }
         }
         $viewParams = $this->_getDefaultViewParams($forum, $thread, $posts, $page, array('firstUnshownPost' => $firstUnshownPost, 'lastPost' => end($posts)));
         return $this->responseView('XenForo_ViewPublic_Thread_ViewNewPosts', 'thread_reply_new_posts', $viewParams);
     }
 }