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); }
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); }
/** * 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')); }
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; }
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)); }
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)); }
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(); }
/** * 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); }
/** * 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); } }
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'])); }
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); }
/** * 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()); }
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); } }
/** * 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')); }
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); }
/** * 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')); }
/** * 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); }
/** * 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); } }