Exemple #1
0
 /**
  *
  * @see XenResource_DataWriter_Resource::_insertDiscussionThread()
  */
 protected function _insertDiscussionThread($nodeId, $prefixId = 0)
 {
     /* @var $nodeModel XenForo_Model_Node */
     $nodeModel = $this->getModelFromCache('XenForo_Model_Node');
     $node = $nodeModel->getNodeById($nodeId);
     if (!$node) {
         return false;
     }
     if ($node['node_type_id'] == 'SocialCategory') {
         $socialForumId = 0;
         if (isset($GLOBALS['XenResource_ControllerPublic_Resource'])) {
             /* @var $controller XenResource_ControllerPublic_Resource */
             $controller = $GLOBALS['XenResource_ControllerPublic_Resource'];
             $socialForumId = $controller->getInput()->filterSingle('social_forum_id', XenForo_Input::UINT);
         }
         if ($socialForumId) {
             $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
             $socialForum = $socialForumModel->getSocialForumById($socialForumId);
         }
         if (!empty($socialForum) && $socialForum['node_id'] == $node['node_id']) {
             ThemeHouse_SocialGroups_SocialForum::setup($socialForum);
             // TODO check permissions
         } else {
             $writer = XenForo_DataWriter::create('ThemeHouse_SocialGroups_DataWriter_SocialForum');
             $writer->bulkSet(array('node_id' => $nodeId, 'user_id' => XenForo_Visitor::getUserId(), 'title' => $this->_getThreadTitle(), 'description' => $this->get('tag_line'), 'social_forum_type' => 'resource'));
             $writer->save();
             ThemeHouse_SocialGroups_SocialForum::setup($writer->getMergedData());
             $this->set('social_forum_id', $writer->get('social_forum_id'), '', array('setAfterPreSave' => true));
         }
     }
     return parent::_insertDiscussionThread($nodeId, $prefixId);
 }
 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));
 }
 /**
  * Rebuilds the data.
  *
  * @see XenForo_CacheRebuilder_Abstract::rebuild()
  */
 public function rebuild($position = 0, array &$options = array(), &$detailedMessage = '')
 {
     $options['batch'] = max(1, isset($options['batch']) ? $options['batch'] : 10);
     $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
     if ($position == 0) {
         $socialForumModel->unlinkMovedThreads();
     }
     $socialForums = $socialForumModel->getSocialForums(array(), array('limit' => $options['batch'], 'offset' => $position));
     XenForo_Db::beginTransaction();
     foreach ($socialForums as $socialForum) {
         $position++;
         /* @var $socialForumDw ThemeHouse_SocialGroups_DataWriter_SocialForum */
         $socialForumDw = XenForo_DataWriter::create('ThemeHouse_SocialGroups_DataWriter_SocialForum', XenForo_DataWriter::ERROR_SILENT);
         if ($socialForumDw->setExistingData($socialForum, true)) {
             $socialForumDw->rebuildCounters();
             $socialForumDw->save();
         }
     }
     XenForo_Db::commit();
     $detailedMessage = XenForo_Locale::numberFormat($position);
     if (!$socialForums) {
         return true;
     } else {
         return $position;
     }
 }
 /**
  *
  * @see XenForo_Model_ThreadWatch::getUsersWatchingThread()
  */
 public function getUsersWatchingThread($threadId, $nodeId)
 {
     $users = parent::getUsersWatchingThread($threadId, $nodeId);
     /* @var $threadModel XenForo_Model_Thread */
     $threadModel = $this->getModelFromCache('XenForo_Model_Thread');
     $thread = $threadModel->getThreadById($threadId);
     if (!empty($thread['social_forum_id'])) {
         /* @var $socialForumMemberModel ThemeHouse_SocialGroups_Model_SocialForumMember */
         $socialForumMemberModel = $this->getModelFromCache('ThemeHouse_SocialGroups_Model_SocialForumMember');
         $socialForumMembers = $socialForumMemberModel->getSocialForumUsers(array('user_ids' => array_keys($users), 'social_forum_id' => $thread['social_forum_id']));
         $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
         foreach ($users as $userId => &$user) {
             if (!empty($socialForumMembers[$userId])) {
                 $user = array_merge($user, $socialForumMembers[$userId]);
             } else {
                 continue;
             }
             $permissions = array();
             if (!empty($user['node_permission_cache'])) {
                 $permissions = unserialize($user['node_permission_cache']);
             }
             $nodePermissionCache = $socialForumModel->getSocialForumPermissions($user, $permissions);
             $user['node_permission_cache'] = serialize($nodePermissionCache);
         }
     }
     return $users;
 }
 /**
  * @param array $options
  * @param int $page
  * @return array
  */
 public function getModule($options, $page)
 {
     $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
     $params['socialForums'] = $socialForumModel->getSocialForums(array(), array('limit' => isset($options['limit']) ? $options['limit'] : 5, 'order' => 'created_date'));
     foreach ($params['socialForums'] as &$forum) {
         $forum['urls'] = ThemeHouse_SocialGroups_Template_Helper_SocialForum::getAvatarUrls($forum);
     }
     return $params;
 }
 /**
  *
  * @see XenForo_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;
 }
Exemple #7
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);
         }
     }
 }
Exemple #8
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);
 }
Exemple #9
0
 /**
  *
  * @see XenForo_Model_Post::canViewPostAndContainer()
  */
 public function canViewPostAndContainer(array $post, array $thread, array $forum, &$errorPhraseKey = '', array $nodePermissions = null, array $viewingUser = null)
 {
     if (isset($thread['social_forum_id']) && $thread['social_forum_id']) {
         $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
         $fetchOptions = array('join' => ThemeHouse_SocialGroups_Model_SocialForum::FETCH_SOCIAL_MEMBER);
         $socialForum = $socialForumModel->getCurrentSocialForumById($thread['social_forum_id'], $fetchOptions);
         if (isset($socialForum['social_forum_id'])) {
             $socialForumMembers = XenForo_Model::create('ThemeHouse_SocialGroups_Model_SocialForumMember')->getSocialForumUsers(array('social_forum_id' => $socialForum['social_forum_id']));
             $resetNodePermissions = XenForo_Visitor::getInstance()->getNodePermissions($forum['node_id']);
             $nodePermissions = $socialForumModel->getNodePermissions($socialForum, $socialForumMembers);
             XenForo_Visitor::getInstance()->setNodePermissions($forum['node_id'], $nodePermissions);
         }
     }
     $return = parent::canViewPostAndContainer($post, $thread, $forum, $errorPhraseKey, $nodePermissions, $viewingUser);
     if (isset($resetNodePermissions)) {
         XenForo_Visitor::getInstance()->setNodePermissions($forum['node_id'], $resetNodePermissions);
     }
     return $return;
 }
 /**
  * Gets visible moderation queue entries for specified user.
  *
  * @see XenForo_ModerationQueueHandler_Abstract::getVisibleModerationQueueEntriesForUser()
  */
 public function getVisibleModerationQueueEntriesForUser(array $contentIds, array $viewingUser)
 {
     $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
     $socialForums = $socialForumModel->getSocialForumsByIds($contentIds, array('join' => ThemeHouse_SocialGroups_Model_SocialForum::FETCH_FORUM | ThemeHouse_SocialGroups_Model_SocialForum::FETCH_USER, 'permissionCombinationId' => $viewingUser['permission_combination_id']));
     $output = array();
     foreach ($socialForums as $socialForum) {
         $socialForum['permissions'] = XenForo_Permission::unserializePermissions($socialForum['node_permission_cache']);
         $canManage = true;
         if (!$socialForumModel->canViewSocialForum($socialForum, $null, $socialForum['permissions'], $viewingUser)) {
             $canManage = false;
         } elseif (!XenForo_Permission::hasContentPermission($socialForum['permissions'], 'editSocialForum') || !XenForo_Permission::hasContentPermission($socialForum['permissions'], 'deleteSocialForum')) {
             $canManage = false;
         }
         if ($canManage) {
             $output[$socialForum['social_forum_id']] = array('message' => $socialForum['description'], 'user' => array('user_id' => $socialForum['user_id'], 'username' => $socialForum['username']), 'title' => $socialForum['title'], 'link' => XenForo_Link::buildPublicLink('social-forums', $socialForum), 'contentTypeTitle' => new XenForo_Phrase('th_social_forum_socialgroups'), 'titleEdit' => true);
         }
     }
     return $output;
 }
 protected function _preSave()
 {
     if (isset($GLOBALS['ThemeHouse_SocialGroups_ControllerPublic_SocialForum']) || isset($GLOBALS['ThemeHouse_SocialGroups_ControllerPublic_SocialCategory'])) {
         if (isset($GLOBALS['ThemeHouse_SocialGroups_ControllerPublic_SocialForum'])) {
             /* @var $controller ThemeHouse_SocialGroups_ControllerPublic_SocialForum */
             $controller = $GLOBALS['ThemeHouse_SocialGroups_ControllerPublic_SocialForum'];
         } else {
             /* @var $controller ThemeHouse_SocialGroups_ControllerPublic_SocialCategory */
             $controller = $GLOBALS['ThemeHouse_SocialGroups_ControllerPublic_SocialCategory'];
         }
         $socialPermissionSetId = $controller->getInput()->filterSingle('social_permission_set_id', XenForo_Input::UINT);
         $this->set('social_permission_set_id_th', $socialPermissionSetId);
     }
     if ($this->isChanged('social_permission_set_id_th') && !$this->get('social_permission_set_id_th')) {
         $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
         $socialCategory = $this->_getSocialCategoryData();
         if (!$socialForumModel->canManageSocialPermissions(array(), $socialCategory)) {
             $this->error(new XenForo_Phrase('th_must_select_social_permission_set_socialperms'));
         }
     }
     parent::_preSave();
 }
Exemple #12
0
 /**
  *
  * @return ThemeHouse_SocialGroups_Model_SocialForum
  */
 protected function _getSocialForumModel()
 {
     return ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
 }
 /**
  * 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')));
 }
 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];
 }
Exemple #15
0
    /**
     *
     * @see XenForo_Model_ForumWatch::getUsersWatchingForum()
     */
    public function getUsersWatchingForum($nodeId, $threadId, $isReply = false)
    {
        $users = parent::getUsersWatchingForum($nodeId, $threadId, $isReply);
        $autoReadDate = XenForo_Application::$time - XenForo_Application::get('options')->readMarkingDataLifetime * 86400;
        if ($isReply) {
            $notificationLimit = "AND social_forum_watch.notify_on = 'message'";
        } else {
            $notificationLimit = "AND social_forum_watch.notify_on IN ('thread', 'message')";
        }
        $activeLimitOption = XenForo_Application::getOptions()->watchAlertActiveOnly;
        if (!empty($activeLimitOption['enabled'])) {
            $activeLimit = ' AND user.last_activity >= ' . (XenForo_Application::$time - 86400 * $activeLimitOption['days']);
        } else {
            $activeLimit = '';
        }
        if (ThemeHouse_SocialGroups_SocialForum::hasInstance()) {
            $socialForum = ThemeHouse_SocialGroups_SocialForum::getInstance();
            if ($socialForum['node_id'] == $nodeId) {
                $socialForumUsers = $this->fetchAllKeyed('
        			SELECT user.*,
        				user_option.*,
        				user_profile.*,
        				social_forum_watch.notify_on,
        				social_forum_watch.send_alert,
        				social_forum_watch.send_email,
        				permission.cache_value AS node_permission_cache,
        				GREATEST(COALESCE(thread_read.thread_read_date, 0), COALESCE(social_forum_read.social_forum_read_date, 0), ' . $autoReadDate . ') AS read_date
        			FROM xf_social_forum_watch AS social_forum_watch
        			INNER JOIN xf_user AS user ON
				        (user.user_id = social_forum_watch.user_id AND user.user_state = \'valid\' AND user.is_banned = 0' . $activeLimit . ')
        			INNER JOIN xf_user_option AS user_option ON
        				(user_option.user_id = user.user_id)
        			INNER JOIN xf_user_profile AS user_profile ON
        				(user_profile.user_id = user.user_id)
        			LEFT JOIN xf_permission_cache_content AS permission
        				ON (permission.permission_combination_id = user.permission_combination_id
        					AND permission.content_type = \'node\'
        					AND permission.content_id = ?)
        			LEFT JOIN xf_social_forum_read AS social_forum_read
        				ON (social_forum_read.social_forum_id = social_forum_watch.social_forum_id AND social_forum_read.user_id = user.user_id)
        			LEFT JOIN xf_thread_read AS thread_read
        				ON (thread_read.thread_id = ? AND thread_read.user_id = user.user_id)
        			WHERE social_forum_watch.social_forum_id = ?
        				' . $notificationLimit . '
        				AND (social_forum_watch.send_alert <> 0 OR social_forum_watch.send_email <> 0)
        		', 'user_id', array($nodeId, $threadId, $socialForum['social_forum_id']));
                $users = $users + $socialForumUsers;
                if (!empty($socialForum['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' => $socialForum['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;
    }
 /**
  * Fetches the content required by alerts.
  *
  * @param array $contentIds
  * @param XenForo_Model_Alert $model Alert model invoking this
  * @param integer $userId User ID the alerts are for
  * @param array $viewingUser Information about the viewing user (keys:
  * user_id, permission_combination_id, permissions)
  *
  * @return array
  */
 public function getContentByIds(array $contentIds, $model, $userId, array $viewingUser)
 {
     $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel();
     return $socialForumModel->getSocialForums(array('social_forum_ids' => $contentIds));
 }