Exemplo n.º 1
0
 public function publishPendingDrafts()
 {
     $GLOBALS[bdSocialShare_Listener::XI_BLOG_MODEL_DRAFT_PUBLISH_PENDING] = $this;
     $response = parent::publishPendingDrafts();
     /* @var $publisherModel bdSocialShare_Model_Publisher */
     $publisherModel = $this->getModelFromCache('bdSocialShare_Model_Publisher');
     /* @var $userModel XenForo_Model_User */
     $userModel = $this->getModelFromCache('XenForo_Model_User');
     foreach ($this->_bdSocialShare_publishPendingDrafts_drafts as $hash => &$draftDw) {
         $entryDw =& $this->_bdSocialShare_publishPendingDrafts_entries[$hash];
         $scheduled = bdSocialShare_Helper_Common::unserializeOrFalse($draftDw->get('bdsocialshare_scheduled'));
         if (!empty($scheduled) and !empty($scheduled['targets'])) {
             if (empty($users[$entryDw->get('user_id')])) {
                 $users[$entryDw->get('user_id')] = $userModel->getVisitingUserById($entryDw->get('user_id'));
                 $users[$entryDw->get('user_id')] = $userModel->prepareUser($users[$entryDw->get('user_id')]);
                 $users[$entryDw->get('user_id')]['permissions'] = XenForo_Permission::unserializePermissions($users[$entryDw->get('user_id')]['global_permission_cache']);
             }
             if (!empty($users[$entryDw->get('user_id')])) {
                 $shareable = new bdSocialShare_Shareable_XI_Blog_Entry($entryDw);
                 $publisherModel->publishScheduled($scheduled, $shareable, $users[$entryDw->get('user_id')]);
                 $publisherModel->postPublish($shareable, false, $users[$entryDw->get('user_id')]);
             }
         }
     }
     return $response;
 }
Exemplo n.º 2
0
 /**
  * Gets visible moderation queue entries for specified user.
  *
  * @see XenForo_ModerationQueueHandler_Abstract::getVisibleModerationQueueEntriesForUser()
  */
 public function getVisibleModerationQueueEntriesForUser(array $contentIds, array $viewingUser)
 {
     /* @var $resourceModel XenResource_Model_Resource */
     $resourceModel = XenForo_Model::create('XenResource_Model_Resource');
     $resources = $resourceModel->getResourcesByIds($contentIds, array('join' => XenResource_Model_Resource::FETCH_DESCRIPTION));
     $categories = XenForo_Model::create('XenResource_Model_Category')->getAllCategories(array('permissionCombinationId' => $viewingUser['permission_combination_id']));
     $output = array();
     foreach ($resources as $resource) {
         if (!isset($categories[$resource['resource_category_id']])) {
             continue;
         }
         $category = $categories[$resource['resource_category_id']];
         $categoryPermissions = XenForo_Permission::unserializePermissions($category['category_permission_cache']);
         $canManage = true;
         if (!$resourceModel->canViewResourceAndContainer($resource, $category, $null, $viewingUser, $categoryPermissions)) {
             $canManage = false;
         } else {
             if (!XenForo_Permission::hasContentPermission($categoryPermissions, 'editAny') || !XenForo_Permission::hasContentPermission($categoryPermissions, 'deleteAny') || !XenForo_Permission::hasContentPermission($categoryPermissions, 'approveUnapprove')) {
                 $canManage = false;
             }
         }
         if ($canManage) {
             $output[$resource['resource_id']] = array('message' => $resource['description'], 'user' => array('user_id' => $resource['user_id'], 'username' => $resource['username']), 'title' => $resource['title'], 'link' => XenForo_Link::buildPublicLink('resources', $resource), 'contentTypeTitle' => new XenForo_Phrase('resource'), 'titleEdit' => true);
         }
     }
     return $output;
 }
Exemplo n.º 3
0
 public function canViewResult(array $result, array $viewingUser)
 {
     $categoryPermissions = null;
     if (!empty($result['category_permission_cache'])) {
         // XenForo Resource Manager 1.1 support
         $categoryPermissions = XenForo_Permission::unserializePermissions($result['category_permission_cache']);
     }
     return $this->_getResourceModel()->canViewResource($result, $result, $errorPhraseKey, $viewingUser, $categoryPermissions);
 }
Exemplo n.º 4
0
    /**
     * Gets the content permissions for a specified item.
     *
     * @param integer $permissionCombinationId Permission combination to read
     * @param string $contentType Permission content type
     * @param integer $contentId
     *
     * @return array
     */
    public function getContentPermissionsForItem($permissionCombinationId, $contentType, $contentId)
    {
        return XenForo_Permission::unserializePermissions($this->_getDb()->fetchOne('
			SELECT cache_value
			FROM xf_permission_cache_content
			WHERE permission_combination_id = ?
				AND content_type = ?
				AND content_id = ?
		', array($permissionCombinationId, $contentType, $contentId)));
    }
Exemplo n.º 5
0
 public function canViewContent(array $content)
 {
     /* @var $threadModel XenForo_Model_Thread */
     $threadModel = XenForo_Model::create('XenForo_Model_Thread');
     $errorPhraseKey = 'null';
     if (!$threadModel->canViewThreadAndContainer($content, $content, $errorPhraseKey, XenForo_Permission::unserializePermissions($content['node_permission_cache']))) {
         return false;
     }
     return true;
 }
Exemplo n.º 6
0
 protected function _getContent($contentId, array $viewingUser)
 {
     /* @var $postModel XenForo_Model_Post */
     $postModel = XenForo_Model::create('XenForo_Model_Post');
     $post = $postModel->getPostById($contentId, array('join' => XenForo_Model_Post::FETCH_THREAD | XenForo_Model_Post::FETCH_FORUM | XenForo_Model_Post::FETCH_USER, 'permissionCombinationId' => $viewingUser['permission_combination_id']));
     if ($post) {
         $post['permissions'] = XenForo_Permission::unserializePermissions($post['node_permission_cache']);
     }
     return $post;
 }
Exemplo n.º 7
0
 public function actionLogin()
 {
     if (!$this->_request->isPost()) {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL, XenForo_Link::buildAdminLink('index'));
     }
     $data = $this->_input->filter(array('login' => XenForo_Input::STRING, 'password' => XenForo_Input::STRING, 'redirect' => XenForo_Input::STRING, 'cookie_check' => XenForo_Input::UINT));
     $redirect = $data['redirect'] ? $data['redirect'] : XenForo_Link::buildAdminLink('index');
     $loginModel = $this->_getLoginModel();
     if ($data['cookie_check'] && count($_COOKIE) == 0) {
         // login came from a page, so we should at least have a session cookie.
         // if we don't, assume that cookies are disabled
         return $this->responseError(new XenForo_Phrase('cookies_required_to_log_in_to_site'));
     }
     $needCaptcha = $loginModel->requireLoginCaptcha($data['login']);
     if ($needCaptcha) {
         // just block logins here instead of using the captcha
         return $this->responseError(new XenForo_Phrase('your_account_has_temporarily_been_locked_due_to_failed_login_attempts'));
     }
     $userModel = $this->_getUserModel();
     $userId = $userModel->validateAuthentication($data['login'], $data['password'], $error);
     if (!$userId) {
         $loginModel->logLoginAttempt($data['login']);
         if ($loginModel->requireLoginCaptcha($data['login'])) {
             return $this->responseError(new XenForo_Phrase('your_account_has_temporarily_been_locked_due_to_failed_login_attempts'));
         }
         if ($this->_input->filterSingle('upgrade', XenForo_Input::UINT)) {
             return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirect);
         } else {
             // note - JSON view will return responseError($text)
             return $this->responseView('XenForo_ViewAdmin_Login_Error', 'login_form', array('text' => $error, 'defaultLogin' => $data['login'], 'redirect' => $redirect), array('containerTemplate' => 'LOGIN_PAGE'));
         }
     }
     $loginModel->clearLoginAttempts($data['login']);
     $user = $this->_getUserModel()->getFullUserById($userId, array('join' => XenForo_Model_User::FETCH_USER_PERMISSIONS));
     // now check that the user will be able to get into the ACP (is_admin)
     if (!$user['is_admin']) {
         return $this->responseError(new XenForo_Phrase('your_account_does_not_have_admin_privileges'));
     }
     /** @var XenForo_ControllerHelper_Login $loginHelper */
     $loginHelper = $this->getHelper('Login');
     if ($loginHelper->userTfaConfirmationRequired($user)) {
         $loginHelper->setTfaSessionCheck($user['user_id']);
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildAdminLink('login/two-step', null, array('redirect' => $redirect)));
     } else {
         $permissions = XenForo_Permission::unserializePermissions($user['global_permission_cache']);
         if (empty($user['use_tfa']) && (XenForo_Application::getOptions()->adminRequireTfa || XenForo_Permission::hasPermission($permissions, 'general', 'requireTfa'))) {
             return $this->responseError(new XenForo_Phrase('you_must_enable_two_step_access_control_panel', array('link' => XenForo_Link::buildPublicLink('account/two-step'))));
         }
         $postVars = $this->_input->filterSingle('postVars', XenForo_Input::JSON_ARRAY);
         return $this->completeLogin($userId, $redirect, $postVars);
     }
 }
Exemplo n.º 8
0
 /**
  * Determines if attachments and be uploaded and managed in this context.
  *
  * @see XenForo_AttachmentHandler_Abstract::_canUploadAndManageAttachments()
  */
 protected function _canUploadAndManageAttachments(array $contentData, array $viewingUser)
 {
     $forumModel = $this->_getForumModel();
     if (!empty($contentData['node_id'])) {
         $forum = $forumModel->getForumById($contentData['node_id'], array('permissionCombinationId' => $viewingUser['permission_combination_id']));
         if ($forum) {
             $permissions = XenForo_Permission::unserializePermissions($forum['node_permission_cache']);
             return $forumModel->canViewForum($forum, $null, $permissions, $viewingUser) && $forumModel->canUploadAndManageAttachment($forum, $null, $permissions, $viewingUser);
         }
     }
     return false;
     // invalid content data
 }
Exemplo n.º 9
0
 public static function XenForo_DataWriter_DiscussionMessage_Post(XenForo_Model_User $userModel, array $user, array $options)
 {
     if (empty($user['node_permission_cache'])) {
         return false;
     }
     if (empty($options['post']) or empty($options['thread']) or empty($options['forum'])) {
         return false;
     }
     $permissions = XenForo_Permission::unserializePermissions($user['node_permission_cache']);
     /** @var XenForo_Model_Post $postModel */
     $postModel = $userModel->getModelFromCache('XenForo_Model_Post');
     return $postModel->canViewPostAndContainer($options['post'], $options['thread'], $options['forum'], $null, $permissions, $user);
 }
Exemplo n.º 10
0
 /**
  * Determines if the specified attachment can be viewed.
  *
  * @see XenForo_AttachmentHandler_Abstract::_canViewAttachment()
  */
 protected function _canViewAttachment(array $attachment, array $viewingUser)
 {
     $postModel = $this->_getPostModel();
     $post = $postModel->getPostById($attachment['content_id'], array('join' => XenForo_Model_Post::FETCH_THREAD | XenForo_Model_Post::FETCH_FORUM | XenForo_Model_Post::FETCH_USER, 'permissionCombinationId' => $viewingUser['permission_combination_id']));
     if (!$post) {
         return false;
     }
     $permissions = XenForo_Permission::unserializePermissions($post['node_permission_cache']);
     $canViewPost = $postModel->canViewPostAndContainer($post, $post, $post, $null, $permissions, $viewingUser);
     if (!$canViewPost) {
         return false;
     }
     return $postModel->canViewAttachmentOnPost($post, $post, $post, $null, $permissions, $viewingUser);
 }
Exemplo n.º 11
0
 /**
  * Gets content data (if viewable).
  * @see XenForo_LikeHandler_Abstract::getContentData()
  */
 public function getContentData(array $contentIds, array $viewingUser)
 {
     /* @var $updateModel XenResource_Model_Update */
     $updateModel = XenForo_Model::create('XenResource_Model_Update');
     $updates = $updateModel->getUpdatesByIds($contentIds, array('join' => XenResource_Model_Update::FETCH_RESOURCE | XenResource_Model_Update::FETCH_CATEGORY, 'permissionCombinationId' => $viewingUser['permission_combination_id']));
     foreach ($updates as $updateId => &$update) {
         $categoryPermissions = XenForo_Permission::unserializePermissions($update['category_permission_cache']);
         if (!$updateModel->canViewUpdate($update, $update, $update, $null, $viewingUser, $categoryPermissions)) {
             unset($updates[$updateId]);
         } else {
             $update = $updateModel->prepareUpdate($update, $update, $update, $viewingUser);
         }
     }
     return $updates;
 }
Exemplo n.º 12
0
 public function renderTagSigPic(array $tag, array $user)
 {
     $user = false;
     if (array_key_exists('0', $tag['children'])) {
         $user = XenForo_Model::create('XenForo_Model_User')->getUserById($tag['children'][0], array('join' => XenForo_Model_User::FETCH_USER_PERMISSIONS));
     } else {
         $user = XenForo_Visitor::getInstance()->toArray();
     }
     // For signature preview to not fail
     if ($user) {
         $user['permissions'] = XenForo_Permission::unserializePermissions($user['global_permission_cache']);
         if (XenForo_Permission::hasPermission($user['permissions'], 'signature', 'sigpic')) {
             return XenForo_Template_Helper_Core::callHelper('sigpic', array($user));
         }
     }
     return '';
 }
Exemplo n.º 13
0
 /**
  * Determines if attachments and be uploaded and managed in this context.
  *
  * @see XenForo_AttachmentHandler_Abstract::_canUploadAndManageAttachments()
  */
 protected function _canUploadAndManageAttachments(array $contentData, array $viewingUser)
 {
     $resourceModel = $this->_getResourceModel();
     /** @var XenResource_Model_Category $categoryModel */
     $categoryModel = XenForo_Model::create('XenResource_Model_Category');
     if (!empty($contentData['resource_id'])) {
         $resource = $resourceModel->getResourceById($contentData['resource_id']);
         if ($resource) {
             $category = $categoryModel->getCategoryById($resource['resource_category_id'], array('permissionCombinationId' => $viewingUser['permission_combination_id']));
             if ($category) {
                 $categoryPermissions = XenForo_Permission::unserializePermissions($category['category_permission_cache']);
                 return XenForo_Model::create('XenResource_Model_Version')->canAddVersion($resource, $category, $null, $viewingUser, $categoryPermissions);
             } else {
                 return false;
             }
         }
     }
     return $categoryModel->canAddResource(null, $null, $viewingUser);
 }
Exemplo n.º 14
0
 /**
  * Gets visible moderation queue entries for specified user.
  *
  * @see XenForo_ModerationQueueHandler_Abstract::getVisibleModerationQueueEntriesForUser()
  */
 public function getVisibleModerationQueueEntriesForUser(array $contentIds, array $viewingUser)
 {
     $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
     $socialForums = $socialForumModel->getSocialForumsByIds($contentIds, array('join' => ThemeHouse_SocialGroups_Model_SocialForum::FETCH_FORUM | ThemeHouse_SocialGroups_Model_SocialForum::FETCH_USER, 'permissionCombinationId' => $viewingUser['permission_combination_id']));
     $output = array();
     foreach ($socialForums as $socialForum) {
         $socialForum['permissions'] = XenForo_Permission::unserializePermissions($socialForum['node_permission_cache']);
         $canManage = true;
         if (!$socialForumModel->canViewSocialForum($socialForum, $null, $socialForum['permissions'], $viewingUser)) {
             $canManage = false;
         } elseif (!XenForo_Permission::hasContentPermission($socialForum['permissions'], 'editSocialForum') || !XenForo_Permission::hasContentPermission($socialForum['permissions'], 'deleteSocialForum')) {
             $canManage = false;
         }
         if ($canManage) {
             $output[$socialForum['social_forum_id']] = array('message' => $socialForum['description'], 'user' => array('user_id' => $socialForum['user_id'], 'username' => $socialForum['username']), 'title' => $socialForum['title'], 'link' => XenForo_Link::buildPublicLink('social-forums', $socialForum), 'contentTypeTitle' => new XenForo_Phrase('th_social_forum_socialgroups'), 'titleEdit' => true);
         }
     }
     return $output;
 }
Exemplo n.º 15
0
 public function findNewPosts()
 {
     $threadModel = $this->_getThreadModel();
     $searchModel = $this->_getSearchModel();
     $userId = XenForo_Visitor::getUserId();
     $visitor = XenForo_Visitor::getInstance();
     $limitOptions = array('limit' => XenForo_Application::get('options')->maximumSearchResults);
     $days = $this->_input->filterSingle('days', XenForo_Input::UINT);
     $recent = $this->_input->filterSingle('recent', XenForo_Input::UINT);
     $watched = $this->_input->filterSingle('watched', XenForo_Input::UINT);
     if ($userId && !$days && !$recent) {
         $threadIds = $threadModel->getUnreadThreadIds($userId, $limitOptions, $watched);
         $searchType = 'new-posts';
     } else {
         if ($days < 1) {
             $days = max(7, XenForo_Application::get('options')->readMarkingDataLifetime);
         }
         $fetchOptions = $limitOptions + array('order' => 'last_post_date', 'orderDirection' => 'desc', 'watchUserId' => $userId, 'forumWatchUserId' => $userId, 'join' => XenForo_Model_Thread::FETCH_FORUM_OPTIONS);
         $threadIds = array_keys($threadModel->getThreads(array('last_post_date' => array('>', XenForo_Application::$time - 86400 * $days), 'not_discussion_type' => 'redirect', 'deleted' => false, 'moderated' => false, 'find_new' => true, 'watch_only' => $watched), $fetchOptions));
         $searchType = 'recent-posts';
     }
     $threads = $threadModel->getThreadsByIds($threadIds, array('join' => XenForo_Model_Thread::FETCH_FORUM | XenForo_Model_Thread::FETCH_USER, 'permissionCombinationId' => $visitor['permission_combination_id']));
     foreach ($threads as $key => $thread) {
         $thread['permissions'] = XenForo_Permission::unserializePermissions($thread['node_permission_cache']);
         if (!$threadModel->canViewThreadAndContainer($thread, $thread, $null, $thread['permissions']) || $visitor->isIgnoring($thread['user_id'])) {
             unset($threads[$key]);
         }
     }
     $results = array();
     foreach ($threadIds as $threadId) {
         if (isset($threads[$threadId])) {
             $results[] = array(XenForo_Model_Search::CONTENT_TYPE => 'thread', XenForo_Model_Search::CONTENT_ID => $threadId);
         }
     }
     if (!$results) {
         return $this->getNoPostsResponse();
     }
     $search = $searchModel->insertSearch($results, $searchType, '', array(), 'date', false);
     return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('find-new/posts', $search));
 }
Exemplo n.º 16
0
 /**
  * Gets visible moderation queue entries for specified user.
  *
  * @see XenForo_ModerationQueueHandler_Abstract::getVisibleModerationQueueEntriesForUser()
  */
 public function getVisibleModerationQueueEntriesForUser(array $contentIds, array $viewingUser)
 {
     /* @var $postModel XenForo_Model_Post */
     $postModel = XenForo_Model::create('XenForo_Model_Post');
     $posts = $postModel->getPostsByIds($contentIds, array('join' => XenForo_Model_Post::FETCH_THREAD | XenForo_Model_Post::FETCH_FORUM, 'permissionCombinationId' => $viewingUser['permission_combination_id']));
     $output = array();
     foreach ($posts as $post) {
         $post['permissions'] = XenForo_Permission::unserializePermissions($post['node_permission_cache']);
         $canManage = true;
         if (!$postModel->canViewPostAndContainer($post, $post, $post, $null, $post['permissions'], $viewingUser)) {
             $canManage = false;
         } else {
             if (!XenForo_Permission::hasContentPermission($post['permissions'], 'editAnyPost') || !XenForo_Permission::hasContentPermission($post['permissions'], 'deleteAnyPost')) {
                 $canManage = false;
             }
         }
         if ($canManage) {
             $output[$post['post_id']] = array('message' => $post['message'], 'user' => array('user_id' => $post['user_id'], 'username' => $post['username']), 'title' => new XenForo_Phrase('post_in_thread_x', array('title' => $post['title'])), 'link' => XenForo_Link::buildPublicLink('posts', $post), 'contentTypeTitle' => new XenForo_Phrase('post'), 'titleEdit' => false);
         }
     }
     return $output;
 }
Exemplo n.º 17
0
 /**
  * Gets visible moderation queue entries for specified user.
  *
  * @see XenForo_ModerationQueueHandler_Abstract::getVisibleModerationQueueEntriesForUser()
  */
 public function getVisibleModerationQueueEntriesForUser(array $contentIds, array $viewingUser)
 {
     /* @var $threadModel XenForo_Model_Thread */
     $threadModel = XenForo_Model::create('XenForo_Model_Thread');
     $threads = $threadModel->getThreadsByIds($contentIds, array('join' => XenForo_Model_Thread::FETCH_FORUM | XenForo_Model_Thread::FETCH_FIRSTPOST, 'permissionCombinationId' => $viewingUser['permission_combination_id']));
     $output = array();
     foreach ($threads as $thread) {
         $thread['permissions'] = XenForo_Permission::unserializePermissions($thread['node_permission_cache']);
         $canManage = true;
         if (!$threadModel->canViewThreadAndContainer($thread, $thread, $null, $thread['permissions'], $viewingUser)) {
             $canManage = false;
         } else {
             if (!XenForo_Permission::hasContentPermission($thread['permissions'], 'editAnyPost') || !XenForo_Permission::hasContentPermission($thread['permissions'], 'deleteAnyThread')) {
                 $canManage = false;
             }
         }
         if ($canManage) {
             $output[$thread['thread_id']] = array('message' => $thread['message'], 'user' => array('user_id' => $thread['user_id'], 'username' => $thread['username']), 'title' => $thread['title'], 'link' => XenForo_Link::buildPublicLink('threads', $thread), 'contentTypeTitle' => new XenForo_Phrase('thread'), 'titleEdit' => true);
         }
     }
     return $output;
 }
Exemplo n.º 18
0
 /**
  * Gets visible moderation queue entries for specified user.
  *
  * @see XenForo_ModerationQueueHandler_Abstract::getVisibleModerationQueueEntriesForUser()
  */
 public function getVisibleModerationQueueEntriesForUser(array $contentIds, array $viewingUser)
 {
     /* @var $versionModel XenResource_Model_Version */
     $versionModel = XenForo_Model::create('XenResource_Model_Version');
     $versions = $versionModel->getVersionsByIds($contentIds);
     $categories = XenForo_Model::create('XenResource_Model_Category')->getAllCategories(array('permissionCombinationId' => $viewingUser['permission_combination_id']));
     /* @var $resourceModel XenResource_Model_Resource */
     $resourceModel = XenForo_Model::create('XenResource_Model_Resource');
     $resourceIds = array();
     foreach ($versions as $version) {
         $resourceIds[] = $version['resource_id'];
     }
     $resources = $resourceModel->getResourcesByIds($resourceIds);
     $output = array();
     foreach ($versions as $version) {
         if (!isset($resources[$version['resource_id']])) {
             continue;
         }
         $resource = $resources[$version['resource_id']];
         if (!isset($categories[$resource['resource_category_id']])) {
             continue;
         }
         $category = $categories[$resource['resource_category_id']];
         $categoryPermissions = XenForo_Permission::unserializePermissions($category['category_permission_cache']);
         $canManage = true;
         if (!$resourceModel->canViewResourceAndContainer($resource, $category, $null, $viewingUser, $categoryPermissions) || !$versionModel->canDownloadVersion($version, $resource, $category, $null, $viewingUser, $categoryPermissions)) {
             $canManage = false;
         } else {
             if (!XenForo_Permission::hasContentPermission($categoryPermissions, 'deleteAny') || !XenForo_Permission::hasContentPermission($categoryPermissions, 'approveUnapprove')) {
                 $canManage = false;
             }
         }
         if ($canManage) {
             $output[$version['resource_version_id']] = array('message' => $version['version_string'], 'user' => array('user_id' => $resource['user_id'], 'username' => $resource['username']), 'title' => $resource['title'] . ' ' . $version['version_string'], 'link' => XenForo_Link::buildPublicLink('resources/history', $resource), 'contentTypeTitle' => new XenForo_Phrase('resource_version'), 'titleEdit' => false);
         }
     }
     return $output;
 }
Exemplo n.º 19
0
 protected function _buildSitemap(XenForo_SitemapHandler_Abstract $handler, $lastId, $targetRunTime)
 {
     $start = microtime(true);
     $viewingUser = XenForo_Model::create('XenForo_Model_User')->getVisitingGuestUser();
     $viewingUser['permissions'] = XenForo_Permission::unserializePermissions($viewingUser['global_permission_cache']);
     if (!$handler->basePermissionCheck($viewingUser)) {
         return false;
     }
     $records = $handler->getRecords($lastId, 2000, $viewingUser);
     if (!$records) {
         return false;
     }
     $isInterruptable = $handler->isInterruptable();
     $newLast = false;
     foreach ($records as $key => $record) {
         $newLast = $key;
         if ($handler->isIncluded($record, $viewingUser)) {
             $result = $handler->getData($record);
             if ($result) {
                 if (isset($result['loc'])) {
                     $this->_writeResult($result);
                 } else {
                     foreach ($result as $row) {
                         $this->_writeResult($row);
                     }
                 }
             }
         }
         if ($isInterruptable && $targetRunTime && microtime(true) - $start > $targetRunTime) {
             break;
         }
     }
     if ($this->_file) {
         $this->_closeFile();
     }
     return $isInterruptable ? $newLast : false;
 }
Exemplo n.º 20
0
 /**
  * Resource reassign handler
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function actionReassign()
 {
     if ($this->isConfirmedPost()) {
         $user = $this->getModelFromCache('XenForo_Model_User')->getUserByName($this->_input->filterSingle('username', XenForo_Input::STRING), array('join' => XenForo_Model_User::FETCH_USER_PERMISSIONS));
         $user['permissions'] = XenForo_Permission::unserializePermissions($user['global_permission_cache']);
         if (!$user || !XenForo_Permission::hasPermission($user['permissions'], 'resource', 'view')) {
             return $this->responseError(new XenForo_Phrase('you_may_only_reassign_resource_to_user_with_permission_to_view'));
         }
         $options = array('userId' => $user['user_id'], 'username' => $user['username']);
         return $this->executeInlineModAction('reassignResources', $options, array('fromCookie' => false));
     } else {
         $resourceIds = $this->getInlineModIds();
         $handler = $this->_getInlineModResourceModel();
         if (!$handler->canReassignResources($resourceIds, $errorPhraseKey)) {
             throw $this->getErrorOrNoPermissionResponseException($errorPhraseKey);
         }
         $redirect = $this->getDynamicRedirect();
         if (!$resourceIds) {
             return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $redirect);
         }
         $viewParams = array('resourceIds' => $resourceIds, 'resourceCount' => count($resourceIds), 'redirect' => $redirect);
         return $this->responseView('XenResource_ViewPublic_ResourceInlineMod_Reassign', 'inline_mod_resource_reassign', $viewParams);
     }
 }
Exemplo n.º 21
0
 protected function _canApplyAvatar($combinationId = null)
 {
     /** @var XenForo_Model_Permission $permissionModel */
     $permissionModel = $this->getModelFromCache('XenForo_Model_Permission');
     if (!$combinationId) {
         $combinationId = $permissionModel->getPermissionCombinationIdByUserRole(0, array(XenForo_Model_User::$defaultRegisteredGroupId));
     }
     if (!$combinationId) {
         return false;
     }
     $permissionSet = $permissionModel->getPermissionCombinationById($combinationId);
     if (!$permissionSet) {
         return false;
     }
     $permissions = $permissionSet ? XenForo_Permission::unserializePermissions($permissionSet['cache_value']) : null;
     return $permissions && XenForo_Permission::hasPermission($permissions, 'avatar', 'allowed') && XenForo_Permission::hasPermission($permissions, 'avatar', 'maxFileSize') != 0;
 }
Exemplo n.º 22
0
 /**
  * Send a notification to the users watching the resource.
  *
  * @param array $update The reply that has been added
  * @param array $resource Info about the resource the update is in
  * @param array $noAlerts List of user ids to NOT alert (but still send email)
  * @param array $noEmail List of user ids to not send an email
  *
  * @return array Empty or keys: alerted: user ids alerted, emailed: user ids emailed
  */
 public function sendNotificationToWatchUsersOnUpdate(array $update, array $resource, array $noAlerts = array(), array $noEmail = array())
 {
     if ($update['message_state'] != 'visible' || $resource['resource_state'] != 'visible') {
         return array();
     }
     $resourceModel = $this->_getResourceModel();
     /* @var $userModel XenForo_Model_User */
     $userModel = $this->getModelFromCache('XenForo_Model_User');
     if (XenForo_Application::get('options')->emailWatchedThreadIncludeMessage) {
         $parseBbCode = true;
         $emailTemplate = 'watched_resource_update_messagetext';
     } else {
         $parseBbCode = false;
         $emailTemplate = 'watched_resource_update';
     }
     $resourceUser = $userModel->getUserById($resource['user_id']);
     if (!$resourceUser) {
         $resourceUser = $userModel->getVisitingGuestUser();
     }
     if (!empty($resource['category_breadcrumb'])) {
         $category = $resource;
     } else {
         $category = $this->_getCategoryModel()->getCategoryById($resource['resource_category_id']);
         if (!$category) {
             return array();
         }
     }
     $alerted = array();
     $emailed = array();
     $users = $this->getUsersWatchingResource($resource['resource_id'], $resource['resource_category_id']);
     foreach ($users as $user) {
         if ($user['user_id'] == $resource['user_id']) {
             continue;
         }
         $user['permissions'] = XenForo_Permission::unserializePermissions($user['global_permission_cache']);
         $categoryPermissions = XenForo_Permission::unserializePermissions($user['category_permission_cache']);
         if (!$resourceModel->canViewResourceAndContainer($resource, $category, $null, $user, $categoryPermissions)) {
             continue;
         }
         if ($user['email_subscribe'] && $user['email'] && $user['user_state'] == 'valid') {
             if (!isset($update['messageText']) && $parseBbCode) {
                 $bbCodeParserText = XenForo_BbCode_Parser::create(XenForo_BbCode_Formatter_Base::create('Text'));
                 $update['messageText'] = new XenForo_BbCode_TextWrapper($update['message'], $bbCodeParserText);
                 $bbCodeParserHtml = XenForo_BbCode_Parser::create(XenForo_BbCode_Formatter_Base::create('HtmlEmail'));
                 $update['messageHtml'] = new XenForo_BbCode_TextWrapper($update['message'], $bbCodeParserHtml);
             }
             if (!isset($resource['titleCensored'])) {
                 $resource['titleCensored'] = XenForo_Helper_String::censorString($resource['title']);
                 $update['titleCensored'] = XenForo_Helper_String::censorString($update['title']);
             }
             $user['email_confirm_key'] = $userModel->getUserEmailConfirmKey($user);
             $mail = XenForo_Mail::create($emailTemplate, array('update' => $update, 'resource' => $resource, 'category' => $category, 'resourceUser' => $resourceUser, 'receiver' => $user), $user['language_id']);
             $mail->enableAllLanguagePreCache();
             $mail->queue($user['email'], $user['username']);
             $emailed[] = $user['user_id'];
             $noEmail[] = $user['user_id'];
         }
         if (XenForo_Model_Alert::userReceivesAlert($user, 'resource_update', 'insert')) {
             XenForo_Model_Alert::alert($user['user_id'], $resource['user_id'], $resource['username'], 'resource_update', $update['resource_update_id'], 'insert');
             $alerted[] = $user['user_id'];
             $noAlerts[] = $user['user_id'];
         }
     }
     return array('emailed' => $emailed, 'alerted' => $alerted);
 }
Exemplo n.º 23
0
 public function getVisiblePrefixIds(array $viewingUser = null, array $categoryIds = null)
 {
     $this->standardizeViewingUserReference($viewingUser);
     $prefixes = array();
     /** @var $categoryModel XenResource_Model_Category */
     $categoryModel = $this->getModelFromCache('XenResource_Model_Category');
     if ($categoryIds === null) {
         $categoryLimit = '';
     } else {
         if (!$categoryIds) {
             return array();
         }
         $categoryLimit = " AND resource_category.resource_category_id IN (" . $this->_getDb()->quote($categoryIds) . ")";
     }
     $results = $this->_getDb()->query("\n\t\t\tSELECT prefix.prefix_id, resource_category.*, cache.cache_value AS category_permission_cache\n\t\t\tFROM xf_resource_prefix AS prefix\n\t\t\tINNER JOIN xf_resource_category_prefix AS cp ON (cp.prefix_id = prefix.prefix_id)\n\t\t\tINNER JOIN xf_resource_category AS resource_category ON (cp.resource_category_id = resource_category.resource_category_id " . $categoryLimit . ")\n\t\t\tINNER JOIN xf_permission_cache_content AS cache ON\n\t\t\t\t(cache.content_type = 'resource_category' AND cache.content_id = resource_category.resource_category_id AND cache.permission_combination_id = ?)\n\t\t\tORDER BY prefix.materialized_order\n\t\t", $viewingUser['permission_combination_id']);
     while ($result = $results->fetch()) {
         if (isset($prefixes[$result['prefix_id']])) {
             continue;
         }
         $permissions = XenForo_Permission::unserializePermissions($result['category_permission_cache']);
         if ($categoryModel->canViewCategory($result, $null, $viewingUser, $permissions)) {
             $prefixes[$result['prefix_id']] = $result['prefix_id'];
         }
     }
     return $prefixes;
 }
Exemplo n.º 24
0
 /**
  * Take a list of threads (with the forum and permission info included in the thread)
  * and filters them to those that are viewable.
  *
  * @param array $threads List of threads, with forum info and permissions included
  * @param array|null $viewingUser
  *
  * @return array
  */
 public function getViewableThreadsFromList(array $threads, array $viewingUser = null)
 {
     $this->standardizeViewingUserReference($viewingUser);
     $threadModel = $this->_getThreadModel();
     foreach ($threads as $key => $thread) {
         if (isset($thread['permissions'])) {
             $permissions = $thread['permissions'];
         } else {
             $permissions = XenForo_Permission::unserializePermissions($thread['node_permission_cache']);
         }
         if (!$threadModel->canViewThreadAndContainer($thread, $thread, $null, $permissions, $viewingUser)) {
             unset($threads[$key]);
         }
     }
     return $threads;
 }
Exemplo n.º 25
0
 /**
  * Returns the Thread array of the $thread_id parameter.
  */
 public function canViewThread($user, $thread, $permissions = NULL)
 {
     // Check if the thread model has initialized.
     $this->getModels()->checkModel('thread', XenForo_Model::create('XenForo_Model_Thread'));
     if ($permissions == NULL) {
         // Let's grab the permissions.
         $thread = $this->getThread($thread['thread_id'], array('permissionCombinationId' => $user->data['permission_combination_id']));
         // Unserialize the permissions.
         $permissions = XenForo_Permission::unserializePermissions($thread['node_permission_cache']);
     }
     return $this->getModels()->getModel('thread')->canViewThread($thread, array(), $null, $permissions, $user->getData());
 }
Exemplo n.º 26
0
 public function sendNotificationToWatchUsersOnMediaInsert(array $media, array $album = null)
 {
     if ($media['media_state'] != 'visible') {
         return array();
     }
     /* @var $userModel XenForo_Model_User */
     $userModel = $this->getModelFromCache('XenForo_Model_User');
     $albumModel = $this->_getAlbumModel();
     if (!$album) {
         $album = $albumModel->getAlbumById($media['album_id'], array());
     }
     if (!$album || $album['album_state'] != 'visible') {
         return array();
     }
     $album = $albumModel->prepareAlbumWithPermissions($album);
     $media['titleCensored'] = XenForo_Helper_String::censorString($media['media_title']);
     $media['descCensored'] = XenForo_Helper_String::censorString($media['media_description']);
     $album['titleCensored'] = XenForo_Helper_String::censorString($album['album_title']);
     $album['descCensored'] = XenForo_Helper_String::censorString($album['album_description']);
     // fetch a full user record if we don't have one already
     if (!isset($media['avatar_width']) || !isset($media['custom_title'])) {
         $mediaUser = $this->getModelFromCache('XenForo_Model_User')->getUserById($media['user_id']);
         if ($mediaUser) {
             $media = array_merge($mediaUser, $media);
         } else {
             $media['avatar_width'] = 0;
             $media['custom_title'] = '';
         }
     }
     $alerted = array();
     $emailed = array();
     $users = $this->getUsersWatchingAlbum($album['album_id'], 'media');
     foreach ($users as $user) {
         if ($user['user_id'] == $media['user_id']) {
             continue;
         }
         if ($userModel->isUserIgnored($user, $media['user_id'])) {
             continue;
         }
         $user['permissions'] = XenForo_Permission::unserializePermissions($user['global_permission_cache']);
         if (!$albumModel->canViewAlbum($album, $null, $user)) {
             continue;
         }
         if (isset(self::$_preventDoubleNotify[$album['album_id']][$user['user_id']])) {
             continue;
         }
         self::$_preventDoubleNotify[$album['album_id']][$user['user_id']] = true;
         if ($user['send_email'] && $user['email'] && $user['user_state'] == 'valid') {
             $user['email_confirm_key'] = $userModel->getUserEmailConfirmKey($user);
             $mail = XenForo_Mail::create('xengallery_watched_album_media_insert', array('media' => $media, 'album' => $album, 'receiver' => $user), $user['language_id']);
             $mail->enableAllLanguagePreCache();
             $mail->queue($user['email'], $user['username']);
             $emailed[] = $user['user_id'];
         }
         if ($user['send_alert']) {
             XenForo_Model_Alert::alert($user['user_id'], $media['user_id'], $media['username'], 'xengallery_media', $media['media_id'], 'watch_insert');
             $alerted[] = $user['user_id'];
         }
     }
     return array('emailed' => $emailed, 'alerted' => $alerted);
 }
Exemplo n.º 27
0
 /**
  * Setup the visitor singleton.
  *
  * @param integer $userId User ID to setup as
  * @param array $options
  *
  * @return XenForo_Visitor
  */
 public static function setup($userId, array $options = array())
 {
     $userId = intval($userId);
     $options = array_merge(array('languageId' => 0, 'permissionUserId' => 0), $options);
     /* @var $userModel XenForo_Model_User */
     $userModel = XenForo_Model::create('XenForo_Model_User');
     $class = XenForo_Application::resolveDynamicClass('XenForo_Visitor');
     $object = new $class();
     if ($userId && ($user = $userModel->getVisitingUserById($userId))) {
         if ($user['is_admin']) {
             if ($options['permissionUserId']) {
                 // force permissions for testing
                 $user = $userModel->setPermissionsFromUserId($user, $options['permissionUserId']);
             }
             if ($options['languageId']) {
                 $user['admin_language_id'] = $user['language_id'] = $options['languageId'];
             }
         }
         $object->_user = $user;
     } else {
         $object->_user = $userModel->getVisitingGuestUser();
         if ($options['languageId']) {
             $object->_user['language_id'] = $options['languageId'];
         }
     }
     $object->_user = $userModel->prepareUser($object->_user);
     $object->_user['referer'] = !empty($options['referer']) ? $options['referer'] : null;
     $object->_user['from_search'] = !empty($options['fromSearch']);
     if (!empty($object->_user['ignored'])) {
         $ignored = XenForo_Helper_Php::safeUnserialize($object->_user['ignored']);
         $object->_user['ignoredUsers'] = $ignored;
     } else {
         $object->_user['ignoredUsers'] = array();
     }
     if (!$object->_user['global_permission_cache']) {
         // force a rebuild if we don't have the perm cache
         $perms = XenForo_Model::create('XenForo_Model_Permission')->rebuildPermissionCombinationById($object->_user['permission_combination_id']);
         $object->_user['permissions'] = $perms ? $perms : array();
     } else {
         $object->_user['permissions'] = XenForo_Permission::unserializePermissions($object->_user['global_permission_cache']);
     }
     $object->setVisitorLanguage($object->_user['language_id']);
     XenForo_Locale::setDefaultTimeZone($object->_user['timezone']);
     self::$_instance = $object;
     self::$_setupOptions = $options;
     XenForo_CodeEvent::fire('visitor_setup', array(&self::$_instance));
     return self::$_instance;
 }
Exemplo n.º 28
0
 /**
  * Gets the data for the global forum RSS feed.
  *
  * @return XenForo_ControllerResponse_Abstract
  */
 public function getGlobalForumRss()
 {
     $threadModel = $this->_getThreadModel();
     $visitor = XenForo_Visitor::getInstance();
     $threadsPerPage = max(1, XenForo_Application::get('options')->discussionsPerPage);
     $autoReadDate = XenForo_Application::$time - XenForo_Application::get('options')->readMarkingDataLifetime * 86400;
     $threads = $threadModel->getThreads(array('find_new' => true, 'last_post_date' => array('>', $autoReadDate), 'not_discussion_type' => 'redirect'), array('limit' => $threadsPerPage * 3, 'order' => 'last_post_date', 'join' => XenForo_Model_Thread::FETCH_FORUM | XenForo_Model_Thread::FETCH_FORUM_OPTIONS | XenForo_Model_Thread::FETCH_USER | XenForo_Model_Thread::FETCH_FIRSTPOST, 'permissionCombinationId' => $visitor['permission_combination_id']));
     foreach ($threads as $key => &$thread) {
         $thread['permissions'] = XenForo_Permission::unserializePermissions($thread['node_permission_cache']);
         if (!$threadModel->canViewThreadAndContainer($thread, $thread, $null, $thread['permissions'])) {
             unset($threads[$key]);
         }
     }
     $threads = array_slice($threads, 0, $threadsPerPage, true);
     foreach ($threads as &$thread) {
         $thread = $threadModel->prepareThread($thread, $thread, $thread['permissions']);
     }
     $viewParams = array('threads' => $threads);
     return $this->responseView('XenForo_ViewPublic_Forum_GlobalRss', '', $viewParams);
 }
Exemplo n.º 29
0
 /**
  * Helper to unserialize permissions in a list of items.
  *
  * @param array $items List of items
  * @param string $serializedKey Key where serialized permissions are
  * @param string $targetKey Key where unserialized permissions will go
  *
  * @return array List of items with permissions unserialized
  */
 public function unserializePermissionsInList(array $items, $serializedKey, $targetKey = 'permissions')
 {
     foreach ($items as &$item) {
         $item[$targetKey] = !empty($item[$serializedKey]) ? XenForo_Permission::unserializePermissions($item[$serializedKey]) : array();
     }
     return $items;
 }
Exemplo n.º 30
0
 public function sendAlertWhenNewEventCreated(array $event, array $team)
 {
     $memberModel = $this->_getMemberModel();
     $teamModel = $this->_getTeamModel();
     $categoryModel = $this->getModelFromCache('Nobita_Teams_Model_Category');
     $category = $categoryModel->getCategoryById($team['team_category_id']);
     if (!$category) {
         $category = array();
     }
     $users = $memberModel->getAllMembersInTeam($event['team_id'], array('alert' => 1, 'member_state' => 'accept'), array('join' => Nobita_Teams_Model_Member::FETCH_USER | Nobita_Teams_Model_Member::FETCH_USER_PERMISSIONS));
     if (empty($users)) {
         return true;
     }
     foreach ($users as $user) {
         $user['permissions'] = XenForo_Permission::unserializePermissions($user['global_permission_cache']);
         if ($this->getModelFromCache('XenForo_Model_User')->isUserIgnored($user, $event['user_id'])) {
             continue;
         }
         if ($user['user_id'] == $event['user_id']) {
             continue;
         }
         if (empty($user['send_alert'])) {
             // i dont want to get alert
             // ignore me
             continue;
         }
         if (!$teamModel->canViewTeamAndContainer($team, $category, $null, $user)) {
             continue;
         }
         if (!$this->canViewEvent($event, $team, $category, $null, $user)) {
             continue;
         }
         XenForo_Model_Alert::alert($user['user_id'], $event['user_id'], $event['username'], 'team_event', $event['event_id'], 'publish');
     }
 }