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_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);
 }
Exemple #4
0
 /**
  *
  * @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();
         }
     }
 }
Exemple #5
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);
 }
 protected function _forumView()
 {
     if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) {
         $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance();
         $viewParams = $this->_fetchViewParams();
         $viewParams['socialForum'] = $socialForum->toArray();
         $pattern = '#<div class="linkGroup SelectionCountContainer">#';
         $replacement = '$0' . $this->_render('th_social_forum_tools_socialgroups', $viewParams);
         $this->_patternReplace($pattern, $replacement);
     }
 }
Exemple #7
0
 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;
 }
Exemple #8
0
 /**
  *
  * @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));
         }
     }
 }
 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 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);
     }
 }
 /**
  * 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 #13
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;
 }
 /**
  *
  * @see XenForo_ControllerPublic_Forum::_preDispatch()
  */
 protected function _preDispatch($action)
 {
     $socialForumId = $this->_input->filterSingle('social_forum_id', XenForo_Input::UINT);
     $urlPortion = $this->_input->filterSingle('url_portion', XenForo_Input::STRING);
     $socialForum = null;
     if ($socialForumId) {
         $socialForum = ThemeHouse_SocialGroups_SocialForum::setup($socialForumId);
     } elseif ($urlPortion) {
         $socialForum = ThemeHouse_SocialGroups_SocialForum::setup($urlPortion);
     }
     if (($socialForumId || $urlPortion) && !ThemeHouse_SocialGroups_SocialForum::hasInstance()) {
         throw new XenForo_ControllerResponse_Exception($this->responseError(new XenForo_Phrase('th_social_forum_not_found_socialgroups')));
     }
     $this->_request->setParam('node_id', $socialForum['node_id']);
     $xenOptions = XenForo_Application::get('options');
     if ($socialForum['style_id'] && $xenOptions->th_socialGroups_allowStyleOverride) {
         $this->setViewStateChange('styleId', $socialForum['style_id']);
     }
     parent::_preDispatch($action);
 }
 /**
  *
  * @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 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));
     }
 }
Exemple #17
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));
     }
 }
 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'])));
 }
 /**
  * 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'));
     }
 }