Exemple #1
0
 protected function _teamSetup()
 {
     if (!$this->_teamSetup) {
         $this->_teamSetup = Nobita_Teams_Setup::getInstance();
     }
     return $this->_teamSetup;
 }
Exemple #2
0
 public function actionJoined()
 {
     $this->_assertRegistrationRequired();
     $visitor = XenForo_Visitor::getInstance();
     $memberModel = $this->_getMemberModel();
     $teamModel = $this->_getTeamModel();
     $teamIds = $memberModel->getTeamIdsByUserId($visitor['user_id']);
     $page = $this->_input->filterSingle('page', XenForo_Input::UINT);
     $setup = Nobita_Teams_Setup::getInstance();
     $perPage = $setup->getOption('teamsPerPage');
     if (empty($teamIds)) {
         $totalTeams = 0;
         $teams = array();
         $inlineModOptions = array();
     } else {
         $conditions = array('deleted' => false, 'moderated' => false);
         $conditions += $this->_getCategoryModel()->getPermissionBasedFetchConditions();
         $categories = $this->_getCategoryModel()->getViewableCategories();
         $conditions['team_category_id'] = array_keys($categories);
         $conditions['team_id'] = $teamIds;
         $totalTeams = $teamModel->countTeams($conditions);
         $this->canonicalizePageNumber($page, $perPage, $totalTeams, TEAM_ROUTE_ACTION . '/joined');
         $teams = $teamModel->getTeams($conditions, array('join' => Nobita_Teams_Model_Team::FETCH_CATEGORY | Nobita_Teams_Model_Team::FETCH_PROFILE | Nobita_Teams_Model_Team::FETCH_PRIVACY | Nobita_Teams_Model_Team::FETCH_USER, 'page' => $page, 'perPage' => $perPage));
         $teams = $teamModel->filterUnviewableTeams($teams);
         $teams = $teamModel->prepareTeams($teams);
         $inlineModOptions = $teamModel->getInlineModOptionsForTeams($teams);
     }
     $viewParams = array('teams' => $teams, 'inlineModOptions' => $inlineModOptions, 'page' => $page, 'perPage' => $perPage, 'totalTeams' => $totalTeams, 'user' => $visitor->toArray());
     return $this->responseView('Nobita_Teams_ViewPublic_Team_Join', 'Team_joined_team', $viewParams);
 }
Exemple #3
0
 protected function _getMediaEditOrResponse(array $team, array $category)
 {
     $setup = Nobita_Teams_Setup::getInstance();
     $xenCatId = $setup->getOption('XenMediaCategoryId');
     $mediaCategoryModel = $this->getModelFromCache('XenGallery_Model_Category');
     $mediaModel = $this->getModelFromCache('XenGallery_Model_Media');
     $mediaCategory = $mediaCategoryModel->getCategoryById($xenCatId);
     if (!$mediaCategory) {
         throw $this->getNoPermissionResponseException();
     }
     $mediaCategory = $mediaCategoryModel->prepareCategory($mediaCategory);
     if (!$mediaCategoryModel->canAddMediaToCategory($mediaCategory, $error)) {
         throw $this->getErrorOrNoPermissionResponseException($error);
     }
     $container = $mediaCategory;
     $mediaSites = $this->getModelFromCache('XenForo_Model_BbCode')->getAllBbCodeMediaSites();
     $allowedSites = XenForo_Application::getOptions()->xengalleryMediaSites;
     foreach ($mediaSites as $key => $mediaSite) {
         if (!in_array($mediaSite['media_site_id'], $allowedSites)) {
             unset($mediaSites[$key]);
         }
     }
     $viewParams = array('team' => $team, 'category' => $category, 'container' => $container, 'mediaSites' => $mediaSites, 'imageUploadParams' => $mediaModel->getAttachmentParams($container), 'videoUploadParams' => $mediaModel->getAttachmentParams($container, 'video'), 'imageUploadConstraints' => $mediaModel->getUploadConstraints(), 'videoUploadConstraints' => $mediaModel->getUploadConstraints('video'), 'canUploadImage' => $container['canUploadImage'], 'canUploadVideo' => false, 'canEmbedVideo' => $container['canEmbedVideo'], 'mediaCategoryId' => $mediaCategory['category_id'], 'groupId' => $team['team_id']);
     return $this->_getTeamHelper()->getTeamViewWrapper('photos', $team, $category, $this->responseView('Nobita_Teams_ViewPublic_XenMedia_Add', 'Team_xenmedia_add', $viewParams));
 }
Exemple #4
0
 protected function _render(array $widget, $positionCode, array $params, XenForo_Template_Abstract $renderTemplateObject)
 {
     if (empty($widget['options']['limit'])) {
         $widget['options']['limit'] = 5;
     }
     if (empty($widget['options']['type'])) {
         $widget['options']['type'] = 'new';
     }
     $core = WidgetFramework_Core::getInstance();
     $visitor = XenForo_Visitor::getInstance();
     $userModel = $core->getModelFromCache('XenForo_Model_User');
     $teamModel = $core->getModelFromCache('Nobita_Teams_Model_Team');
     $memberModel = $core->getModelFromCache('Nobita_Teams_Model_Member');
     $conditions = array('moderated' => false, 'deleted' => false, 'privacy_state' => array(Nobita_Teams_Model_Team::PRIVACY_OPEN, Nobita_Teams_Model_Team::PRIVACY_CLOSED));
     $fetchOptions = array('join' => Nobita_Teams_Model_Team::FETCH_PROFILE | Nobita_Teams_Model_Team::FETCH_PRIVACY | Nobita_Teams_Model_Team::FETCH_CATEGORY);
     switch ($widget['options']['type']) {
         case 'new':
             $teams = $teamModel->getTeams($conditions, array_merge($fetchOptions, array('order' => 'team_date', 'direction' => 'desc', 'limit' => $widget['options']['limit'])));
             break;
         case 'most_message':
             $teams = $teamModel->getTeams($conditions, array_merge($fetchOptions, array('order' => 'message_count', 'direction' => 'desc', 'limit' => $widget['options']['limit'])));
             break;
         case 'most_member':
             $teams = $teamModel->getTeams($conditions, array_merge($fetchOptions, array('order' => 'member_count', 'direction' => 'desc', 'limit' => $widget['options']['limit'])));
             break;
         case 'suggestion':
             $users = $userModel->getUsersFollowing($visitor['user_id'], array('limit' => $widget['options']['limit'] * 3));
             $setup = Nobita_Teams_Setup::getInstance();
             $teamIds = $memberModel->getTeamIdsByUserId(array_keys($users));
             $user = $visitor->toArray();
             foreach ($teamIds as $key => &$val) {
                 if ($setup->getTeamFromVisitor($val, $user)) {
                     unset($teamIds[$key]);
                     // remove team which visitor has joined
                 }
             }
             if (empty($users)) {
                 if (empty($teamIds)) {
                     $teams = array();
                 } else {
                     $teams = $teamModel->getTeams($conditions, array_merge($fetchOptions, array('team_id' => $teamIds, 'order' => 'random', 'limit' => $widget['options']['limit'] * 3)));
                 }
             } else {
                 if (empty($teamIds)) {
                     $teams = array();
                 } else {
                     $teams = $teamModel->getTeams($conditions, array_merge($fetchOptions, array('team_id' => $teamIds, 'order' => 'random', 'limit' => $widget['options']['limit'] * 3)));
                 }
             }
             break;
     }
     $teams = $teamModel->filterUnviewableTeams($teams);
     $teams = $teamModel->prepareTeams($teams);
     if (count($teams) > $widget['options']['limit']) {
         // too many teams (because we fetched 3 times as needed)
         $teams = array_slice($teams, 0, $widget['options']['limit'], true);
     }
     $renderTemplateObject->setParam('teams', $teams);
     return $renderTemplateObject->render();
 }
Exemple #5
0
 public static function assetSonnbXenGalleryValidAndUsable()
 {
     if (!static::assertAddOnValidAndUsable('sonnb_xengallery')) {
         return false;
     }
     $provider = Nobita_Teams_Setup::getInstance()->getOption('photoProvider');
     return $provider == 'sonnb_xengallery';
 }
Exemple #6
0
 public function actionIndex()
 {
     $categoryId = $this->_input->filterSingle('team_category_id', XenForo_Input::UINT);
     if (!$categoryId) {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL_PERMANENT, XenForo_Link::buildPublicLink(TEAM_ROUTE_PREFIX));
     }
     $category = $this->_getTeamHelper()->assertCategoryValidAndViewable(null, array('watchUserId' => XenForo_Visitor::getUserId()));
     $this->canonicalizeRequestUrl(XenForo_Link::buildPublicLink(TEAM_ROUTE_ACTION . '/categories', $category));
     $teamModel = $this->_getTeamModel();
     $categoryModel = $this->_getCategoryModel();
     $page = max(1, $this->_input->filterSingle('page', XenForo_Input::UINT));
     $setup = Nobita_Teams_Setup::getInstance();
     $perPage = $setup->getOption('teamsPerPage');
     $defaultOrder = 'last_activity';
     $defaultOrderDirection = 'desc';
     $order = $this->_input->filterSingle('order', XenForo_Input::STRING, array('default' => $defaultOrder));
     $orderDirection = $this->_input->filterSingle('direction', XenForo_Input::STRING, array('default' => $defaultOrderDirection));
     $criteria = array();
     $viewableCategories = $categoryModel->prepareCategories($categoryModel->getViewableCategories());
     $categoryList = $categoryModel->groupCategoriesByParent($viewableCategories);
     $categoryList = $categoryModel->applyRecursiveCountsToGrouped($categoryList);
     $childCategories = isset($categoryList[$category['team_category_id']]) ? $categoryList[$category['team_category_id']] : array();
     if ($childCategories) {
         $searchCategoryIds = $categoryModel->getDescendantCategoryIdsFromGrouped($categoryList, $category['team_category_id']);
         $searchCategoryIds[] = $category['team_category_id'];
     } else {
         $searchCategoryIds = array($category['team_category_id']);
     }
     $criteria['team_category_id'] = $searchCategoryIds;
     $criteria += $categoryModel->getPermissionBasedFetchConditions($category);
     $totalTeams = $teamModel->countTeams($criteria);
     $this->canonicalizePageNumber($page, $perPage, $totalTeams, TEAM_ROUTE_ACTION . '/categories', $category);
     $fetchOptions = $this->_getTeamListFetchOptions();
     if ($criteria['deleted']) {
         $fetchOptions['join'] |= Nobita_Teams_Model_Team::FETCH_DELETION_LOG;
     }
     $teams = $teamModel->getTeams($criteria, array_merge($fetchOptions, array('perPage' => $perPage, 'page' => $page, 'order' => $order, 'direction' => $orderDirection)));
     $teams = $teamModel->filterUnviewableTeams($teams);
     $teams = $teamModel->prepareTeams($teams, $category);
     $inlineModOptions = $teamModel->getInlineModOptionsForTeams($teams);
     if ($categoryList[$category['parent_category_id']][$category['team_category_id']]['featured_count'] && $order == $defaultOrder) {
         $featuredTeams = $teamModel->getFeaturedTeamsInCategories($searchCategoryIds, array_merge($this->_getTeamListFetchOptions(), array('limit' => 6, 'order' => 'random')));
         $featuredTeams = $teamModel->filterUnviewableTeams($featuredTeams);
         $featuredTeams = $teamModel->prepareTeams($featuredTeams);
     } else {
         $featuredTeams = array();
     }
     $topTeamsCount = $setup->getOption('topTeamsCount');
     if ($topTeamsCount) {
         $topTeams = $teamModel->getTeams($criteria, array_merge($fetchOptions, array('limit' => $topTeamsCount, 'order' => 'message_count', 'direction' => 'desc')));
         $topTeams = $teamModel->filterUnviewableTeams($topTeams);
     } else {
         $topTeams = array();
     }
     $pageNavParams = array('order' => $order != $defaultOrder ? $order : false, 'direction' => $orderDirection != $defaultOrderDirection ? $orderDirection : false);
     $viewParams = array('category' => $category, 'categoriesGrouped' => $categoryList, 'childCategories' => $childCategories, 'categoryBreadcrumbs' => $categoryModel->getCategoryBreadcrumb($category, false), 'teams' => $teams, 'topTeams' => $topTeams, 'featuredTeams' => $featuredTeams, 'ignoredNames' => $this->_getIgnoredContentUserNames($teams), 'totalTeams' => $totalTeams, 'inlineModOptions' => $inlineModOptions, 'order' => $order, 'orderDirection' => $orderDirection, 'page' => $page, 'perPage' => $perPage, 'pageNavParams' => $pageNavParams, 'canAddTeam' => $categoryModel->canAddTeam($category), 'canWatchCategory' => $categoryModel->canWatchCategory($category));
     return $this->responseView('Nobita_Teams_ViewPublic_Team_Category', 'Team_category', $viewParams);
 }
Exemple #7
0
 public static function isVisibleCategory($categoryId)
 {
     $teamSetup = Nobita_Teams_Setup::getInstance();
     $storeCategoryId = $teamSetup->getOption('XenMediaCategoryId');
     $hide = $teamSetup->getOption('XenMediaHideStoreCat');
     if (!$hide) {
         return true;
     }
     return $storeCategoryId != $categoryId;
 }
Exemple #8
0
 public function getPostSpecificRedirect(array $post, array $team, $redirectType = XenForo_ControllerResponse_Redirect::SUCCESS, array $redirectParams = array())
 {
     if ($post['last_comment_date'] < XenForo_Application::$time) {
         $postModel = $this->_getPostModel();
         $setup = Nobita_Teams_Setup::getInstance();
         $requester = $setup->getTeamFromVisitor($team['team_id']);
         $conditions = $postModel->getPermissionBasedPostConditions($team, $requester) + array('last_comment_date' => array('>', $post['last_comment_date']));
         $count = $postModel->countPostsForTeamId($team['team_id'], $conditions);
         $page = floor($count / XenForo_Application::get('options')->messagesPerPage) + 1;
     } else {
         $page = 1;
     }
     $extraParams = array('page' => $page, 'wtype' => $post['discussion_type']);
     return $this->responseRedirect($redirectType, XenForo_Link::buildPublicLink(TEAM_ROUTE_ACTION, $team, $extraParams) . '#post-' . $post['post_id'], null, $redirectParams);
 }
Exemple #9
0
 protected static function _xenMediaPhotoIndexParams($team)
 {
     $categoryModel = self::$controller->getModelFromCache('XenGallery_Model_Category');
     $category = $categoryModel->getCategoryById(self::$setup->getOption('XenMediaCategoryId'));
     $noPermission = false;
     if (!$category) {
         $noPermission = true;
     } else {
         if (!$categoryModel->canAddMediaToCategory($category)) {
             $noPermission = true;
         }
     }
     if ($noPermission) {
         return array('templateName' => 'Team_photo', 'viewName' => '', 'provider' => 'XenGallery', 'noPermission' => true);
     }
     $mediaModel = self::$controller->getModelFromCache('XenGallery_Model_Media');
     $albumModel = self::$controller->getModelFromCache('XenGallery_Model_Album');
     $order = self::$input->filterSingle('order', XenForo_Input::STRING);
     $type = self::$input->filterSingle('type', XenForo_Input::STRING);
     $page = self::$input->filterSingle('page', XenForo_Input::UINT);
     $perPage = XenForo_Application::getOptions()->xengalleryMediaMaxPerPage;
     $visitor = XenForo_Visitor::getInstance();
     $conditions = array('deleted' => $mediaModel->canViewDeletedMedia(), 'type' => $type ? $type : 'all', 'privacyUserId' => $visitor->user_id, 'viewAlbums' => $albumModel->canViewAlbums(), 'viewCategoryIds' => $mediaModel->getViewableCategoriesForVisitor($visitor->toArray()), 'newerThan' => $mediaModel->getMediaHomeCutOff(), 'social_group_id' => $team['team_id']);
     $fetchOptions = self::_getMediaFetchOptions() + array('order' => $order ? $order : 'media_date', 'orderDirection' => 'desc', 'page' => $page, 'perPage' => $perPage);
     $fetchOptions['join'] |= XenGallery_Model_Media::FETCH_PRIVACY;
     $media = $mediaModel->getMedia($conditions, $fetchOptions);
     $media = $mediaModel->prepareMediaItems($media);
     $inlineModOptions = $mediaModel->prepareInlineModOptions($media);
     $ignoredNames = array();
     foreach ($media as $item) {
         if (!empty($item['isIgnored'])) {
             $ignoredNames[] = $item['username'];
         }
     }
     $mediaCount = $mediaModel->countMedia($conditions, $fetchOptions);
     self::$controller->canonicalizePageNumber($page, $perPage, $mediaCount, TEAM_ROUTE_PREFIX . '/photos', $team);
     self::$controller->canonicalizeRequestUrl(XenForo_Link::buildPublicLink(TEAM_ROUTE_PREFIX . '/photos', $team, array('page' => $page)));
     $pageNavParams = array('order' => $order, 'type' => $type);
     return array('templateName' => 'Team_photo', 'viewName' => '', 'provider' => 'XenGallery', 'canViewRatings' => $mediaModel->canViewRatings(), 'mediaHome' => true, 'media' => $media, 'ignoredNames' => array_unique($ignoredNames), 'mediaCount' => $mediaCount, 'page' => $page <= 1 ? '' : $page, 'perPage' => $perPage, 'pageNavParams' => $pageNavParams, 'order' => $order, 'type' => $type, 'time' => XenForo_Application::$time, 'showTypeTabs' => $albumModel->canViewAlbums(), 'inlineModOptions' => $inlineModOptions, 'userPage' => false);
 }
Exemple #10
0
 public function actionSave()
 {
     $this->_assertPostOnly();
     $eventId = $this->_input->filterSingle('event_id', XenForo_Input::UINT);
     $teamId = $this->_input->filterSingle('team_id', XenForo_Input::UINT);
     $visitor = XenForo_Visitor::getInstance();
     list($team, $category) = $this->_getTeamHelper()->assertTeamValidAndViewable($teamId);
     $this->_assertViewEventTab($team, $category);
     $data = $this->_input->filter(array('event_title' => XenForo_Input::STRING, 'event_type' => XenForo_Input::STRING, 'allow_member_comment' => XenForo_Input::UINT));
     $begin20 = $this->_input->filterSingle('begin_date', XenForo_Input::STRING);
     $begin21 = $this->_input->filterSingle('_begin_date', XenForo_Input::DATE_TIME);
     $setup = Nobita_Teams_Setup::getInstance();
     if ($begin21) {
         $begin = $setup->verifyAndProcessingTimeinput($this, $begin20, $begin21);
     } else {
         $begin = XenForo_Application::$time;
     }
     if ($this->_input->filterSingle('end_time_enable', XenForo_Input::UINT)) {
         $end20 = $this->_input->filterSingle('end_date', XenForo_Input::STRING);
         $end21 = $this->_input->filterSingle('_end_date', XenForo_Input::DATE_TIME);
         $end = $setup->verifyAndProcessingTimeinput($this, $end20, $end21);
     } else {
         $end = 0;
         // forever!
     }
     /* upload attachment to event. */
     $attachmentHash = $this->_input->filterSingle('attachment_hash', XenForo_Input::STRING);
     $description = $this->getHelper('Editor')->getMessageText('description', $this->_input);
     $description = XenForo_Helper_String::autoLinkBbCode($description);
     $dw = XenForo_DataWriter::create('Nobita_Teams_DataWriter_Event');
     if ($eventId) {
         $dw->setExistingData($eventId);
     } else {
         $dw->set('user_id', $visitor['user_id']);
         $dw->set('username', $visitor['username']);
     }
     $dw->bulkSet($data);
     $dw->set('team_id', $team['team_id']);
     $dw->set('event_description', $description);
     $dw->set('begin_date', $begin);
     $dw->set('end_date', $end);
     $dw->setExtraData(Nobita_Teams_DataWriter_Event::TEAM_DATA, $team);
     $dw->setExtraData(Nobita_Teams_DataWriter_Event::TEAM_CATEGORY_DATA, $category);
     $dw->setExtraData(Nobita_Teams_DataWriter_Event::DATA_ATTACHMENT_HASH, $attachmentHash);
     $dw->preSave();
     if (!$dw->hasErrors()) {
         $this->assertNotFlooding('post');
         // use post instead.
     }
     $dw->save();
     $event = $dw->getMergedData();
     // get event data
     return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $this->_buildLink(TEAM_ROUTE_PREFIX . '/events', $event));
 }
Exemple #11
0
    protected function _postSave()
    {
        $postSaveChanges = array();
        $this->updateCustomFields();
        if ($this->isUpdate() && $this->isChanged('title')) {
            $threadDw = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread', XenForo_DataWriter::ERROR_SILENT);
            if ($threadDw->setExistingData($this->get('discussion_thread_id')) && $threadDw->get('discussion_type') == 'team') {
                $threadTitle = $this->_stripTemplateComponents($threadDw->get('title'), $this->getOption(self::OPTION_DELETE_THREAD_TITLE_TEMPLATE));
                if ($threadTitle == $this->getExisting('title')) {
                    $threadDw->set('title', $this->_getThreadTitle());
                    $threadDw->save();
                }
            }
        }
        if ($this->isUpdate() && $this->isChanged('privacy_state')) {
            $threadDw = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread', XenForo_DataWriter::ERROR_SILENT);
            if ($threadDw->setExistingData($this->get('discussion_thread_id')) && $threadDw->get('discussion_type') == 'team') {
                $discussionState = $this->getOption(self::OPTION_TEAM_PRIVACY_THREAD_STATE);
                if ($this->get('privacy_state') == 'secret') {
                    $threadDw->set('discussion_state', $discussionState);
                    $threadDw->save();
                } else {
                    $threadDw->set('discussion_state', 'visible');
                    $threadDw->save();
                }
            }
        }
        if ($this->isUpdate() && $this->isChanged('team_category_id') && $this->get('discussion_thread_id')) {
            $catDw = $this->_getCategoryDwForUpdate();
            $nodeId = $this->getOption(self::OPTION_CREATE_THREAD_NODE_ID);
            if ($nodeId === null) {
                $nodeId = $catDw->get('thread_node_id');
            }
            $prefixId = $this->getOption(self::OPTION_CREATE_THREAD_PREFIX_ID);
            if ($prefixId === null) {
                $prefixId = $catDw->get('thread_prefix_id');
            }
            $threadDw = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread', XenForo_DataWriter::ERROR_SILENT);
            if ($threadDw->setExistingData($this->get('discussion_thread_id')) && $threadDw->get('discussion_type') == 'team') {
                $threadDw->set('node_id', $nodeId);
                $threadDw->set('prefix_id', $prefixId);
                $threadDw->save();
            }
        }
        $removed = false;
        if ($this->isChanged('team_state')) {
            if ($this->get('team_state') == 'visible') {
                $this->_teamMadeVisible($postSaveChanges);
            } else {
                if ($this->isUpdate() && $this->getExisting('team_state') == "visible") {
                    $this->_teamRemoved();
                    $removed = true;
                }
            }
            $this->_updateDeletionLog();
            $this->_updateModerationQueue();
        }
        if ($postSaveChanges) {
            $this->_db->update('xf_team', $postSaveChanges, 'team_id = ' . $this->_db->quote($this->get('team_id')));
        }
        $catDw = $this->_getCategoryDwForUpdate();
        if ($catDw && !$removed) {
            $catDw->teamUpdate($this);
            $catDw->save();
        }
        if ($this->isUpdate() && $this->isChanged('user_id')) {
            if ($this->get('user_id') && $this->get('team_state') == 'visible' && !$this->isChanged('team_state')) {
                $this->_db->query('
					UPDATE xf_user
					SET team_count = team_count + 1
					WHERE user_id = ?
				', $this->get('user_id'));
            }
            if ($this->getExisting('user_id') && $this->getExisting('team_state') == 'visible') {
                $this->_db->query('
					UPDATE xf_user
					SET team_count = team_count - 1
					WHERE user_id = ?
				', $this->getExisting('user_id'));
            }
        }
        if ($this->getOption(self::OPTION_PUBLISH_FEED)) {
            if ($this->isInsert() || $this->isUpdate() && $this->isChanged('team_state') && $this->get('team_state') == 'visible') {
                $this->_publishToNewsFeed();
            }
        }
        if ($this->getOption(self::OPTION_INDEX_FOR_SEARCH)) {
            $this->_indexForSearch();
        }
        if ($this->isUpdate()) {
            $setup = Nobita_Teams_Setup::getInstance();
            $visitor = XenForo_Visitor::getInstance();
            if ($this->isChanged('privacy_state')) {
                $newPrivacy = $this->get('privacy_state');
                $oldPrivacy = $this->getExisting('privacy_state');
                $message = new XenForo_Phrase('Teams_changed_the_team_privacy_setting_from_x_to_y', array('name' => $visitor['username'], 'userId' => $visitor['user_id'], 'old' => ucfirst($oldPrivacy), 'new' => ucfirst($newPrivacy)), false);
                $setup->insertNewPostWhenActionCreated($this->get('team_id'), $message, 1);
            }
            if ($this->isChanged('ribbon_text') || $this->isChanged('ribbon_display_class')) {
                $message = new XenForo_Phrase('Teams_x_updated_new_ribbon_for_team', array('name' => $visitor['username'], 'userId' => $visitor['user_id']), false);
                $setup->insertNewPostWhenActionCreated($this->get('team_id'), $message, 1);
            }
        }
        if ($this->isInsert()) {
            $this->_db->update('xf_team', array('last_activity' => XenForo_Application::$time), 'team_id = ' . $this->_db->quote($this->getTeamId()));
        }
    }
Exemple #12
0
 public function getTeamViewWrapper($selectedTab, array $team, array $category, XenForo_ControllerResponse_View $subView)
 {
     $teamId = $team['team_id'];
     $visitor = XenForo_Visitor::getInstance();
     $fieldModel = $this->_getFieldModel();
     $teamModel = $this->_getTeamModel();
     $memberModel = $teamModel->getModelFromCache('Nobita_Teams_Model_Member');
     $customFieldsGrouped = $fieldModel->getTeamFieldsForEdit($category['team_category_id'], empty($team['team_id']) ? 0 : $team['team_id']);
     $customFieldsGrouped = $fieldModel->prepareTeamFields($customFieldsGrouped, true, !empty($team['customFields']) ? $team['customFields'] : array());
     $admins = array();
     if (array_key_exists('disableAdminQuery', $subView->params) && $subView->params['disableAdminQuery']) {
         // good nothing to do in this state
     } else {
         $staffIds = $memberModel->getModelFromCache('Nobita_Teams_Model_MemberGroup')->getStaffIds();
         if ($staffIds) {
             $admins = $memberModel->getAllMembersInTeam($teamId, array('position' => $staffIds), array('join' => Nobita_Teams_Model_Member::FETCH_USER));
         }
     }
     $setup = Nobita_Teams_Setup::getInstance();
     if (isset($admins[$visitor['user_id']])) {
         $memberRecord = $admins[$visitor['user_id']];
     } else {
         $memberRecord = $team['memberInfo'];
     }
     $canManageContent = $memberModel->assertPermissionActionViewable($team, 'canManageContent');
     $statsBlock = true;
     if (!$this->_getTeamModel()->canViewTeamClosedAndContainer($team, $category, $null)) {
         $statsBlock = false;
     } else {
         if ($team['privacy_state'] == Nobita_Teams_Model_Team::PRIVACY_SECRET) {
             if (!$teamModel->canViewTeamSecret($team, $category, $null)) {
                 $statsBlock = false;
             }
         }
     }
     if ($team['member_request_count']) {
         $requests = $memberModel->getMembersByTeamId($team['team_id'], array('member_state' => 'request'), array('limit' => 5));
         foreach ($requests as &$request) {
             $request = $memberModel->prepareMember($request, $team);
         }
     } else {
         $requests = array();
     }
     $reposition = $this->_controller->getInput()->filterSingle('reposition', XenForo_Input::UINT);
     $wallType = $this->_controller->getInput()->filterSingle('wtype', XenForo_Input::STRING);
     if (empty($wallType)) {
         if (Nobita_Teams_Setup::getInstance()->getOption('memberTab') && $teamModel->canViewMemberOrAdminTab(Nobita_Teams_Model_Post::POST_TYPE_MEMBER, $team, $category)) {
             $wallType = Nobita_Teams_Model_Post::POST_TYPE_MEMBER;
         } else {
             $wallType = Nobita_Teams_Model_Post::POST_TYPE_PUBLIC;
         }
     }
     $newsFeedTab = true;
     if (empty($memberRecord['user_id'])) {
         // should be hidden if empty user
         $newsFeedTab = $teamModel->isOpen($team);
     }
     $viewParams = array('selectedTab' => $selectedTab, 'team' => $team, 'category' => $category, 'categoryBreadcrumbs' => $this->_getCategoryModel()->getCategoryBreadcrumb($category), 'admins' => $admins, 'statsBlock' => $statsBlock, 'memberRecord' => $memberRecord, 'totalRequests' => $team['member_request_count'], 'requests' => $requests, 'canLeaveOrRequest' => $memberModel->canLeaveOrCancelRequest($memberRecord, $team), 'canViewRequest' => $memberModel->assertPermissionActionViewable($team, "canApproveOrUnapproved"), 'canManageContent' => $canManageContent, 'customFieldsGrouped' => $fieldModel->groupTeamFields($customFieldsGrouped), 'constructionWrap' => !empty($reposition), 'wallType' => $wallType, 'memberWall' => $teamModel->canViewMemberOrAdminTab('member', $team, $category), 'moderatorWall' => $teamModel->canViewMemberOrAdminTab('moderator', $team, $category), 'canViewMemberTab' => $teamModel->canViewTabAndContainer('members', $team, $category), 'canViewPhotoTab' => $teamModel->canViewTabAndContainer('photos', $team, $category), 'canViewFileTab' => $teamModel->canViewTabAndContainer('files', $team, $category), 'canViewEventTab' => $teamModel->canViewTabAndContainer('events', $team, $category), 'canViewThreadsTab' => $teamModel->canViewTabAndContainer('threads', $team, $category), 'coverDetails' => @unserialize($team['cover_crop_details']), 'newsFeedTab' => $newsFeedTab, 'photoTabTitle' => Nobita_Teams_Option::getTabsSupported()['photos']['title']);
     $response = $this->_controller->responseView('Nobita_Teams_ViewPublic_Team_View', 'Team_view', $viewParams);
     $response->subView = $subView;
     return $response;
 }
Exemple #13
0
 public function applyCoverCrop($teamId, $coverDate, array $crops)
 {
     $filePath = $this->getCoverPhotoFilePath($teamId);
     $imageInfo = @getimagesize($filePath);
     $team = $this->getModelFromCache('Nobita_Teams_Model_Team')->getFullTeamById($teamId);
     if (!$team) {
         throw new Nobita_Teams_Exception_Abstract("Invalid team ID.");
         return false;
     }
     $outputFile = $this->getCoverCropFilePath($teamId, $coverDate);
     $imageType = $imageInfo[2];
     $image = XenForo_Image_Abstract::createFromFile($filePath, $imageType);
     if (!$image) {
         return false;
     }
     $relativeWidth = $crops['crop_w'];
     $relativeHeight = $crops['crop_h'];
     $image->thumbnail($relativeWidth);
     if ($image->getHeight() > $relativeHeight) {
         $cropWidth = $relativeWidth;
         $cropHeight = $relativeHeight;
         $image->crop($crops['crop_x'], $crops['crop_y'], $cropWidth, $cropHeight);
     }
     $coverQuality = intval(Nobita_Teams_Setup::getInstance()->getOption('coverQuality'));
     $success = $image->output($imageType, $outputFile, $coverQuality);
     $data = @unserialize($team['cover_crop_details']);
     if ($imageInfo) {
         if (!isset($crops['height'])) {
             $crops['height'] = $imageInfo[1];
         }
         if (!isset($crops['width'])) {
             $crops['width'] = $imageInfo[0];
         }
     } else {
         $crops['height'] = $data['height'];
         $crops['width'] = $data['width'];
     }
     $dw = XenForo_DataWriter::create('Nobita_Teams_DataWriter_Team');
     $dw->setExistingData($teamId);
     $dw->set('cover_crop_details', $crops);
     $dw->save();
     return $crops;
 }
Exemple #14
0
 public function preparePost(array $post, array $team, array $category, $viewingUser = null)
 {
     $this->standardizeViewingUserReference($viewingUser);
     if (!isset($post['canInlineMod'])) {
         $this->addInlineModOptionToPost($post, $team, $category, $viewingUser);
     }
     $post['canReport'] = $this->getModelFromCache('XenForo_Model_User')->canReportContent();
     $post['canDelete'] = $this->canDeletePost($post, $team, $category, $null, $viewingUser);
     $post['canApprove'] = $this->canApproveUnapprove($post, $team, $category, $null, $viewingUser);
     $post['canEdit'] = $this->canEditPost($post, $team, $category, $null, $viewingUser);
     $post['canComment'] = $this->canCommentOnPost($post, $team, $category, $null, $viewingUser);
     $post['canLike'] = $this->canLikePost($post, $team, $category, $null, $viewingUser);
     $post['canSticky'] = $this->canStickyOrUnstickyPost($post, $team, $category, $null, $viewingUser);
     if ($post['likes']) {
         $post['likeUsers'] = unserialize($post['like_users']);
     }
     $post = $this->getModelFromCache('Nobita_Teams_Model_Banning')->prepareContent($post, $team, $category, $null, $viewingUser);
     $post['isModerated'] = $this->isModerated($post, $team);
     if (!empty($post['delete_date'])) {
         $post['deleteInfo'] = array('user_id' => $post['delete_user_id'], 'username' => $post['delete_username'], 'date' => $post['delete_date'], 'reason' => $post['delete_reason']);
     }
     if ($post['system_posting']) {
         $post['message'] = Nobita_Teams_Setup::helperSystemPost($post);
     }
     Nobita_Teams_Banning::generateBanningUniqueId($post, 'post');
     return $post;
 }
Exemple #15
0
 public static function getTimeSelectableMap()
 {
     $map = array();
     $self = Nobita_Teams_Setup::hasInstance() ? self::$_instance : Nobita_Teams_Setup::getInstance();
     $timeformat = $self->getOption('timeformat');
     switch (intval($timeformat)) {
         case 12:
             for ($i = 0; $i < 24; $i++) {
                 if ($i < 12) {
                     if (0 === $i) {
                         $map[$i . ':00'] = '12:00 AM';
                         $map[$i . ':30'] = '12:30 AM';
                     } else {
                         $map[$i . ':00'] = $i . ':00 AM';
                         $map[$i . ':30'] = $i . ':30 AM';
                     }
                 } else {
                     if (12 == $i) {
                         $map[$i . ':00'] = $i . ':00 PM';
                         $map[$i . ':30'] = $i . ':30 PM';
                     } else {
                         $map[$i . ':00'] = $i - 12 . ':00 PM';
                         $map[$i . ':30'] = $i - 12 . ':30 PM';
                     }
                 }
             }
             break;
         case 24:
             for ($i = 0; $i < 24; $i++) {
                 $map[$i . ':00'] = $i . ':00';
                 $map[$i . ':30'] = $i . ':30';
             }
             break;
     }
     return $map;
 }
Exemple #16
0
 public function canSendMassAlerts(array $team, array $category, &$errorPhraseKey = '', array $viewingUser = null)
 {
     $this->standardizeViewingUserReference($viewingUser);
     if (!$viewingUser['user_id']) {
         return false;
     }
     $messageLength = Nobita_Teams_Setup::getInstance()->getOption('massMessageLength');
     if (!$messageLength) {
         // disable this feature
         return false;
     }
     return $this->_getMemberModel()->assertPermissionActionViewable($team, 'massAlert', $errorPhraseKey, $viewingUser);
 }
Exemple #17
0
<?php

/**
 * @package     Nobita Social Groups Nulled by HQCoder
 * @author      Nobita
 * @nuller		Congngheaz
 * @link        http://www.congngheaz.com/forums/Xenforo-addon-nulled-free/
 * @copyright   (c) 2015 AZ Technologies, Inc. All rights reserved!
 */
/*====================================================================*\
 || ################################################################## ||
|| #               Copyright 2015 AZ Technologies, Inc.              # ||
|| #                      All Rights Reserved.                       # ||
||  ################################################################## ||
\*====================================================================*/
$teamSetup = Nobita_Teams_Setup::getInstance();
$constants = array('TEAM_DATAREGISTRY_KEY' => 'Teams_group_perms', 'TEAM_ROUTE_PREFIX' => $teamSetup->getOption('routePrefix'), 'TEAM_ROUTE_ACTION' => $teamSetup->getOption('routePrefix'));
foreach ($constants as $defineName => $defineValue) {
    if (!defined($defineName)) {
        define($defineName, $defineValue);
    }
}
class Nobita_Teams_Listener
{
    const TEAM_CONTROLLERPUBLIC_FORUM_ADDTHREAD = 'Nobita_Teams_XenForo_ControllerPublic_Forum::actionAddThread';
    const XENGALLERY_CONTROLLERPUBLIC_ALBUM_ACTIONSAVE = 'Nobita_Teams_sonnb_XenGallery_ControllerPublic_XenGallery_Album::actionSave';
    public static function loadControllers($class, array &$extend)
    {
        static $_classes = array('XenForo_ControllerPublic_SpamCleaner', 'XenForo_ControllerPublic_Forum', 'XenForo_ControllerPublic_Thread', 'XenForo_Model_Post', 'XenForo_Model_Forum', 'XenForo_Model_Thread', 'XenForo_Model_Import', 'XenForo_DataWriter_Forum', 'XenForo_DataWriter_User', 'XenForo_DataWriter_Discussion_Thread', 'XenForo_BbCode_Formatter_BbCode_Filter', 'bdCache_Model_Cache', 'sonnb_XenGallery_Model_Album', 'sonnb_XenGallery_ControllerPublic_XenGallery', 'sonnb_XenGallery_ControllerPublic_XenGallery_Author', 'sonnb_XenGallery_ControllerPublic_XenGallery_Album', 'sonnb_XenGallery_DataWriter_Album', 'XenGallery_ControllerPublic_Media', 'XenGallery_DataWriter_Media', 'XenGallery_Model_Media', 'XenGallery_ViewPublic_Media_Wrapper');
        if (in_array($class, $_classes)) {
            $extend[] = 'Nobita_Teams_' . $class;
Exemple #18
0
 public function actionMassAlert()
 {
     list($team, $category) = $this->_getTeamHelper()->assertTeamValidAndViewable();
     if (!$this->_getTeamModel()->canSendMassAlerts($team, $category, $error)) {
         throw $this->getErrorOrNoPermissionResponseException($error);
     }
     $this->assertNotFlooding('team_mass_alert', 3600);
     // 1 hour
     if ($this->_request->isPost()) {
         $message = $this->_input->filterSingle('message', XenForo_Input::STRING);
         $messLength = Nobita_Teams_Setup::getInstance()->getOption('massMessageLength');
         if (utf8_strlen($message) > intval($messLength)) {
             return $this->responseError(new XenForo_Phrase('please_enter_message_with_no_more_than_x_characters', array('count' => 25)));
         }
         $this->_getTeamModel()->massAlert($team, $message);
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $this->_buildLink(TEAM_ROUTE_PREFIX, $team));
     } else {
         return $this->_getTeamHelper()->getTeamViewWrapper('information', $team, $category, $this->responseView('Nobita_Teams_ViewPublic_Team_MassAlert', 'Team_mass_alert', array('team' => $team, 'category' => $category)));
     }
 }
Exemple #19
0
 /**
  * Applies the avatar file to the specified user.
  *
  * @param integer $teamId
  * @param string $fileName
  * @param constant|false $imageType Type of image (IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG)
  * @param integer|false $width
  * @param integer|false $height
  *
  * @return array
  */
 public function applyAvatar($teamId, $fileName, $imageType = false, $width = false, $height = false)
 {
     if (!$imageType || !$width || !$height) {
         $imageInfo = getimagesize($fileName);
         if (!$imageInfo) {
             throw new Nobita_Teams_Exception_Abstract('Non-image passed in to applyAvatar');
         }
         $width = $imageInfo[0];
         $height = $imageInfo[1];
         $imageType = $imageInfo[2];
     }
     if (!in_array($imageType, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG))) {
         throw new Nobita_Teams_Exception_Abstract('Invalid image type passed in to applyAvatar');
     }
     if (!XenForo_Image_Abstract::canResize($width, $height)) {
         throw new Nobita_Teams_Exception_Abstract(new XenForo_Phrase('uploaded_image_is_too_big'), true);
     }
     $maxFileSize = XenForo_Application::getOptions()->Teams_avatarFileSize;
     if ($maxFileSize && filesize($fileName) > $maxFileSize) {
         @unlink($fileName);
         throw new Nobita_Teams_Exception_Abstract(new XenForo_Phrase('your_avatar_file_size_large_smaller_x', array('size' => XenForo_Locale::numberFormat($maxFileSize, 'size'))), true);
     }
     // should be use 280x280px because of grid style
     $maxDimensions = 280;
     $imageQuality = intval(Nobita_Teams_Setup::getInstance()->getOption('logoQuality'));
     $outputType = $imageType;
     $image = XenForo_Image_Abstract::createFromFile($fileName, $imageType);
     if (!$image) {
         return false;
     }
     $image->thumbnailFixedShorterSide($maxDimensions);
     if ($image->getOrientation() != XenForo_Image_Abstract::ORIENTATION_SQUARE) {
         $cropX = floor(($image->getWidth() - $maxDimensions) / 2);
         $cropY = floor(($image->getHeight() - $maxDimensions) / 2);
         $image->crop($cropX, $cropY, $maxDimensions, $maxDimensions);
     }
     $newTempFile = tempnam(XenForo_Helper_File::getTempDir(), 'xf');
     if (!$newTempFile) {
         return false;
     }
     $image->output($outputType, $newTempFile, $imageQuality);
     unset($image);
     $filePath = $this->getAvatarFilePath($teamId);
     $directory = dirname($filePath);
     if (XenForo_Helper_File::createDirectory($directory, true) && is_writable($directory)) {
         if (file_exists($filePath)) {
             @unlink($filePath);
         }
         $writeSuccess = XenForo_Helper_File::safeRename($newTempFile, $filePath);
         if ($writeSuccess && file_exists($newTempFile)) {
             @unlink($newTempFile);
         }
     } else {
         $writeSuccess = false;
     }
     $date = XenForo_Application::$time;
     if ($writeSuccess) {
         $dw = XenForo_DataWriter::create('Nobita_Teams_DataWriter_Team');
         $dw->setExistingData($teamId);
         $dw->set('team_avatar_date', $date);
         $dw->save();
     }
     return $writeSuccess ? $date : 0;
 }
Exemple #20
0
 protected function _postSave()
 {
     $requestDw = $this->_getTeamDwForUpdate();
     if ($requestDw) {
         if ($this->get('member_state') == 'request') {
             $requestDw->updateMemberRequestCount(1);
             $requestDw->save();
         }
         if ($this->isChanged('member_state') && $this->getExisting('member_state') == 'request' && $this->get('member_state') == 'accept') {
             $requestDw->updateMemberRequestCount(-1);
             $requestDw->save();
         }
     }
     $memberCountDw = $this->_getTeamDwForUpdate();
     if ($memberCountDw) {
         if ($this->isInsert() && $this->get('member_state') == "accept" || $this->isChanged('member_state') && $this->get('member_state') == "accept") {
             $memberCountDw->updateMemberCountInTeam(1);
             $memberCountDw->save();
         }
     }
     $userId = $this->get('user_id');
     $visitor = XenForo_Visitor::getInstance();
     $alertable = false;
     if ($this->isInsert() && $this->get('member_state') == 'accept') {
         if ($userId != $visitor['user_id']) {
             $alertable = true;
         }
     }
     if ($this->isUpdate() && $this->isChanged('member_state') && $this->getExisting('member_state') != 'accept') {
         $alertable = true;
     }
     if ($alertable) {
         if ($this->get('action') == 'add') {
             $this->_getMemberModel()->sendAlertsToTeamManagersOnAction($this->getMergedData(), 'add');
         } else {
             $this->_getMemberModel()->sendAlertsToTeamManagersOnAction($this->getMergedData(), 'accept');
         }
     }
     if ($this->isInsert() && $this->get('member_state') == 'request') {
         $this->_getMemberModel()->sendAlertsToTeamManagersOnAction($this->getMergedData(), $this->get('member_state'));
     }
     $this->_updateTeamCache($this->get('user_id'));
     if ($this->isChanged('position')) {
         if (XenForo_Visitor::getUserId() != $this->get('user_id')) {
             $visitor = XenForo_Visitor::getInstance();
             $currPos = $this->get('position');
             $pastPos = $this->getExisting('position');
             $groupsCache = $this->getModelFromCache('Nobita_Teams_Model_MemberGroup')->getGroupsCached();
             if (isset($groupsCache[$currPos]) && 1 == intval($groupsCache[$currPos]['notice'])) {
                 $currTitle = $groupsCache[$currPos]['group_title'];
                 $pastTitle = isset($groupsCache[$pastPos]['group_title']) ? $groupsCache[$pastPos]['group_title'] : false;
                 if ($pastTitle) {
                     $message = new XenForo_Phrase('Teams_x_changed_position_y_from_xz_to_yz', array('userId' => $visitor['user_id'], 'name' => $visitor['username'], 'bePromotedId' => $this->get('user_id'), 'bePromotedName' => $this->get('username'), 'old_position' => ucfirst($pastTitle), 'new_position' => ucfirst($currTitle)), false);
                     Nobita_Teams_Setup::getInstance()->insertNewPostWhenActionCreated($this->get('team_id'), $message, 1);
                 }
             }
         }
     }
     $db = $this->_db;
     $updateActivity = false;
     if ($this->isUpdate() && $this->isChanged('position')) {
         $updateActivity = true;
     }
     if ($this->isInsert() && $this->get('member_state') == 'accept') {
         $updateActivity = true;
     }
     if ($updateActivity) {
         $db->update('xf_team', array('last_activity' => XenForo_Application::$time), 'team_id = ' . $db->quote($this->get('team_id')));
     }
 }
Exemple #21
0
 public function actionWatch()
 {
     $this->_assertPostOnly();
     list($post, $team, $category) = $this->_getTeamHelper()->assertPostValidAndViewable();
     $wtype = $this->_input->filterSingle('wtype', XenForo_Input::STRING);
     if (empty($wtype)) {
         $wtype = 'public';
     }
     $visitor = XenForo_Visitor::getInstance();
     $hasMember = Nobita_Teams_Setup::getInstance()->getTeamFromVisitor($team['team_id']);
     if (empty($hasMember)) {
         return $this->responseError(new XenForo_Phrase('Teams_you_must_join_team_to_watch_this_post'));
     }
     $this->_getPostModel()->watch($post['post_id'], XenForo_Visitor::getUserId());
     return $this->getPostSpecificRedirect($post, $team, XenForo_ControllerResponse_Redirect::SUCCESS, array('linkPhrase' => new XenForo_Phrase('Teams_stop_notifications'), 'linkUrl' => XenForo_Link::buildPublicLink(TEAM_ROUTE_ACTION . '/posts/unwatch', $post, array('_xfToken' => $visitor['csrf_token_page']))));
 }
Exemple #22
0
 public function actionPromote()
 {
     list($userId, $team, $category) = $this->_getTeamHelper()->assertMemberValidAndViewable();
     $this->_assertCanViewMemberTab($team, $category);
     if (!($user = $this->getModelFromCache('XenForo_Model_User')->getUserById($userId))) {
         return $this->responseError(new XenForo_Phrase('requested_user_not_found'), 404);
     }
     $memberModel = $this->_getMemberModel();
     $record = $memberModel->getRecordByKeys($user['user_id'], $team['team_id']);
     $setup = Nobita_Teams_Setup::getInstance();
     $promoter = $setup->getTeamFromVisitor($team['team_id']);
     if (!$record) {
         return $this->responseError(new XenForo_Phrase('requested_member_not_found'), 404);
     }
     if (!$memberModel->assertPermissionOnAction($team, $record, "canPromote", $error)) {
         throw $this->getErrorOrNoPermissionResponseException($error);
     }
     if ($this->_request->isPost()) {
         $position = $this->_input->filterSingle('position', XenForo_Input::STRING);
         $memberModel->promote($record, $position, 'promote');
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink(TEAM_ROUTE_PREFIX . '/members', $team));
     } else {
         return $this->responseView('', 'Team_member_promote', array('team' => $team, 'user' => $user, 'record' => $record, 'promoter' => $promoter, 'categoryBreadcrumbs' => $this->_getCategoryModel()->getCategoryBreadcrumb($category), 'permsCache' => XenForo_Application::getSimpleCacheData(TEAM_DATAREGISTRY_KEY)));
     }
 }