/** * Rebuilds the data. * * @see XenForo_CacheRebuilder_Abstract::rebuild() */ public function rebuild($position = 0, array &$options = array(), &$detailedMessage = '') { $options['batch'] = max(1, isset($options['batch']) ? $options['batch'] : 10); $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel(); if ($position == 0) { $socialForumModel->unlinkMovedThreads(); } $socialForums = $socialForumModel->getSocialForums(array(), array('limit' => $options['batch'], 'offset' => $position)); XenForo_Db::beginTransaction(); foreach ($socialForums as $socialForum) { $position++; /* @var $socialForumDw ThemeHouse_SocialGroups_DataWriter_SocialForum */ $socialForumDw = XenForo_DataWriter::create('ThemeHouse_SocialGroups_DataWriter_SocialForum', XenForo_DataWriter::ERROR_SILENT); if ($socialForumDw->setExistingData($socialForum, true)) { $socialForumDw->rebuildCounters(); $socialForumDw->save(); } } XenForo_Db::commit(); $detailedMessage = XenForo_Locale::numberFormat($position); if (!$socialForums) { return true; } else { return $position; } }
/** * * @see XenForo_Model_ThreadWatch::getUsersWatchingThread() */ public function getUsersWatchingThread($threadId, $nodeId) { $users = parent::getUsersWatchingThread($threadId, $nodeId); /* @var $threadModel XenForo_Model_Thread */ $threadModel = $this->getModelFromCache('XenForo_Model_Thread'); $thread = $threadModel->getThreadById($threadId); if (!empty($thread['social_forum_id'])) { /* @var $socialForumMemberModel ThemeHouse_SocialGroups_Model_SocialForumMember */ $socialForumMemberModel = $this->getModelFromCache('ThemeHouse_SocialGroups_Model_SocialForumMember'); $socialForumMembers = $socialForumMemberModel->getSocialForumUsers(array('user_ids' => array_keys($users), 'social_forum_id' => $thread['social_forum_id'])); $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel(); foreach ($users as $userId => &$user) { if (!empty($socialForumMembers[$userId])) { $user = array_merge($user, $socialForumMembers[$userId]); } else { continue; } $permissions = array(); if (!empty($user['node_permission_cache'])) { $permissions = unserialize($user['node_permission_cache']); } $nodePermissionCache = $socialForumModel->getSocialForumPermissions($user, $permissions); $user['node_permission_cache'] = serialize($nodePermissionCache); } } return $users; }
public function rebuildSocialForumCombination(array $socialForumCombination, array $socialForums = null) { $socialForumIds = explode(',', $socialForumCombination['social_forum_ids']); if (is_null($socialForums)) { $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel(); $socialForums = $socialForumModel->getSocialForumsByIds($socialForumIds); $socialForums = $this->_prepareSocialForumsForCombination($socialForums); } else { foreach ($socialForums as $socialForumId => $socialForum) { if (!in_array($socialForumId, $socialForumIds)) { unset($socialForums[$socialForumId]); } } if ($socialForums) { $socialForums = $this->_prepareSocialForumsForCombination($socialForums); } } $socialForumCombination['social_forum_ids'] = implode(',', array_keys($socialForums)); $cacheValue = serialize($socialForums); $this->_getDb()->query(' INSERT INTO xf_social_forum_combination (social_forum_combination_id, social_forum_ids, cache_value) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE social_forum_ids = VALUES(social_forum_ids), cache_value = VALUES(cache_value) ', array($socialForumCombination['social_forum_combination_id'], $socialForumCombination['social_forum_ids'], $cacheValue)); }
public function getSocialForumPermissions(array $user, $permissions) { $socialForum = array(); if (!isset($user['user_group_permissions'])) { if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray(); } } else { $socialForum = $user; } $socialForumMember = array(); if (!isset($user['social_user_group_id'])) { if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForumMember = ThemeHouse_SocialGroups_SocialForum::getInstance()->getMember(); } } else { $socialForumMember = $user; } $nodePermissions = array(); if (isset($socialForumMember['is_approved']) && isset($socialForumMember['is_invited']) && !empty($socialForumMember) && $socialForumMember['is_approved'] && !$socialForumMember['is_invited']) { if (isset($socialForum['user_group_permissions']) && $socialForum['user_group_permissions']) { $userGroupPermissions = unserialize($socialForum['user_group_permissions']); if (isset($userGroupPermissions[$socialForumMember['social_user_group_id']])) { $nodePermissions = $userGroupPermissions[$socialForumMember['social_user_group_id']]; } } } foreach ($nodePermissions as $nodePermission => $permissionValue) { if ($permissionValue) { $permissions[$nodePermission] = 1; } } return parent::getSocialForumPermissions($user, $permissions); }
/** * * @see XenForo_Route_Prefix_Forums::buildLink() */ public function buildLink($originalPrefix, $outputPrefix, $action, $extension, $data, array &$extraParams) { if (isset($data['social_forum_id'])) { if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray(); } else { $socialForum = $data; } $class = XenForo_Application::resolveDynamicClass('ThemeHouse_SocialGroups_Route_Prefix_SocialForums', 'route_prefix'); $router = new $class(); $link = $router->buildLink('social-forums', 'social-forums', $action, $extension, $socialForum, $extraParams); if (XenForo_Application::isRegistered('routeFiltersOut')) { $routeFilters = XenForo_Application::get('routeFiltersOut'); if (isset($routeFilters['social-forums'])) { foreach ($routeFilters['social-forums'] as $filter) { if (array_key_exists('find_route', $filter) && array_key_exists('replace_route', $filter)) { list($from, $to) = XenForo_Link::translateRouteFilterToRegex($filter['find_route'], $filter['replace_route']); $newLink = preg_replace($from, $to, $link); } else { $newLink = $link; } if ($newLink != $link) { $link = $newLink; break; } } } } return $link; } return parent::buildLink($originalPrefix, $outputPrefix, $action, $extension, $data, $extraParams); }
/** * * @see XenForo_ControllerAdmin_Notice::_getNoticeAddEditResponse() */ protected function _getNoticeAddEditResponse(array $notice) { /* @var $response XenForo_ControllerResponse_View */ $response = parent::_getNoticeAddEditResponse($notice); /* @var $socialForumModel ThemeHouse_SocialGroups_Model_SocialForum */ $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel(); $response->params['pageCriteriaData']['socialForums'] = $socialForumModel->getSocialForums(array()); return $response; }
/** * @param array $options * @param int $page * @return array */ public function getModule($options, $page) { $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel(); $params['socialForums'] = $socialForumModel->getSocialForums(array(), array('limit' => isset($options['limit']) ? $options['limit'] : 5, 'order' => 'created_date')); foreach ($params['socialForums'] as &$forum) { $forum['urls'] = ThemeHouse_SocialGroups_Template_Helper_SocialForum::getAvatarUrls($forum); } return $params; }
/** * * @see XenForo_ControllerHelper_ForumThreadPost::getNodeBreadCrumbs() */ public function getNodeBreadCrumbs(array $forum, $includeSelf = true) { if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray(); if (isset($socialForum['social_forum_id'])) { return $this->_controller->getModelFromCache('ThemeHouse_SocialGroups_Model_SocialForum')->getNodeBreadCrumbs($socialForum, $forum, $includeSelf); } } return parent::getNodeBreadCrumbs($forum, $includeSelf); }
/** * * @see XenForo_ViewPublic_Forum_View::renderHtml() */ public function renderHtml() { parent::renderHtml(); if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $xenOptions = XenForo_Application::get('options'); if (!$xenOptions->th_socialGroups_showChildNodesInSocialForums) { $this->_params['renderedNodes'] = array(); } } }
/** * * @see XenResource_Model_Resource::getResourceByDiscussionId */ public function getResourceByDiscussionId($discussionId, array $fetchOptions = array()) { if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance(); if (isset($socialForum['social_forum_id'])) { return $this->getResourceBySocialForumId($socialForum['social_forum_id'], $fetchOptions); } } return parent::getResourceByDiscussionId($discussionId, $fetchOptions); }
protected function _getSocialCategoryResponse(XenForo_ControllerResponse_Abstract $response) { if (!ThemeHouse_SocialGroups_SocialForum::hasInstance() && $response instanceof XenForo_ControllerResponse_View) { if (isset($response->params['forum']) && isset($response->params['forum']['node_type_id'])) { if ($response->params['forum']['node_type_id'] == "SocialCategory") { return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL_PERMANENT, XenForo_Link::buildPublicLink('social-categories', $response->params['forum'])); } } } return $response; }
/** * * @see XenResource_DataWriter_Resource::_resourceMadeVisible() */ protected function _resourceMadeVisible(array &$postSaveChanges) { parent::_resourceMadeVisible($postSaveChanges); if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { if ($this->get('social_forum_id')) { $postSaveChanges['social_forum_id'] = $this->get('social_forum_id'); unset($postSaveChanges['discussion_thread_id']); $this->set('discussion_thread_id', 0, '', array('setAfterPreSave' => true)); } } }
/** * * @see XenForo_Model_Forum::canUploadAndManageAttachment() */ public function canUploadAndManageAttachment(array $forum, &$errorPhraseKey = '', array $nodePermissions = null, array $viewingUser = null) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance(); if ($forum['node_type_id'] == 'SocialCategory' && !isset($socialForum['social_forum_id'])) { $socialForumMember = $this->_getSocialForumMemberModel()->getMaximumMembershipForUserId(XenForo_Visitor::getUserId()); // TODO: Need to check whether a user can upload an attachment for a specific group if ($socialForumMember['level']) { $nodePermissions = XenForo_Application::get('options')->th_socialGroups_permissions[$socialForumMember['level']]; } } return parent::canUploadAndManageAttachment($forum, $errorPhraseKey, $nodePermissions, $viewingUser); }
/** * * @param ThemeHouse_SocialGroups_ControllerPublic_SocialForum $controller */ protected function _processSocialUserGroupChange(ThemeHouse_SocialGroups_ControllerPublic_SocialForum $controller) { $socialUserGroupId = $controller->getInput()->filterSingle('social_user_group_id', XenForo_Input::UINT); $socialForumModel = $this->getModelFromCache('ThemeHouse_SocialGroups_Model_SocialForum'); if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray(); } else { return $this->responseError('th_requested_social_forum_not_found_socialgroups'); } if ($socialForumModel->canManageSocialUserGroups($socialForum)) { $this->set('social_user_group_id', $socialUserGroupId); } }
/** * * @see ThemeHouse_SocialGroups_Extend_XenForo_ControllerPublic_Thread::_overrideSocialForumStyle() */ protected function _overrideSocialForumStyle(array $thread) { if (isset($thread['social_forum_id']) && $thread['social_forum_id']) { if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForumMember = ThemeHouse_SocialGroups_SocialForum::getInstance()->getMember(); if (isset($socialForumMember['style_id']) && $socialForumMember['style_id']) { $this->setViewStateChange('styleId', $socialForumMember['style_id']); return; } } } return parent::_overrideSocialForumStyle($thread); }
public static function criteriaPage($rule, array $data, array $params, array $containerData, &$returnValue) { switch ($rule) { case 'social_forums': if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance(); if (isset($socialForum['social_forum_id']) && in_array($socialForum['social_forum_id'], $data['social_forum_ids'])) { $returnValue = true; } } break; } }
/** * * @see XenForo_DataWriter_User::_preSave() */ protected function _preSave() { parent::_preSave(); if (!empty($GLOBALS['XenForo_ControllerAdmin_Tools']) || !empty($GLOBALS['XenForo_Deferred_User'])) { if ($this->get('user_id')) { /* @var $socialForumModel ThemeHouse_SocialGroups_Model_SocialForum */ $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel(); $this->set('social_forums_joined', $socialForumModel->countJoinedSocialForumsForUser($this->get('user_id'))); $this->set('social_forums_created', $socialForumModel->countSocialForums(array('creator_id' => $this->get('user_id')))); } } if (!empty($GLOBALS['XenForo_ControllerPublic_Account'])) { /* @var $controller XenForo_ControllerPublic_Account */ $controller = $GLOBALS['XenForo_ControllerPublic_Account']; if ($controller->getRouteMatch()->getAction() == 'personal-details-save') { $primarySocialForumId = 0; $secondarySocialForumIds = array(); $xenOptions = XenForo_Application::get('options'); if ($xenOptions->th_socialGroups_allowPrimary) { $primarySocialForumId = $controller->getInput()->filterSingle('primary_social_forum_id', XenForo_Input::UINT); } if ($xenOptions->th_socialGroups_allowSecondary) { $secondarySocialForumIds = $controller->getInput()->filterSingle('secondary_social_forum_ids', XenForo_Input::ARRAY_SIMPLE); } if ($primarySocialForumId && in_array($primarySocialForumId, $secondarySocialForumIds)) { unset($secondarySocialForumIds[array_search($primarySocialForumId, $secondarySocialForumIds)]); } $maxSecondarySocialForums = $this->_getUserModel()->getMaximumSecondarySocialForums(); if (count($secondarySocialForumIds) > $maxSecondarySocialForums) { $secondarySocialForumIds = array_slice($secondarySocialForumIds, 0, $maxSecondarySocialForums); } $secondarySocialForumIds = implode(",", $secondarySocialForumIds); $this->set('primary_social_forum_id', $primarySocialForumId); $this->set('secondary_social_forum_ids', $secondarySocialForumIds); } } if ($this->isChanged('secondary_social_forum_ids') || !empty($GLOBALS['XenForo_Deferred_User'])) { $secondarySocialForumIds = $this->get('secondary_social_forum_ids'); /* @var $socialForumCombinationModel ThemeHouse_SocialGroups_Model_SocialForumCombination */ $socialForumCombinationModel = XenForo_Model::create('ThemeHouse_SocialGroups_Model_SocialForumCombination'); $socialForumCombinationId = $socialForumCombinationModel->getSocialForumCombinationBySocialForumIds($secondarySocialForumIds); $this->set('social_forum_combination_id', $socialForumCombinationId); if ($socialForumCombinationId) { $socialForumCombination = array('social_forum_combination_id' => $socialForumCombinationId, 'social_forum_ids' => $secondarySocialForumIds); $socialForumCombinationModel->rebuildSocialForumCombination($socialForumCombination); } } }
/** * Gets the actual existing data out of data that was passed in. * See parent for explanation. * * @param mixed * * @return array false */ protected function _getExistingData($data) { if (!($socialUserGroupId = $this->_getExistingPrimaryKey($data, 'social_user_group_id'))) { return false; } if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray(); } else { return false; } $socialUserGroup = $this->_getSocialUserGroupModel()->getSocialUserGroupById($socialUserGroupId, $socialForum['social_forum_id']); if (!$socialUserGroup) { return false; } return $this->getTablesDataFromArray($socialUserGroup); }
/** * List of all new watched content. * * @return XenForo_ControllerResponse_Abstract */ public function actionSocialForums() { /* @var $socialForumModel ThemeHouse_SocialGroups_Model_SocialForum */ $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel(); $forumWatchModel = $this->_getForumWatchModel(); $visitor = XenForo_Visitor::getInstance(); $socialForumsWatched = $forumWatchModel->getUserSocialForumWatchByUser($visitor['user_id']); $socialForumIds = array_keys($socialForumsWatched); $fetchOptions = array('join' => ThemeHouse_SocialGroups_Model_SocialForum::FETCH_SOCIAL_MEMBER | ThemeHouse_SocialGroups_Model_SocialForum::FETCH_AVATAR, 'readUserId' => $visitor['user_id']); $socialForums = $socialForumModel->getSocialForumsByIds($socialForumIds, $fetchOptions); foreach ($socialForums as &$socialForum) { $socialForum = $socialForumModel->prepareSocialForum($socialForum); } $viewParams = array('socialForums' => $socialForums, 'socialForumsWatched' => $socialForumsWatched); return $this->responseView('ThemeHouse_SocialGroups_ViewPublic_Watched_SocialForums', 'th_watch_social_forums_socialgroups', $viewParams); }
/** * 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; }
protected function _preSave() { if (isset($GLOBALS['ThemeHouse_SocialGroups_ControllerPublic_SocialForum']) || isset($GLOBALS['ThemeHouse_SocialGroups_ControllerPublic_SocialCategory'])) { if (isset($GLOBALS['ThemeHouse_SocialGroups_ControllerPublic_SocialForum'])) { /* @var $controller ThemeHouse_SocialGroups_ControllerPublic_SocialForum */ $controller = $GLOBALS['ThemeHouse_SocialGroups_ControllerPublic_SocialForum']; } else { /* @var $controller ThemeHouse_SocialGroups_ControllerPublic_SocialCategory */ $controller = $GLOBALS['ThemeHouse_SocialGroups_ControllerPublic_SocialCategory']; } $socialPermissionSetId = $controller->getInput()->filterSingle('social_permission_set_id', XenForo_Input::UINT); $this->set('social_permission_set_id_th', $socialPermissionSetId); } if ($this->isChanged('social_permission_set_id_th') && !$this->get('social_permission_set_id_th')) { $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel(); $socialCategory = $this->_getSocialCategoryData(); if (!$socialForumModel->canManageSocialPermissions(array(), $socialCategory)) { $this->error(new XenForo_Phrase('th_must_select_social_permission_set_socialperms')); } } parent::_preSave(); }
protected function _updateSocialForum($resource) { if (!$this->_isFirstVisible || !$resource || !$resource['social_forum_id']) { return false; } $socialForum = ThemeHouse_SocialGroups_SocialForum::setup($resource['social_forum_id'])->toArray(); if (!$socialForum) { return false; } $forum = $this->getModelFromCache('XenForo_Model_Forum')->getForumById($socialForum['node_id']); if (!$forum) { return false; } $threadDw = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread', XenForo_DataWriter::ERROR_SILENT); $threadDw->setExtraData(XenForo_DataWriter_Discussion_Thread::DATA_FORUM, $forum); $threadDw->bulkSet(array('node_id' => $socialForum['node_id'], 'title' => $this->get('title'), 'user_id' => $resource['user_id'], 'username' => $resource['username'], 'discussion_type' => 'resource')); $threadDw->set('discussion_state', $this->getModelFromCache('XenForo_Model_Post')->getPostInsertMessageState(array(), $forum)); $threadDw->setOption(XenForo_DataWriter_Discussion::OPTION_PUBLISH_FEED, false); $messageText = $this->get('message'); // note: this doesn't actually strip the BB code - it will fix the BB code in the snippet though $parser = new XenForo_BbCode_Parser(XenForo_BbCode_Formatter_Base::create('XenForo_BbCode_Formatter_BbCode_AutoLink', false)); $snippet = $parser->render(XenForo_Helper_String::wholeWordTrim($messageText, 500)); $message = new XenForo_Phrase('resource_message_create_update', array('title' => $this->get('title'), 'username' => $resource['username'], 'userId' => $resource['user_id'], 'snippet' => $snippet, 'updateLink' => XenForo_Link::buildPublicLink('canonical:resources/update', $resource, array('update' => $this->get('resource_update_id'))), 'resourceTitle' => $resource['title'], 'resourceLink' => XenForo_Link::buildPublicLink('canonical:resources', $resource)), false); $postWriter = $threadDw->getFirstMessageDw(); $postWriter->set('message', $message->render()); $postWriter->setExtraData(XenForo_DataWriter_DiscussionMessage_Post::DATA_FORUM, $forum); $postWriter->setOption(XenForo_DataWriter_DiscussionMessage::OPTION_PUBLISH_FEED, false); if (!$threadDw->save()) { return false; } $this->set('discussion_thread_id', $threadDw->get('thread_id'), '', array('setAfterPreSave' => true)); $postSaveChanges['discussion_thread_id'] = $threadDw->get('thread_id'); $this->getModelFromCache('XenForo_Model_Thread')->markThreadRead($threadDw->getMergedData(), $forum, XenForo_Application::$time); $this->getModelFromCache('XenForo_Model_ThreadWatch')->setThreadWatchStateWithUserDefault($this->get('user_id'), $threadDw->get('thread_id'), $this->getExtraData(XenResource_DataWriter_Resource::DATA_THREAD_WATCH_DEFAULT)); return $postWriter->get('post_id'); }
/** * * @return ThemeHouse_SocialGroups_Model_SocialForum */ protected function _getSocialForumModel() { return ThemeHouse_SocialGroups_SocialForum::getSocialForumModel(); }
/** * * @return ThemeHouse_SocialGroups_Model_SocialForum */ public static function getSocialForumModel() { if (!self::$_socialForumModel) { if (!class_exists('XFCP_ThemeHouse_SocialGroups_Model_SocialForum', false)) { $createClass = XenForo_Application::resolveDynamicClass('XenForo_Model_Forum', 'model'); eval('class XFCP_ThemeHouse_SocialGroups_Model_SocialForum extends ' . $createClass . ' {}'); } self::$_socialForumModel = XenForo_Model::create('ThemeHouse_SocialGroups_Model_SocialForum'); } return self::$_socialForumModel; }
/** * * @see XenForo_Model_Post::canViewAttachmentOnPost() */ public function canViewAttachmentOnPost(array $post, array $thread, array $forum, &$errorPhraseKey = '', array $nodePermissions = null, array $viewingUser = null) { if (isset($thread['social_forum_id']) && $thread['social_forum_id']) { $socialForum = ThemeHouse_SocialGroups_SocialForum::setup($thread['social_forum_id']); /* @var $socialForumModel ThemeHouse_SocialGroups_Model_SocialForum */ $socialForumModel = XenForo_Model::create('ThemeHouse_SocialGroups_Model_SocialForum'); $nodePermissions = $socialForumModel->getNodePermissions($socialForum->toArray(), $socialForum->getSocialForumMembers()); XenForo_Visitor::getInstance()->setNodePermissions($forum['node_id'], $nodePermissions); } return parent::canViewAttachmentOnPost($post, $thread, $forum, $errorPhraseKey, $nodePermissions, $viewingUser); }
public function actionPermissionsUserGroupSave() { $this->_assertPostOnly(); if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray(); } else { return $this->responseError('th_requested_social_forum_not_found_socialgroups'); } // TODO: return error if social permissions add-on is disabled or not installed $this->_assertCanManageSocialPermissions($socialForum); $this->_assertCanManageSocialUserGroups($socialForum); $data = $this->_input->filter(array('permissions' => XenForo_Input::ARRAY_SIMPLE, 'social_user_group_id' => XenForo_Input::UINT)); foreach ($data['permissions'] as $permissionId => $permissionSet) { if (!isset(XenForo_Application::get('options')->th_socialGroups_permissions[3][$permissionId])) { unset($data['permissions'][$permissionId]); } } $dw = XenForo_DataWriter::create('ThemeHouse_SocialGroups_DataWriter_SocialForum'); $dw->setExistingData($socialForum); $dw->setSocialUserGroupPermissions($data['social_user_group_id'], $data['permissions']); $dw->save(); return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('social-forums/permissions/user-groups', $socialForum, array('social_user_group_id' => $data['social_user_group_id']))); }
public static function getSocialForumCacheItem($socialForumId) { if (!self::isSocialForumCacheItem($socialForumId)) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel()->getSocialForumById($socialForumId); if (!$socialForum) { self::$socialForumCache[$socialForumId] = false; } else { self::setSocialForumCacheItem($socialForum); } } return self::$socialForumCache[$socialForumId]; }
public function stepMembers($start, array $options) { $model = $this->_importModel; $socialForumMap = $model->getImportContentMap('socialForum'); $options = array_merge(array('limit' => 100, 'max' => false), $options); if ($options['max'] === false) { $options['max'] = $this->_db->fetchOne(' SELECT MAX(member_id) FROM xf_cz_group_member '); } $members = $this->_db->fetchAll($this->_db->limit(' SELECT * FROM xf_cz_group_member WHERE member_id > ' . $this->_db->quote($start) . ' ORDER BY member_id ', $options['limit'])); if (!$members) { return true; } $next = 0; $total = 0; XenForo_Db::beginTransaction(); foreach ($members as $member) { $next = $member['member_id']; $socialForumId = $this->_mapLookUp($socialForumMap, $member['group_id']); if ($socialForumId) { if ($member['user_id']) { $socialForum = ThemeHouse_SocialGroups_SocialForum::setup($socialForumId); $writer = XenForo_DataWriter::create('ThemeHouse_SocialGroups_DataWriter_SocialForumMember'); $writer->set('social_forum_id', $socialForumId); $writer->set('user_id', $member['user_id']); $writer->set('join_date', $member['join_date']); $writer->set('is_approved', 1); $writer->save(); $total++; } } } XenForo_Db::commit(); $this->_session->incrementStepImportTotal($total); return array($next, $options, $this->_getProgressOutput($next, $options['max'])); }
/** * * @see ThemeHouse_SocialGroups_Model_SocialForum::getSocialForumPermissions() */ public function getSocialForumPermissions(array $user, $permissions) { if (!isset($user['guest_permissions']) || !isset($user['member_permissions']) || !isset($user['moderator_permissions'])) { if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) { $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray(); } else { $socialForum = array(); } } else { $socialForum = $user; } $isMember = isset($user['is_approved']) && isset($user['is_invited']) && !empty($user) && $user['is_approved'] && !$user['is_invited']; // add per-node permissions $categoryPermissions = array(); if ($isMember) { if (!empty($user['is_social_forum_creator']) && !empty($socialForum['category_creator_permissions'])) { $categoryPermissions = unserialize($socialForum['category_creator_permissions']); } elseif (!empty($user['is_social_forum_moderator']) && !empty($socialForum['category_moderator_permissions'])) { $categoryPermissions = unserialize($socialForum['category_moderator_permissions']); } elseif (!empty($socialForum['category_member_permissions'])) { $categoryPermissions = unserialize($socialForum['category_member_permissions']); } } foreach ($categoryPermissions as $categoryPermission => $permissionValue) { if ($permissionValue) { $permissions[$categoryPermission] = 1; } } // add pre-set permissions $setPermissions = array(); if ($isMember) { if (!empty($user['is_social_forum_creator']) && !empty($socialForum['social_creator_permissions'])) { $setPermissions = unserialize($socialForum['social_creator_permissions']); } elseif (!empty($user['is_social_forum_moderator']) && !empty($socialForum['social_moderator_permissions'])) { $setPermissions = unserialize($socialForum['social_moderator_permissions']); } elseif (!empty($socialForum['social_member_permissions'])) { $setPermissions = unserialize($socialForum['social_member_permissions']); } } elseif (!empty($user['is_invited']) && !empty($socialForum['social_invited_permissions'])) { $setPermissions = unserialize($socialForum['social_invited_permissions']); } elseif (!empty($user['social_forum_member_id']) && !empty($socialForum['social_awaiting_permissions'])) { $setPermissions = unserialize($socialForum['social_awaiting_permissions']); } elseif (!empty($socialForum['social_guest_permissions'])) { $setPermissions = unserialize($socialForum['social_guest_permissions']); } foreach ($setPermissions as $setPermission => $permissionValue) { if ($permissionValue) { $permissions[$setPermission] = 1; } } // add per-social group permissions $groupPermissions = array(); if ($isMember) { if (!empty($user['is_social_forum_moderator']) && !empty($socialForum['moderator_permissions'])) { $groupPermissions = unserialize($socialForum['moderator_permissions']); } elseif (!empty($socialForum['member_permissions'])) { $groupPermissions = unserialize($socialForum['member_permissions']); } } elseif (!empty($socialForum['guest_permissions'])) { $groupPermissions = unserialize($socialForum['guest_permissions']); } foreach ($groupPermissions as $groupPermission => $permissionValue) { if ($permissionValue) { $permissions[$groupPermission] = 1; } } return parent::getSocialForumPermissions($user, $permissions); }
/** * Rebuilds the counters for this forum. */ public function rebuildCounters() { $this->updateLastPost(); $this->updateMemberCount(); $this->bulkSet(ThemeHouse_SocialGroups_SocialForum::getSocialForumModel()->getSocialForumCounters($this->get('social_forum_id'))); }