Esempio n. 1
0
 /**
  * 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;
     }
 }
Esempio n. 2
0
 /**
  *
  * @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);
 }
Esempio n. 5
0
 /**
  *
  * @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);
 }
Esempio n. 6
0
 /**
  *
  * @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;
 }
Esempio n. 7
0
 /**
  * @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;
 }
Esempio n. 8
0
 /**
  *
  * @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);
 }
Esempio n. 9
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();
         }
     }
 }
Esempio n. 10
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);
 }
Esempio n. 11
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;
 }
Esempio n. 12
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));
         }
     }
 }
Esempio n. 13
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);
 }
 /**
  *
  * @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);
     }
 }
Esempio n. 15
0
 /**
  *
  * @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;
     }
 }
Esempio n. 17
0
 /**
  *
  * @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);
 }
Esempio n. 19
0
 /**
  * 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);
 }
Esempio n. 20
0
 /**
  * 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;
 }
Esempio n. 21
0
 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();
 }
Esempio n. 22
0
 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');
 }
Esempio n. 23
0
 /**
  *
  * @return ThemeHouse_SocialGroups_Model_SocialForum
  */
 protected function _getSocialForumModel()
 {
     return ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
 }
Esempio n. 24
0
 /**
  *
  * @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;
 }
Esempio n. 25
0
 /**
  *
  * @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);
 }
Esempio n. 26
0
 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'])));
 }
Esempio n. 27
0
 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];
 }
Esempio n. 28
0
    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']));
    }
Esempio n. 29
0
 /**
  *
  * @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);
 }
Esempio n. 30
0
 /**
  * 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')));
 }