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);
 }
 protected function _thSocialForumContainerSocialGroups()
 {
     $viewParams = $this->_fetchViewParams();
     $resource = ThemeHouse_SocialGroups_SocialForum::getInstance()->getResource();
     if ($resource) {
         $this->_prependTemplate('resource_view_header', $viewParams + array('resource' => $resource, 'titleHtml' => isset($containerData['h1']) ? $this->_containerData['h1'] : false));
         $this->_containerData['h1'] = '';
     }
 }
Exemple #4
0
 /**
  *
  * @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);
 }
 /**
  *
  * @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);
 }
 public function getWrapper(XenForo_ControllerResponse_View $subView, $forceSidebar = false)
 {
     $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray();
     $visitor = XenForo_Visitor::getInstance();
     $allMembers = ThemeHouse_SocialGroups_SocialForum::getInstance()->getSocialForumMembers();
     $socialForumModerators = array();
     $socialForumMembers = array();
     $socialForumUnapprovedMembers = array();
     $canApproveSocialForumJoinRequest = $this->_getSocialForumModel()->canApproveSocialForumJoinRequest($socialForum);
     foreach ($allMembers as $member) {
         if ($member['is_invited']) {
             // do nothing
         } else {
             if ($member['is_approved']) {
                 if ($member['is_social_forum_moderator']) {
                     $socialForumModerators[] = $member;
                 } else {
                     $socialForumMembers[] = $member;
                 }
             } else {
                 if ($canApproveSocialForumJoinRequest) {
                     $socialForumUnapprovedMembers[] = $member;
                 }
             }
         }
     }
     $member = array();
     if (array_key_exists($visitor['user_id'], $allMembers)) {
         $member = $allMembers[$visitor['user_id']];
     }
     $forumId = $this->_controller->getInput()->filterSingle('node_id', XenForo_Input::UINT);
     $ftpHelper = $this->_controller->getHelper('ForumThreadPost');
     $forum = $this->_controller->getHelper('ForumThreadPost')->assertForumValidAndViewable($forumId, array());
     if (isset($subView->params['nodeBreadCrumbs'])) {
         $nodeBreadCrumbs = $subView->params['nodeBreadCrumbs'];
     } else {
         $nodeBreadCrumbs = $ftpHelper->getNodeBreadCrumbs($forum, true);
     }
     $forum['description'] = '';
     $forum['social_forum_id'] = $socialForum['social_forum_id'];
     $forum['title'] = $socialForum['title'];
     $forum['forum_is_watched'] = $socialForum['social_forum_is_watched'];
     $subView->params['forum'] = $forum;
     $canViewSocialForumMembers = $this->_getSocialForumModel()->canViewSocialForumMembers($socialForum);
     $viewParams = array('socialForum' => $socialForum, 'socialForumModerators' => $canViewSocialForumMembers ? $socialForumModerators : array(), 'socialForumMembers' => $canViewSocialForumMembers ? $socialForumMembers : array(), 'socialForumUnapprovedMembers' => $canViewSocialForumMembers ? $socialForumUnapprovedMembers : array(), 'socialForumMemberCount' => count($socialForumMembers) + count($socialForumModerators), 'member' => $member, 'canViewSocialForumMembers' => $canViewSocialForumMembers, 'canJoinSocialForum' => $this->_getSocialForumModel()->canJoinSocialForum($socialForum), 'canLeaveSocialForum' => $this->_getSocialForumModel()->canLeaveSocialForum($socialForum), 'canEditSocialForum' => $this->_getSocialForumModel()->canEditSocialForum($socialForum), 'canMoveSocialForum' => $this->_getSocialForumModel()->canMoveSocialForum($socialForum), 'canDeleteSocialForum' => $this->_getSocialForumModel()->canDeleteSocialForum($socialForum), 'nodeBreadCrumbs' => $nodeBreadCrumbs);
     $subView->params = array_merge($subView->params, $viewParams);
     if (XenForo_Application::get('options')->th_socialGroups_showSidebar || $forceSidebar) {
         $wrapper = $this->_controller->responseView('ThemeHouse_SocialGroups_ViewPublic_SocialForum_View', 'th_social_forum_container_socialgroups', $viewParams);
         $wrapper->containerParams['noVisitorPanel'] = true;
         $wrapper->subView = $subView;
         return $wrapper;
     }
     return $subView;
 }
Exemple #7
0
 /**
  *
  * @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);
 }
 /**
  *
  * @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);
 }
 /**
  *
  * @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);
     }
 }
 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;
     }
 }
 /**
  * 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);
 }
Exemple #12
0
 /**
  *
  * @see XenForo_ControllerPublic_Thread::actionIndex()
  */
 public function actionIndex()
 {
     $response = parent::actionIndex();
     if ($response instanceof XenForo_ControllerResponse_View) {
         $thread = $response->params['thread'];
         $this->_overrideSocialForumStyle($thread);
         if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) {
             $response->params['socialForum'] = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray();
             $response->params['forum']['social_forum_id'] = $response->params['socialForum']['social_forum_id'];
             $response->params['forum']['social_forum_title'] = $response->params['socialForum']['social_forum_title'];
             $this->_getForumModel()->markSocialForumReadIfNeeded($response->params['socialForum']);
             if ($response->params['socialForum']['social_forum_type'] == 'resource') {
                 $response->params['thread']['discussion_type'] = 'resource';
             }
         }
     }
     return $response;
 }
Exemple #13
0
 /**
  *
  * @see XenForo_Model_Thread::getStickyThreadsInForum()
  */
 public function getStickyThreadsInForum($forumId, array $conditions = array(), array $fetchOptions = array())
 {
     $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance();
     if (!empty($socialForum)) {
         if (isset($socialForum['social_forum_id'])) {
             $conditions['social_forum_id'] = $socialForum['social_forum_id'];
         }
     }
     return parent::getStickyThreadsInForum($forumId, $conditions, $fetchOptions);
 }
 protected function _thSocialForumDescriptionAboveSocialgroups()
 {
     $viewParams = $this->_fetchViewParams();
     if ($viewParams['socialForum']['social_forum_type'] == 'resource') {
         /* @var $resourceModel XenResource_Model_Resource */
         $resourceModel = XenForo_Model::create('XenResource_Model_Resource');
         $fetchOptions = array('join' => XenResource_Model_Resource::FETCH_CATEGORY | XenResource_Model_Resource::FETCH_USER | XenResource_Model_Resource::FETCH_ATTACHMENT | XenResource_Model_Resource::FETCH_VERSION, 'watchUserId' => XenForo_Visitor::getUserId());
         if (XenForo_Visitor::getInstance()->hasPermission('resource', 'viewDeleted')) {
             $fetchOptions['join'] |= XenResource_Model_Resource::FETCH_DELETION_LOG;
         }
         $resource = $resourceModel->getResourceBySocialForumId($viewParams['socialForum']['social_forum_id'], $fetchOptions);
         if ($resource && $resourceModel->canViewResourceAndContainer($resource, $resource)) {
             /* @var $categoryModel XenResource_Model_Category */
             $categoryModel = XenForo_Model::create('XenResource_Model_Category');
             $updateConditions = $categoryModel->getPermissionBasedFetchConditions($resource);
             if ($updateConditions['deleted'] === true || $updateConditions['moderated'] === true || $updateConditions['moderated'] == $resource['user_id']) {
                 /* @var $updateModel XenResource_Model_Update */
                 $updateModel = XenForo_Model::create('XenResource_Model_Update');
                 $resourceUpdateCount = $updateModel->countUpdates($updateConditions + array('resource_id' => $resource['resource_id'], 'resource_update_id_not' => $resource['description_update_id']));
             } else {
                 $resourceUpdateCount = $resource['update_count'];
             }
             $resource = $resourceModel->prepareResource($resource, $resource);
             $this->_appendTemplate('resource_view_tabs', $viewParams + array('resource' => $resource, 'resourceUpdateCount' => $resourceUpdateCount, 'selectedTab' => 'discussion'));
             ThemeHouse_SocialGroups_SocialForum::getInstance()->setResource($resource);
         }
     }
 }
Exemple #15
0
 /**
  *
  * @see XenForo_Model_ForumWatch::setForumWatchState()
  */
 public function setForumWatchState($userId, $forumId, $notifyOn = null, $sendAlert = null, $sendEmail = null)
 {
     if (!$userId) {
         return false;
     }
     if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) {
         $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance();
         if ($socialForum['node_id'] == $forumId) {
             $forumWatch = $this->getUserForumWatchByForumId($userId, $forumId);
             if ($notifyOn === 'delete') {
                 if ($forumWatch) {
                     $dw = XenForo_DataWriter::create('ThemeHouse_SocialGroups_DataWriter_SocialForumWatch');
                     $dw->setExistingData($forumWatch, true);
                     $dw->delete();
                 }
                 return true;
             }
             $dw = XenForo_DataWriter::create('ThemeHouse_SocialGroups_DataWriter_SocialForumWatch');
             if ($forumWatch) {
                 $dw->setExistingData($forumWatch, true);
             } else {
                 $dw->set('user_id', $userId);
                 $dw->set('social_forum_id', $socialForum['social_forum_id']);
             }
             if ($notifyOn !== null) {
                 $dw->set('notify_on', $notifyOn);
             }
             if ($sendAlert !== null) {
                 $dw->set('send_alert', $sendAlert ? 1 : 0);
             }
             if ($sendEmail !== null) {
                 $dw->set('send_email', $sendEmail ? 1 : 0);
             }
             $dw->save();
             return true;
         }
     }
     return parent::setForumWatchState($userId, $forumId, $notifyOn, $sendAlert, $sendEmail);
 }
 public function actionPermissionsSave()
 {
     $this->_assertPostOnly();
     if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) {
         $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray();
     } else {
         return $this->responseError('th_requested_social_forum_not_found_socialgroups');
     }
     $this->_assertCanManageSocialPermissions($socialForum);
     $data = $this->_input->filter(array('permissions' => XenForo_Input::ARRAY_SIMPLE, 'social_user_group' => XenForo_Input::STRING));
     foreach ($data['permissions'] as $permissionId => $permissionSet) {
         if (!isset(XenForo_Application::get('options')->th_socialGroups_permissions[3][$permissionId])) {
             unset($data['permissions'][$permissionId]);
         }
         if ($data['social_user_group'] == 'member' && isset(XenForo_Application::get('options')->th_socialGroups_permissions[1][$permissionId])) {
             unset($data['permissions'][$permissionId]);
         } elseif ($data['social_user_group'] == 'moderator' && isset(XenForo_Application::get('options')->th_socialGroups_permissions[2][$permissionId])) {
             unset($data['permissions'][$permissionId]);
         }
     }
     $dw = XenForo_DataWriter::create('ThemeHouse_SocialGroups_DataWriter_SocialForum');
     $dw->setExistingData($socialForum);
     if ($data['social_user_group'] == 'member') {
         $dw->set('member_permissions', $data['permissions']);
     } elseif ($data['social_user_group'] == 'moderator') {
         $dw->set('moderator_permissions', $data['permissions']);
     } else {
         $dw->set('guest_permissions', $data['permissions']);
     }
     $dw->save();
     if ($data['social_user_group'] == 'member') {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('social-forums/permissions/member', $socialForum));
     } elseif ($data['social_user_group'] == 'moderator') {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('social-forums/permissions/moderator', $socialForum));
     } else {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('social-forums/permissions/guest', $socialForum));
     }
 }
 /**
  * Post-delete handling.
  */
 protected function _postDelete()
 {
     if (XenForo_Application::$versionId >= 1020000) {
         /* @var $forumWatchModel XenForo_Model_ForumWatch */
         $forumWatchModel = XenForo_Model::create('XenForo_Model_ForumWatch');
         if (!ThemeHouse_SocialGroups_SocialForum::hasInstance()) {
             ThemeHouse_SocialGroups_SocialForum::setup($this->get('social_forum_id'));
         }
         if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) {
             $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray();
             $forumWatchModel->setForumWatchState($this->get('user_id'), $socialForum['node_id'], 'delete');
         }
     }
     if ($this->getExisting('is_approved') && !$this->getExisting('is_invited')) {
         $this->_db->query('
     			UPDATE xf_social_forum AS social_forum
     			SET social_forum.member_count = IF(social_forum.member_count > 0, social_forum.member_count - 1, 0)
     			WHERE social_forum.social_forum_id = ?
     		', $this->get('social_forum_id'));
         $this->_db->query('
 			UPDATE xf_user_profile AS user_profile
 			SET user_profile.social_forums_joined = IF(user_profile.social_forums_joined > 0, user_profile.social_forums_joined - 1, 0)
 			WHERE user_profile.user_id = ?
 		', $this->getExisting('user_id'));
     }
 }
 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 function actionNoticesDelete()
 {
     if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) {
         $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray();
     } else {
         return $this->responseError('th_requested_social_forum_not_found_socialgroups');
     }
     $this->_assertCanManageSocialNotices($socialForum);
     $noticeId = $this->_input->filterSingle('notice_id', XenForo_Input::UINT);
     if ($this->isConfirmedPost()) {
         return $this->_deleteData('XenForo_DataWriter_Notice', 'notice_id', XenForo_Link::buildPublicLink('social-forums/notices', $socialForum));
     } else {
         $viewParams = array('notice' => $this->_getNoticeOrError($noticeId), 'socialForum' => $socialForum);
         return $this->_getWrapper($this->responseView('ThemeHouse_SocialNotices_ViewAdmin_SocialForum_Notice_Delete', 'th_social_notice_delete_socialnotices', $viewParams));
     }
 }
 /**
  *
  * @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);
 }
 public function actionInvite()
 {
     $this->_assertPostOnly();
     $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance()->toArray();
     $username = $this->_input->filterSingle('username', XenForo_Input::STRING);
     $user = $this->_getUserModel()->getUserByName($username);
     if (!$user) {
         return $this->responseError(new XenForo_Phrase('requested_user_not_found'));
     }
     $this->_getSocialForumMemberModel()->invite($user, $socialForum);
     return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('social-forums/members', $socialForum), new XenForo_Phrase('th_invite_sent_socialgroups'));
 }