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