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