protected function _teamSetup() { if (!$this->_teamSetup) { $this->_teamSetup = Nobita_Teams_Setup::getInstance(); } return $this->_teamSetup; }
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); }
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)); }
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(); }
public static function assetSonnbXenGalleryValidAndUsable() { if (!static::assertAddOnValidAndUsable('sonnb_xengallery')) { return false; } $provider = Nobita_Teams_Setup::getInstance()->getOption('photoProvider'); return $provider == 'sonnb_xengallery'; }
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); }
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; }
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); }
public static function responseView(XenForo_Controller $controller, XenForo_Input $input, array $params = array()) { self::$controller = $controller; self::$input = $input; $setup = Nobita_Teams_Setup::getInstance(); self::$setup = $setup; $provider = $setup->getOption('photoProvider'); if ($provider == 'sonnb_xengallery') { $params = array_merge($params, self::_sonnbPhotoIndexParams()); } else { if ($provider == 'XenGallery') { $params = array_merge($params, self::_xenMediaPhotoIndexParams($params['team'])); } } return $controller->getHelper('Nobita_Teams_ControllerHelper_Team')->getTeamViewWrapper('photos', $params['team'], $params['category'], $controller->responseView($params['viewName'], $params['templateName'], $params)); }
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'])))); }
/** * 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; }
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)); }
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())); } }
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; }
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; }
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'))); } }
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; }
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); }
<?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;
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))); } }
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))); } }