Файловый менеджер - Редактировать - /var/www/html/components/com_community/views/groups/view.html.php
Ðазад
<?php /** * @copyright (C) 2013 iJoomla, Inc. - All rights reserved. * @license GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html) * @author iJoomla.com <webmaster@ijoomla.com> * @url https://www.jomsocial.com/license-agreement * The PHP code portions are distributed under the GPL license. If not otherwise stated, all images, manuals, cascading style sheets, and included JavaScript *are NOT GPL, and are released under the IJOOMLA Proprietary Use License v1.0 * More info at https://www.jomsocial.com/license-agreement */ use Joomla\CMS\Factory; use Joomla\CMS\Filter\OutputFilter; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\Session\Session; use Joomla\CMS\Table\Table; use Joomla\CMS\Uri\Uri; // Check to ensure this file is included in Joomla! defined('_JEXEC') or die(); jimport('joomla.application.component.view'); if (!class_exists("CommunityViewGroups")) { class CommunityViewGroups extends CommunityView { public function _addGroupInPathway($groupId) { $group = Table::getInstance('Group', 'CTable'); $group->load($groupId); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups')); $this->addPathway($group->name, CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group->id)); } public function sendmail() { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_SEND_EMAIL_TO_GROUP_MEMBERS')); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $id = $jinput->getInt('groupid', 0); $group = Table::getInstance('Group', 'CTable'); $group->load($id); $group->updateStats(); //ensure that stats are up-to-date // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } if ($id == 0) { CSystemHelper::showErrorPage(); return; } $this->addPathway(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups')); $this->addPathway($group->name, CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group->id)); $this->addPathway(Text::_('COM_COMMUNITY_SEND_EMAIL_TO_GROUP_MEMBERS')); if (!$this->accessAllowed('registered')) { return; } // Display the submenu $this->showSubmenu(); $my = CFactory::getUser(); $config = CFactory::getConfig(); $editor = new CEditor($config->get('htmleditor')); if (!$group->isAdmin($my->id) && !COwnerHelper::isCommunityAdmin()) { $this->noAccess(); return; } $message = $jinput->post->get('message', '', 'RAW'); $title = $jinput->get('title', '', 'STRING'); $tmpl = new CTemplate(); echo $tmpl->set('editor', $editor) ->set('group', $group) ->set('message', $message) ->set('title', $title) ->fetch('groups.sendmail'); } public function _addSubmenu() { $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $task = $jinput->get('task', ''); $config = CFactory::getConfig(); $groupid = $jinput->get('groupid', ''); $categoryid = $jinput->get('categoryid', ''); $my = CFactory::getUser(); $backLink = array('sendmail', 'invitefriends', 'viewmembers', 'viewdiscussion', 'viewdiscussions', 'editdiscussion', 'viewbulletins', 'adddiscussion', 'addnews', 'viewbulletin', 'uploadavatar', 'edit', 'banlist'); $excludeBannedMembers = array('banlist', 'viewbulletin', 'viewdiscussion', 'addnews', 'edit', 'editdiscussion'); $groupsModel = CFactory::getModel('groups'); $isAdmin = $groupsModel->isAdmin($my->id, $groupid); $isSuperAdmin = COwnerHelper::isCommunityAdmin(); // Load the group table. $group = Table::getInstance('Group', 'CTable'); $group->load($groupid); $isBanned = $group->isBanned($my->id); if (in_array($task, $backLink)) { //$this->addSubmenuItem('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $groupid, Text::_('COM_COMMUNITY_GROUPS_BACK_TO_GROUP')); if ($task == 'viewdiscussion' && !$isBanned) $this->addSubmenuItem('index.php?option=com_community&view=groups&task=viewdiscussions&groupid=' . $groupid, Text::_('COM_COMMUNITY_GROUPS_VIEW_ALL_DISCUSSIONS')); // $this->addSubmenuItem('index.php?option=com_community&view=groups&task=viewmembers&groupid=' . $groupid, Text::_('COM_COMMUNITY_GROUPS_ALL_MEMBERS')); if ($task == 'viewdiscussions' && !$isBanned) $this->addSubmenuItem('index.php?option=com_community&view=groups&groupid=' . $groupid . '&task=adddiscussion', Text::_('COM_COMMUNITY_GROUPS_DISCUSSION_CREATE'), '', SUBMENU_RIGHT); if ($task == 'viewbulletins' && ($isAdmin || $isSuperAdmin)) $this->addSubmenuItem('index.php?option=com_community&view=groups&groupid=' . $groupid . '&task=addnews', Text::_('COM_COMMUNITY_GROUPS_BULLETIN_CREATE'), '', SUBMENU_RIGHT); if ($task == 'viewmembers' && !$isBanned) { $friends = $groupsModel->getInviteFriendsList($my->id, $groupid); $userIds = ''; $i = 0; if ($friends) { foreach ($friends as $friend) { if ($i > 0) { $userIds .= ','; } if ($friend instanceof CUser) { $userIds .= $friend->id; } else { $userIds .= $friend; } $i++; } } $this->addSubmenuItem('index.php?option=com_community&view=groups', Text::_('COM_COMMUNITY_GROUPS_ALL_GROUPS')); if (COwnerHelper::isRegisteredUser()) { $this->addSubmenuItem('index.php?option=com_community&view=groups&task=mygroups&userid=' . $my->id, Text::_('COM_COMMUNITY_GROUPS_MY_GROUPS')); $this->addSubmenuItem('index.php?option=com_community&view=groups&task=mygroupupdate&userid=' . $my->id, Text::_('COM_COMMUNITY_GROUPS_MY_GROUPS_UPDATE')); $this->addSubmenuItem('index.php?option=com_community&view=groups&task=myinvites&userid=' . $my->id, Text::_('COM_COMMUNITY_GROUPS_PENDING_INVITES')); } // $this->addSubmenuItem('index.php?option=com_community&view=groups&task=invitefriends&groupid=' . $groupid, Text::_('COM_COMMUNITY_TAB_INVITE'), 'joms.invitation.showForm(\'' . $userIds . '\', \'groups,inviteUsers\',' . $group->id . ',1,1);', SUBMENU_RIGHT); } if ( ($isAdmin || $isSuperAdmin) && !in_array($task, $excludeBannedMembers)){ #$this->addSubmenuItem('index.php?option=com_community&view=groups&task=banlist&list=' . COMMUNITY_GROUP_BANNED . '&groupid=' . $groupid, Text::_('COM_COMMUNITY_GROUPS_BANNED_MEMBERS')); } } else { $this->addSubmenuItem('index.php?option=com_community&view=groups', Text::_('COM_COMMUNITY_GROUPS_ALL_GROUPS')); if (COwnerHelper::isRegisteredUser()) { $this->addSubmenuItem('index.php?option=com_community&view=groups&task=mygroups&userid=' . $my->id, Text::_('COM_COMMUNITY_GROUPS_MY_GROUPS')); $this->addSubmenuItem('index.php?option=com_community&view=groups&task=mygroupupdate&userid=' . $my->id, Text::_('COM_COMMUNITY_GROUPS_MY_GROUPS_UPDATE')); $this->addSubmenuItem('index.php?option=com_community&view=groups&task=myinvites&userid=' . $my->id, Text::_('COM_COMMUNITY_GROUPS_PENDING_INVITES')); } if ($config->get('creategroups') && ( $isSuperAdmin || (COwnerHelper::isRegisteredUser() && $my->canCreateGroups() ) )) { $creationLink = $categoryid ? 'index.php?option=com_community&view=groups&task=create&categoryid=' . $categoryid : 'index.php?option=com_community&view=groups&task=create'; //$this->addSubmenuItem($creationLink, Text::_('COM_COMMUNITY_GROUPS_CREATE'), '', SUBMENU_RIGHT); } if ((!$config->get('enableguestsearchgroups') && COwnerHelper::isRegisteredUser() ) || $config->get('enableguestsearchgroups')) { $tmpl = new CTemplate(); $html = $tmpl->set('url', CRoute::_('index.php?option=com_community&view=groups&task=search')) ->fetch('groups.search.submenu'); //$this->addSubmenuItem('index.php?option=com_community&view=groups&task=search', Text::_('COM_COMMUNITY_GROUPS_SEARCH'), 'joms.groups.toggleSearchSubmenu(this)', false, $html); } } } public function singleActivity($activity) { // we will determine all the user settings based on the activity viewed $my = CFactory::getUser(); $userId = $activity->actor; if($activity->id == 0 || empty($activity->id)){ //redirect this to error : no activity found Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_ERROR_ACTIVITY_NOT_FOUND'), 'warning'); } echo CMiniHeader::showGroupMiniHeader($activity->groupid); $document = Factory::getDocument(); $document->setTitle(HTMLHelper::_('string.truncate', $activity->title, 75)); CHeadHelper::setDescription(HTMLHelper::_('string.truncate', $activity->title, 300, true)); //see if the user has blocked each other $getBlockStatus = new blockUser(); $blocked = $getBlockStatus->isUserBlocked($userId, 'profile'); if ($blocked && !COwnerHelper::isCommunityAdmin()) { Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_ERROR_ACTIVITY_NOT_FOUND'), 'warning'); } //everything is fine, lets get to the activity echo $this->_getNewsfeedHTML(); } private function _getNewsfeedHTML() { $my = CFactory::getUser(); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $userId = $jinput->get('userid', $my->id, 'INT'); return CActivities::getActivitiesByFilter('active-profile', $userId, 'profile', true, array('show_featured'=>true)); } public function showSubmenu($display=true) { $this->_addSubmenu(); return parent::showSubmenu($display); } /** * Display invite form * */ public function invitefriends() { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_INVITE_FRIENDS_TO_GROUP_TITLE')); $jinput = Factory::getApplication()->input; if (!$this->accessAllowed('registered')) { return; } $this->showSubmenu(); $my = CFactory::getUser(); $groupId = $jinput->getInt('groupid'); $this->_addGroupInPathway($groupId); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_INVITE_FRIENDS_TO_GROUP_TITLE')); $friendsModel = CFactory::getModel('Friends'); $groupsModel = CFactory::getModel('Groups'); $tmpFriends = $friendsModel->getFriends($my->id, 'name', false); $friends = array(); for ($i = 0; $i < count($tmpFriends); $i++) { $friend = $tmpFriends[$i]; $groupInvite = Table::getInstance('GroupInvite', 'CTable'); $keys = array('groupId' => $groupId, 'userId' => $friend->id); $groupInvite->load($keys); if (!$groupsModel->isMember($friend->id, $groupId) && !$groupInvite->exists()) { $friends[] = $friend; } } unset($tmpFriends); $group = Table::getInstance('Group', 'CTable'); $group->load($groupId); $tmpl = new CTemplate(); echo $tmpl->set('friends', $friends) ->set('group', $group) ->fetch('groups.invitefriends'); } /** * Edit a group */ public function edit() { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_EDIT_TITLE')); $config = CFactory::getConfig(); $jConfig = Factory::getConfig(); $mainframe = Factory::getApplication(); $this->showSubmenu(); $jinput = Factory::getApplication()->input; // $js = 'assets/validate-1.5.min.js'; // CFactory::attach($js, 'js'); $groupId = $jinput->request->getInt('groupid'); $groupModel = CFactory::getModel('Groups'); $categories = $groupModel->getCategories(); $group = Table::getInstance('Group', 'CTable'); $group->load($groupId); // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } $this->_addGroupInPathway($group->id); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_EDIT_TITLE')); $app = CAppPlugins::getInstance(); $appFields = $app->triggerEvent('onFormDisplay', array('jsform-groups-forms')); $beforeFormDisplay = CFormElement::renderElements($appFields, 'before'); $afterFormDisplay = CFormElement::renderElements($appFields, 'after'); // Load category tree $cTree = CCategoryHelper::getCategories($categories); $lists['categoryid'] = CCategoryHelper::getSelectList('groups', $cTree, $group->categoryid, true); $editorType = ($config->get('allowhtml') ) ? $config->get('htmleditor', 'none') : 'none'; $editor = new CEditor($editorType); $params = $group->getParams(); $photopermission = ($params->get('photopermission') == GROUP_PHOTO_PERMISSION_ADMINS || $params->get('photopermission') == GROUP_PHOTO_PERMISSION_ALL ) ? 1 : 0; $videopermission = ($params->get('videopermission') == GROUP_VIDEO_PERMISSION_ADMINS || $params->get('videopermission') == GROUP_VIDEO_PERMISSION_ADMINS ) ? 1 : 0; $eventpermission = ($params->get('eventpermission') == GROUP_EVENT_PERMISSION_ADMINS || $params->get('eventpermission') == GROUP_EVENT_PERMISSION_ADMINS ) ? 1 : 0; $group->discussordering = 0; $group->grouprecentphotos = $jinput->post->getInt('grouprecentphotos', $params->get('grouprecentphotos', GROUP_PHOTO_RECENT_LIMIT)); $group->grouprecentvideos = $jinput->post->getInt('grouprecentvideos', $params->get('grouprecentvideos', GROUP_VIDEO_RECENT_LIMIT)); $group->grouprecentevents = $jinput->post->getInt('grouprecentevents', $params->get('grouprecentevents', GROUP_EVENT_RECENT_LIMIT)); $group->photopermission = $jinput->post->getInt('photopermission-admin', $photopermission); $group->videopermission = $jinput->post->getInt('videopermission-admin', $videopermission); $group->eventpermission = $jinput->post->getInt('eventpermission-admin', $eventpermission); if ($mainframe->get('sef')) { $juriRoot = Uri::root(false); $juriPathOnly = Uri::root(true); $juriPathOnly = rtrim($juriPathOnly, '/'); $groupURL = rtrim(str_replace($juriPathOnly, '', $juriRoot), '/'); $groupURL .= CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group->id, false); if (!$group->alias) { $alias = OutputFilter::stringURLSafe($group->name); } else { $alias = OutputFilter::stringURLSafe($group->alias); } $inputHTML = '<input id="alias" name="alias" type="text" class="joms-input" value="' . $alias . '" />'; $prefixURL = str_replace($alias, $inputHTML, $groupURL); if ($prefixURL == $groupURL) { $prefixURL = CString::str_ireplace($alias, $inputHTML, $groupURL); } } $tmpl = new CTemplate(); echo $tmpl->set('beforeFormDisplay', $beforeFormDisplay) ->set('afterFormDisplay', $afterFormDisplay) ->set('config', $config) ->set('jConfig', $jConfig) ->set('prefixURL', $prefixURL) ->set('lists', $lists) ->set('categories', $categories) ->set('group', $group) ->set('params', $group->getParams()) ->set('isNew', false) ->set('editor', $editor) ->fetch('groups.forms'); } /** * Method to display group creation form * */ public function create($data) { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_CREATE_NEW_GROUP')); $config = CFactory::getConfig(); $jConfig = Factory::getConfig(); // $js = 'assets/validate-1.5.min.js'; // CFactory::attach($js, 'js'); $my = CFactory::getUser(); $model = CFactory::getModel('groups'); $totalGroup = $model->getGroupsCreationCount($my->id); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; if (!$my->authorise('community.create', 'groups')) { Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_GROUPS_DISABLE_CREATE_MESSAGE'),''); return; } //initialize default value $group = Table::getInstance('Group', 'CTable'); $group->approvals = $jinput->get('approvals', '', 'INT'); $group->unlisted = $jinput->get('unlisted', '', 'INT'); $group->name = $jinput->post->get('name', '', 'STRING'); $group->summary = $jinput->post->get('summary', '', 'STRING'); $group->description = $jinput->post->get('description', '', 'RAW'); $group->email = $jinput->post->get('email', '', 'STRING'); $group->website = $jinput->post->get('website', '', 'STRING'); $group->categoryid = $jinput->get('categoryid', '', 'INT'); $params = $group->getParams(); $photopermission = ($params->get('photopermission') == GROUP_PHOTO_PERMISSION_ADMINS || $params->get('photopermission') == GROUP_PHOTO_PERMISSION_ALL || $params->get('photopermission') == '') ? 1 : 0; $videopermission = ($params->get('videopermission') == GROUP_VIDEO_PERMISSION_ADMINS || $params->get('videopermission') == GROUP_VIDEO_PERMISSION_ADMINS || $params->get('videopermission') == '') ? 1 : 0; $eventpermission = ($params->get('eventpermission') == GROUP_EVENT_PERMISSION_ADMINS || $params->get('eventpermission') == GROUP_EVENT_PERMISSION_ADMINS || $params->get('eventpermission') == '') ? 1 : 0; $group->discussordering = 0; $group->grouprecentphotos = $jinput->post->getInt('grouprecentphotos', $params->get('grouprecentphotos', GROUP_PHOTO_RECENT_LIMIT)); $group->grouprecentvideos = $jinput->post->getInt('grouprecentvideos', $params->get('grouprecentvideos', GROUP_VIDEO_RECENT_LIMIT)); $group->grouprecentevents = $jinput->post->getInt('grouprecentevents', $params->get('grouprecentevents', GROUP_EVENT_RECENT_LIMIT)); $group->photopermission = $jinput->post->getInt('photopermission-admin', $photopermission); $group->videopermission = $jinput->post->getInt('videopermission-admin', $videopermission); $group->eventpermission = $jinput->post->getInt('eventpermission-admin', $eventpermission); $app = CAppPlugins::getInstance(); $appFields = $app->triggerEvent('onFormDisplay', array('jsform-groups-form')); $beforeFormDisplay = CFormElement::renderElements($appFields, 'before'); $afterFormDisplay = CFormElement::renderElements($appFields, 'after'); // Load category tree $cTree = CCategoryHelper::getCategories($data->categories); $lists['categoryid'] = CCategoryHelper::getSelectList('groups', $cTree, $group->categoryid, true); $editorType = ($config->get('allowhtml') ) ? $config->get('htmleditor', 'none') : 'none'; $editor = new CEditor($editorType); $tmpl = new CTemplate(); $tmpl->set('beforeFormDisplay', $beforeFormDisplay) ->set('afterFormDisplay', $afterFormDisplay) ->set('config', $config) ->set('jConfig', $jConfig) ->set('lists', $lists) ->set('categories', $data->categories) ->set('group', $group) ->set('groupCreated', $totalGroup) ->set('groupCreationLimit', $config->get('groupcreatelimit')) ->set('params', $group->getParams()) ->set('isNew', true) ->set('editor', $editor); if ($config->get('groupcreatelimit') != 0 && ($totalGroup / $config->get('groupcreatelimit') >= COMMUNITY_SHOW_LIMIT)) { echo $tmpl->fetch('groups.forms.limit'); } else { echo $tmpl->fetch('groups.forms'); } } /** * A group has just been created, should we just show the album ? */ public function created() { $jinput = Factory::getApplication()->input; $groupid = $jinput->get('groupid', 0); $mainframe = Factory::getApplication(); $mainframe->redirect(CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $groupid, false)); /* $group = Table::getInstance('Group', 'CTable'); $group->load($groupid); CHeadHelper::setType('website', $group->name); $uri = JURI::base(); $this->showSubmenu(); $tmpl = new CTemplate(); echo $tmpl ->setMetaTags('group', $group) ->set('link', CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $groupid)) ->set('linkBulletin', CRoute::_('index.php?option=com_community&view=groups&task=addnews&groupid=' . $groupid)) ->set('linkUpload', CRoute::_('index.php?option=com_community&view=groups&task=uploadavatar&groupid=' . $groupid)) ->set('linkEdit', CRoute::_('index.php?option=com_community&view=groups&task=edit&groupid=' . $groupid)) ->set('linkDiscussion', CRoute::_('index.php?option=com_community&view=groups&task=adddiscussion&groupid=' . $groupid)) ->fetch('groups.created'); */ } /** * Method to display output after saving group * * @param Table Group Table object * */ public function save($group) { $mainframe = Factory::getApplication(); /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_AVATAR_UPLOAD')); // Load submenus $this->showSubmenu(); if (!$group->id) { $this->addWarning('COM_COMMUNITY_GROUPS_SAVE_ERROR'); return; } $mainframe->enqueueMessage(Text::sprintf('COM_COMMUNITY_GROUPS_NEW_MESSAGE', $group->name)); $tmpl = new CTemplate(); echo $tmpl->set('group', $group) ->fetch('groups.save'); } /** * Method to display listing of groups from the site * */ public function display($data = NULL) { $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $document = Factory::getDocument(); $avatarModel = CFactory::getModel('avatar'); $wallsModel = CFactory::getModel('wall'); // Get category id from the query string if there are any. $categoryId = $jinput->getInt('categoryid', 0); $category = Table::getInstance('GroupCategory', 'CTable'); $category->load($categoryId); if ($categoryId != 0) { $this->addPathway(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups')); /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_CATEGORIES') . ' : ' . str_replace('&', '&', Text::_($this->escape($category->name)))); } else { $this->addPathway(Text::_('COM_COMMUNITY_GROUPS')); /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_BROWSE_TITLE')); } // If we are browing by category, add additional breadcrumb and add // category name in the page title /* begin: UNLIMITED LEVEL BREADCRUMBS PROCESSING */ if ($category->parent == COMMUNITY_NO_PARENT) { $this->addPathway(Text::_($this->escape($category->name)), CRoute::_('index.php?option=com_community&view=groups&categoryid=' . $category->id)); } else { // Parent Category $parentsInArray = array(); $n = 0; $parentId = $category->id; $parent = Table::getInstance('GroupCategory', 'CTable'); do { $parent->load($parentId); $parentId = $parent->parent; $parentsInArray[$n]['id'] = $parent->id; $parentsInArray[$n]['parent'] = $parent->parent; $parentsInArray[$n]['name'] = Text::_($this->escape($parent->name)); $n++; } while ($parent->parent > COMMUNITY_NO_PARENT); for ($i = count($parentsInArray) - 1; $i >= 0; $i--) { $this->addPathway($parentsInArray[$i]['name'], CRoute::_('index.php?option=com_community&view=groups&categoryid=' . $parentsInArray[$i]['id'])); } } /* end: UNLIMITED LEVEL BREADCRUMBS PROCESSING */ $config = CFactory::getConfig(); $my = CFactory::getUser(); $uri = Uri::base(); $discussionModel = CFactory::getModel('discussions'); $feedLink = CRoute::_('index.php?option=com_community&view=groups&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_LATEST_GROUPS_FEED') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); $feedLink = CRoute::_('index.php?option=com_community&view=groups&task=viewlatestdiscussions&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_LATEST_GROUP_DISCUSSIONS_FEED') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); $data = new stdClass(); $defaultSortOrder = $config->get('group_default_sort_order', 'latest'); $sorted = $jinput->get->get('sort', $defaultSortOrder, 'STRING'); $limitstart = $jinput->get('limitstart', 0, 'INT'); //cache groups categories $data->categories = $this->_cachedCall('getGroupsCategories', array($category->id), '', array(COMMUNITY_CACHE_TAG_GROUPS_CAT)); // cache groups list. $user = CFactory::getUser(); $username = $user->get('username'); $featured = (!is_null($username) ) ? true : false; $groupsData = $this->_cachedCall('getShowAllGroups', array($category->id, $sorted, $featured), COwnerHelper::isCommunityAdmin($my->id), array(COMMUNITY_CACHE_TAG_GROUPS)); $groupsHTML = $groupsData['HTML']; $act = new CActivityStream(); //Cache Group Featured List $featuredGroups = $this->_cachedCall('_getGroupsFeaturedList', array(), '', array(COMMUNITY_CACHE_TAG_FEATURED)); $featuredHTML = $featuredGroups['HTML']; //no Featured Group headline slideshow on Category filtered page if (!empty($categoryId)) $featuredHTML = ''; $tmpl = new CTemplate($this); $sortItems = array( 'latest' => Text::_('COM_COMMUNITY_GROUPS_SORT_LATEST'), 'oldest' => Text::_('COM_COMMUNITY_GROUPS_SORT_OLDEST'), 'alphabetical' => Text::_('COM_COMMUNITY_SORT_ALPHABETICAL'), 'mostactive' => Text::_('COM_COMMUNITY_GROUPS_SORT_MOST_ACTIVE') ); if($config->get('show_featured')){ $sortItems['featured'] = Text::_('COM_COMMUNITY_GROUP_SORT_FEATURED'); } echo $tmpl->set('featuredHTML', $featuredHTML) ->set('index', true) ->set('categories', $data->categories) ->set('availableCategories', $this->getFullGroupsCategories()) ->set('groupsHTML', $groupsHTML) ->set('config', $config) ->set('category', $category) ->set('categoryId', $categoryId) ->set('isCommunityAdmin', COwnerHelper::isCommunityAdmin()) ->set('sortings', CFilterBar::getHTML(CRoute::getURI(), $sortItems, $defaultSortOrder)) ->set('sorted', $sorted) ->set('my', $my) ->set('discussionsHTML', $this->modPublicDiscussion($categoryId)) ->set('submenu', $this->showSubmenu(false)) ->fetch('groups/base'); } /** * List All FEATURED GROUPS * @ since 2.6 * */ public function _getGroupsFeaturedList() { $featGroups = $this->getGroupsFeaturedList(); $featuredHTML['HTML'] = $this->_getFeatHTML($featGroups); return $featuredHTML; } /** * Generate Featured Groups HTML * * @param array Array of events objects * @return string HTML * @since 2.6 */ private function _getFeatHTML($groups) { $my = CFactory::getUser(); $config = CFactory::getConfig(); $group = Table::getInstance('Group', 'CTable'); $tmpl = new CTemplate(); return $tmpl->set('groups', $groups) ->set('showFeatured', $config->get('show_featured')) ->set('isCommunityAdmin', COwnerHelper::isCommunityAdmin()) ->set('my', $my) ->fetch('groups.featured'); } /** * @since 2.6 * mygroupupdates page * */ public function myGroupUpdate() { $groupModel = CFactory::getModel('groups'); $jinput = Factory::getApplication()->input; $userId = $jinput->get->get('userid', NULL, 'INT'); $my = CFactory::getUser($userId); /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_MY_GROUPS_UPDATE')); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups')); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_MY_GROUPS_UPDATE'), ''); //get the groups of current user $userGroupArr = $groupModel->getGroupIds($my->id); $groupInfoArr = array(); //to store all the groups info that belongs to current user foreach ($userGroupArr as $userGrp) { $table = Table::getInstance('Group', 'CTable'); $table->load($userGrp); $groupInfoArr[] = array('thumb' => $table->getThumbAvatar()); //$groupInfoArr[] = $table->getThumbAvatar(); // } $tmpl = new CTemplate(); echo $tmpl->set('userid', $my->id) ->set('my', $my) ->set('submenu', $this->showSubmenu(false)) ->fetch('groups.updates'); } /** * @since 2.6 * module for user participated discussion */ public function modUserParticipatedDiscussion($userId, $limit = 10) { return $this->_getUserParticipatedDiscussionUpdates($userId, $limit); } public function modGetUserParticipatedDiscussion($userId, $limit = 10) { $groupsModel = CFactory::getModel('groups'); $latestParticipatedDiscussion = $groupsModel->getGroupDiscussionLastActive($userId); return (array) $latestParticipatedDiscussion; } /** * @since 2.6 * module for user participated discussion */ private function _getUserParticipatedDiscussionUpdates($userId, $limit) { $groupsModel = CFactory::getModel('groups'); $latestParticipatedDiscussion = $groupsModel->getGroupDiscussionLastActive($userId); $tmpl = new CTemplate(); return $tmpl->set('discussions', $latestParticipatedDiscussion) ->fetch('groups.discussion.updates'); } /** * @since 2.6 * module for user participated discussion */ public function modUserAnnouncement($userId, $limit = 5) { return $this->_getUserGroupAnnouncementUpdates($userId, $limit); } public function modGetUserAnnouncement($userId, $limit = 5) { $groupsModel = CFactory::getModel('groups'); $latestAnnouncement = $groupsModel->getGroupAnnouncementUpdate($userId, $limit); return $latestAnnouncement; } /** * @since 2.6 * module for user participated discussion */ private function _getUserGroupAnnouncementUpdates($userId, $limit) { $groupsModel = CFactory::getModel('groups'); $latestAnnouncement = $groupsModel->getGroupAnnouncementUpdate($userId, $limit); $tmpl = new CTemplate(); return $tmpl->set('announcements', $latestAnnouncement) ->fetch('groups.announcement.updates'); } /** * @since 2.6 * module for user's participated group upcoming events */ public function modUserGroupUpcomingEvents($userId, $limit = 5) { return $this->_getUserGroupUpcomingEvents($userId, $limit); } /** * @since 2.6 * to get user's participated group upcoming events */ private function _getUserGroupUpcomingEvents($userId, $limit) { $groupsModel = CFactory::getModel('groups'); $latestEvents = $groupsModel->getGroupUpcomingEvents($userId, $limit); $tmpl = new CTemplate(); return $tmpl->set('events', $latestEvents) ->fetch('groups.events.updates'); } /** * @since 2.6 * module for user's participated group album updates */ public function modUserAlbumsUpdate($userId, $limit = 5) { return $this->_getUserAlbumsUpdate($userId, $limit); } private function _getUserAlbumsUpdate($userId, $limit) { $groupsModel = CFactory::getModel('groups'); $latestAlbumUpdate = $groupsModel->getGroupLatestAlbumUpdate($userId, $limit); $tmpl = new CTemplate(); return $tmpl->set('albums', $latestAlbumUpdate) ->fetch('groups.album.updates'); } /** * @since 2.6 * module for user's participated group videos updates */ public function modUserGroupVideosUpdate($userId, $limit = 5) { return $this->_getUserGroupVideosUpdate($userId, $limit); } private function _getUserGroupVideosUpdate($userId, $limit) { $groupsModel = CFactory::getModel('groups'); $groupVideos = $groupsModel->getGroupVideosUpdate($userId, $limit); $tmpl = new CTemplate(); return $tmpl->set('videos', $groupVideos) ->fetch('groups.videos.updates'); } /** * @since 2.6 * module for user's group */ public function modUserGroups($userId, $limit = 12) { return $this->_getUserGroups($userId, $limit); } public function modGetUserGroups($userId, $limit = 5) { $groupsModel = CFactory::getModel('groups'); $groupsId = $groupsModel->getGroupIds($userId, $limit); $groupsDetail = array(); $count = 1; foreach ($groupsId as $group) { if ($count == $limit) { break; } $count++; $table = Table::getInstance('Group', 'CTable'); $table->load($group); $groupsDetail[] = array('group_url' => CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group), 'avatar' => $table->getThumbAvatar(), 'group_name' => $table->name); } $tmpl = new CTemplate(); return $groupsDetail; } private function _getUserGroups($userId, $limit) { $groupsModel = CFactory::getModel('groups'); $groupsId = $groupsModel->getGroupIds($userId); $groupsDetail = array(); $count = 1; foreach ($groupsId as $group) { if ($count == $limit) { break; } $count++; $table = Table::getInstance('Group', 'CTable'); $table->load($group); $groupsDetail[] = array('group_url' => CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group), 'avatar' => $table->getThumbAvatar(), 'group_name' => $table->name); } $tmpl = new CTemplate(); return $tmpl->set('usergroups', $groupsDetail) ->fetch('groups.user.group'); } public function modUserGroupPending($userid) { return $this->_getPendingListHTML($userid); } /** * showGroupsFeaturedList * */ public function getGroupsFeaturedList() { $featured = new CFeatured(FEATURED_GROUPS); $featuredGroups = $featured->getItemIds(); $featuredList = array(); foreach ($featuredGroups as $group) { $table = Table::getInstance('Group', 'CTable'); $table->load($group); $featuredList[] = $table; } return $featuredList; } /** * showGroupsCategory * */ public function getGroupsCategories($category) { $model = CFactory::getModel('groups'); $categories = $model->getCategoriesCount(); $categories = CCategoryHelper::getParentCount($categories, $category); return $categories; } /** * showAllGroups * */ public function getShowAllGroups($category, $sorted) { $model = CFactory::getModel('groups'); // Get group in category and it's children. $categories = $model->getAllCategories(); $categoryIds = CCategoryHelper::getCategoryChilds($categories, $category); if ((int) $category > 0) { $categoryIds[] = (int) $category; } // It is safe to pass 0 as the category id as the model itself checks for this value. $data = new StdClass; $data->groups = $model->getAllGroups($categoryIds, $sorted); // Get pagination object $data->pagination = $model->getPagination(); // Get the template for the group lists $groupsHTML['HTML'] = $this->_getGroupsHTML($data->groups, $data->pagination); return $groupsHTML; } /** * Application full view * */ public function discussAppFullView() { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_DISCUSSION_REPLY')); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $applicationName = CStringHelper::strtolower($jinput->get->get('app', '', 'STRING')); if (empty($applicationName)) { Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_APP_ID_REQUIRED'), 'warning'); } $output = ''; $topicId = $jinput->get('topicid', '', 'INT'); $model = CFactory::getModel('discussions'); $discussion = Table::getInstance('Discussion', 'CTable'); $discussion->load($topicId); $group = Table::getInstance('Group', 'CTable'); $group->load($discussion->groupid); $this->addSubmenuItem('index.php?option=com_community&view=groups&task=viewdiscussion&groupid=' . $discussion->groupid . '&topicid=' . $topicId, Text::_('COM_COMMUNITY_BACK_TO_TOPIC')); return parent::showSubmenu($display); //@todo: Since group walls doesn't use application yet, we process it manually now. if ($applicationName == 'walls') { $limit = $jinput->request->get('limit', 5, 'INT'); $limitstart = $jinput->request->get('limitstart', 0, 'INT'); $my = CFactory::getUser(); $config = CFactory::getConfig(); $isBanned = $group->isBanned($my->id); // Get the walls content $output .='<div id="wallContent">'; $output .= CWallLibrary::getWallContents('discussions', $discussion->id, ($my->id == $discussion->creator), $limit, $limitstart, 'wall/content', 'groups,discussion'); $output .= '</div>'; if (!$config->get('lockgroupwalls') || ($config->get('lockgroupwalls') && $group->isMember($my->id) && !$isBanned ) || COwnerHelper::isCommunityAdmin()) { $outputLock = '<div class="cAlert">' . Text::_('COM_COMMUNITY_DISCUSSION_LOCKED_NOTICE') . '</div>'; $outputUnLock = CWallLibrary::getWallInputForm($discussion->id, 'groups,ajaxSaveDiscussionWall', 'groups,ajaxRemoveWall'); $wallForm = $discussion->lock ? $outputLock : $outputUnLock; $output .= $wallForm; } jimport('joomla.html.pagination'); $wallModel = CFactory::getModel('wall'); $pagination = new JPagination($wallModel->getCount($discussion->id, 'discussions'), $limitstart, $limit); $output .= '<div class="cPagination">' . $pagination->getPagesLinks() . '</div>'; } else { $model = CFactory::getModel('apps'); $applications = CAppPlugins::getInstance(); $applicationId = $model->getUserApplicationId($applicationName); $application = $applications->get($applicationName, $applicationId); // Get the parameters $manifest = CPluginHelper::getPluginPath('community', $applicationName) . '/' . $applicationName . '/' . $applicationName . '.xml'; $params = new CParameter($model->getUserAppParams($applicationId), $manifest); $application->params = $params; $application->id = $applicationId; $output = $application->onAppDisplay($params); } echo $output; } /** * Application full view * */ public function appFullView() { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_WALL_TITLE')); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $applicationName = CStringHelper::strtolower($jinput->get->get('app', '', 'STRING')); if (empty($applicationName)) { Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_APP_ID_REQUIRED'), 'warning'); } $output = ''; $groupModel = CFactory::getModel('groups'); $groupId = $jinput->getInt('groupid'); $group = Table::getInstance('Group', 'CTable'); $group->load($groupId); // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } //@todo: Since group walls doesn't use application yet, we process it manually now. if ($applicationName == 'walls') { $limit = $jinput->request->getInt('limit', 5); $limitstart = $jinput->request->getInt('limitstart', 0); $my = CFactory::getUser(); $config = CFactory::getConfig(); $isBanned = $group->isBanned($my->id); // Test if the current browser is a member of the group $isMember = $group->isMember($my->id); $waitingApproval = $groupModel->isWaitingAuthorization($my->id, $group->id); if (!$isMember && !COwnerHelper::isCommunityAdmin() && $group->approvals == COMMUNITY_PRIVATE_GROUP) { $this->noAccess(Text::_('COM_COMMUNITY_GROUPS_PRIVATE_NOTICE')); return; } // Get the walls content $output .='<div id="wallContent">'; if (!$isBanned) { $output .= CWallLibrary::getWallContents('groups', $group->id, ($my->id == $group->ownerid), $limit, $limitstart, 'wall/content', 'groups,group'); } else { $output .= CWallLibrary::getWallContents('groups', $group->id, ($my->id == $group->ownerid), $limit, $limitstart, 'wall/content', 'groups,group', null, 1); } $output .= '</div>'; if (!$config->get('lockgroupwalls') || ($config->get('lockgroupwalls') && ($isMember && !$isBanned) && !($waitingApproval) ) || COwnerHelper::isCommunityAdmin()) { $output .= CWallLibrary::getWallInputForm($group->id, 'groups,ajaxSaveWall', 'groups,ajaxRemoveWall'); } jimport('joomla.html.pagination'); $wallModel = CFactory::getModel('wall'); $pagination = new JPagination($wallModel->getCount($group->id, 'groups'), $limitstart, $limit); $output .= '<div class="cPagination">' . $pagination->getPagesLinks() . '</div>'; } else { $model = CFactory::getModel('apps'); $applications = CAppPlugins::getInstance(); $applicationId = $model->getUserApplicationId($applicationName); $application = $applications->get($applicationName, $applicationId); if (!$application) { Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_APPS_NOT_FOUND'), 'warning'); } // Get the parameters $manifest = CPluginHelper::getPluginPath('community', $applicationName) . '/' . $applicationName . '/' . $applicationName . '.xml'; $params = new CParameter($model->getUserAppParams($applicationId), $manifest); $application->params = $params; $application->id = $applicationId; $output = $application->onAppDisplay($params); } echo $output; } public function _getUnapproved($members) { $return = array(); foreach ($members as $member) { if ($member->approved == 0) { $return[] = $member; } } return $return; } public function _getApproved($members) { $return = array(); foreach ($members as $member) { if ($member->approved == 1) { $return[] = $member; } } return $return; } public function _isBanned($members, $myId) { foreach ($members as $member) { if ($member->id == $myId && $member->permission == COMMUNITY_GROUP_BANNED) { return true; } } } /** * Displays specific groups * */ public function viewGroup($group) { CWindow::load(); $config = CFactory::getConfig(); $document = Factory::getDocument(); $groupLib = new CGroups(); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; // Load appropriate models $groupModel = CFactory::getModel('groups'); $wallModel = CFactory::getModel('wall'); $userModel = CFactory::getModel('user'); $discussModel = CFactory::getModel('discussions'); $bulletinModel = CFactory::getModel('bulletins'); $photosModel = CFactory::getModel('photos'); $activityModel = CFactory::getModel('activities'); $fileModel = CFactory::getModel('files'); $editGroup = $jinput->get->get('edit', FALSE, 'NONE'); $editGroup = ( $editGroup == 1 ) ? true : false; $params = $group->getParams(); /** * Opengraph * @todo Support group avatar og:image */ CHeadHelper::setType('website', CStringHelper::escape($group->name), CStringHelper::escape(strip_tags($group->description))); $document->addCustomTag('<link rel="image_src" href="' . Uri::root(true) .'/'. $group->thumb . '" />'); // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } $group->hit(); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups')); $this->addPathway(Text::sprintf('COM_COMMUNITY_GROUPS_NAME_TITLE', $group->name), ''); // Load the current browsers data $my = CFactory::getUser(); // If user are invited $isInvited = $groupModel->isInvited($my->id, $group->id); // Get members list for display //$members = $groupModel->getAllMember($group->id); //Set limit for member listing on view group page $limit = CFactory::getConfig()->get('group_sidebar_members_show_total',12); $approvedMembers = $groupModel->getMembers($group->id, $limit, true, false, true); CError::assert($approvedMembers, 'array', 'istype', __FILE__, __LINE__); // Is there any my friend is the member of this group? $join = ''; $friendsCount = 0; if ($isInvited) { // Get the invitors $invitors = $groupModel->getInvitors($my->id, $group->id); if (count($invitors) == 1) { $user = CFactory::getUser($invitors[0]->creator); $join = '<a href="' . CUrlHelper::userLink($user->id) . '">' . $user->getDisplayName() . '</a>'; } else { for ($i = 0; $i < count($invitors); $i++) { $user = CFactory::getUser($invitors[$i]->creator); if (($i + 1 ) == count($invitors)) { $join .= ' ' . Text::_('COM_COMMUNITY_AND') . ' ' . '<a href="' . CUrlHelper::userLink($user->id) . '">' . $user->getDisplayName() . '</a>'; } else { $join .= ', ' . '<a href="' . CUrlHelper::userLink($user->id) . '">' . $user->getDisplayName() . '</a>'; } } } // Get users friends in this group $friendsCount = $groupModel->getFriendsCount($my->id, $group->id); } // Get list of unapproved members $unapproved = $groupModel->getMembers($group->id, null, false); $unapproved = count($unapproved); // Test if the current user is admin $isAdmin = $groupModel->isAdmin($my->id, $group->id); // Test if the current browser is a member of the group $isMember = $groupModel->isMember($my->id, $group->id); $waitingApproval = false; // Test if the current user is banned from this group $isBanned = $group->isBanned($my->id); // Attach avatar of the member // Pre-load multiple users at once $userids = array(); $limitloop = $limit; foreach ($approvedMembers as $uid) { if ($limitloop-- < 1){ break; } $userids[] = $uid->id; } CFactory::loadUsers($userids); $limitloop = $limit; for ($i = 0; ($i < count($approvedMembers)); $i++) { if ($limitloop-- < 1){ break; } $row = $approvedMembers[$i]; $approvedMembers[$i] = CFactory::getUser($row->id); } $membersCount = $group->membercount; if ($isBanned) { $mainframe = Factory::getApplication(); $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_GROUPS_MEMBER_BANNED'), 'error'); return; } // If I have tried to join this group, but not yet approved, display a notice if ($groupModel->isWaitingAuthorization($my->id, $group->id)) { $waitingApproval = true; } // Get like $likes = new CLike(); $isUserLiked = false; if ($isLikeEnabled = $likes->enabled('groups')) { $isUserLiked = $likes->userLiked('groups', $group->id, $my->id); } $totalLikes = $likes->getLikeCount('groups', $group->id); // Get discussions data $discussionData = $this->_cachedCall('_getDiscussionListHTML', array($params, $group->id), $group->id, array(COMMUNITY_CACHE_TAG_GROUPS_DETAIL)); $discussionsHTML = $discussionData['HTML']; $totalDiscussion = $discussionData['total']; $discussions = $discussionData['data']; // Get bulletins data $bulletinData = $this->_cachedCall('_getBulletinListHTML', array($group->id), $group->id, array(COMMUNITY_CACHE_TAG_GROUPS_DETAIL)); $totalBulletin = $bulletinData['total']; $bulletinsHTML = $bulletinData['HTML']; $bulletins = $bulletinData['data']; // Get album data $albumData = $this->_cachedCall('_getAlbums', array($params, $group->id), $group->id, array(COMMUNITY_CACHE_TAG_GROUPS_DETAIL)); $albums = $albumData['data']; $totalAlbums = $albumData['total']; // Get video data $videoData = $this->_getVideos($params, $group->id); $videos = $videoData['data']; $totalVideos = $videoData['total']; // Get poll data $pollData = $this->_getPolls($params, $group->id); $polls = $pollData['data']; $totalPolls = $pollData['total']; $tmpl = new CTemplate(); $isMine = ($my->id == $group->ownerid); $isSuperAdmin = COwnerHelper::isCommunityAdmin(); if ($group->approvals == '1' && !$isMine && !$isMember && !CFactory::getUser()->authorise('community.groupeditstate', 'com_community') && !CFactory::getUser()->authorise('community.groupedit', 'com_community') && !CFactory::getUser()->authorise('community.groupdelete', 'com_community')) { $this->addWarning(Text::_('COM_COMMUNITY_GROUPS_PRIVATE_NOTICE')); } $eventsModel = CFactory::getModel('Events'); $tmpEvents = $eventsModel->getGroupEvents($group->id, $params->get('grouprecentevents', GROUP_EVENT_RECENT_LIMIT)); $totalEvents = $eventsModel->getTotalGroupEvents($group->id); $events = array(); foreach ($tmpEvents as $event) { $table = Table::getInstance('Event', 'CTable'); $table->bind($event); $events[] = $table; } $allowCreateEvent = CGroupHelper::allowCreateEvent($my->id, $group->id); if ($group->approvals == '0' || $isMine || ($isMember && !$isBanned) || $isSuperAdmin) { // Set feed url $feedLink = CRoute::_('index.php?option=com_community&view=groups&task=viewbulletins&groupid=' . $group->id . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_BULLETIN_FEEDS') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); $feedLink = CRoute::_('index.php?option=com_community&view=groups&task=viewdiscussions&groupid=' . $group->id . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_DISCUSSION_FEEDS') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); $feedLink = CRoute::_('index.php?option=com_community&view=photos&groupid=' . $group->id . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_GROUP_PHOTOS_FEEDS') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); $feedLink = CRoute::_('index.php?option=com_community&view=videos&groupid=' . $group->id . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_GROUP_VIDEOS_FEEDS') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); $feedLink = CRoute::_('index.php?option=com_community&view=events&groupid=' . $group->id . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_GROUP_EVENTS_FEEDS') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); } // Upgrade wall to stream @since 2.5 if (!$params->get('stream', FALSE)) { $group->upgradeWallToStream(); } $group->getAvatar(); $group->defaultAvatar = empty($group->avatar); // Find avatar album. $album = Table::getInstance('Album', 'CTable'); $albumId = $album->isAvatarAlbumExists($group->id, 'group'); $group->avatarAlbum = $albumId ? $albumId : false; // Check if default cover is used. $group->defaultCover = empty($group->cover) ? true : false; // Cover position. $group->coverPostion = $params->get('coverPosition', ''); if ( strpos( $group->coverPostion, '%' ) === false ) $group->coverPostion = 0; // Find cover album and photo. $group->coverAlbum = false; $group->coverPhoto = false; $album = Table::getInstance('Album', 'CTable'); $albumId = $album->isCoverExist('group', $group->id); if ($albumId) { $album->load($albumId); $group->coverAlbum = $albumId; $group->coverPhoto = $album->photoid; } // Add custom stream $activities = new CActivities(); $streamHTML = $activities->getOlderStream(1000000000, 'active-group', $group->id); $totalStream = $activityModel->getTotalActivities(array("`groupid` = '{$group->id}'")); $creators = array(); $creators[] = CUserStatusCreator::getMessageInstance(); if (( ($isAdmin || $isSuperAdmin) && $params->get('photopermission') == 1) || (($isMember || $isSuperAdmin) && $params->get('photopermission') == 2) || $isSuperAdmin) $creators[] = CUserStatusCreator::getPhotoInstance(); if (( ($isAdmin || $isSuperAdmin) && $params->get('videopermission') == 1) || (($isMember || $isSuperAdmin) && $params->get('videopermission') == 2) || $isSuperAdmin) $creators[] = CUserStatusCreator::getVideoInstance(); if (($allowCreateEvent || $isSuperAdmin ) && $config->get('group_events') && $config->get('enableevents') && ($config->get('createevents') ) || $isSuperAdmin) $creators[] = CUserStatusCreator::getEventInstance(); $status = new CUserStatus($group->id, 'groups', $creators); // Get Event Admins $groupAdmins = $group->getAdmins(12, CC_RANDOMIZE); $adminsInArray = array(); // Attach avatar of the admin for ($i = 0; ($i < count($groupAdmins)); $i++) { $row = $groupAdmins[$i]; $admin = CFactory::getUser($row->id); array_push($adminsInArray, '<a href="' . CUrlHelper::userLink($admin->id) . '">' . $admin->getDisplayName() . '</a>'); } $totalPhotos = 0; $allAlbumData = $this->_cachedCall('_getAlbums', array($params, $group->id, true), $group->id, array(COMMUNITY_CACHE_TAG_GROUPS_DETAIL)); foreach ($allAlbumData['data'] as $album) { if (!in_array($album->type, array('group.avatar', 'groupgroup.Cover'))) { $albumParams = new CParameter($album->params); $totalPhotos = $totalPhotos + $albumParams->get('count'); } } $adminsList = ltrim(implode(', ', $adminsInArray), ','); $showMoreActivity = ($totalStream <= $config->get('maxactivities')) ? false : true; $groupsModel = CFactory::getModel('groups'); $bannedMembers = $groupsModel->getBannedMembers($group->id); /* Opengraph */ CHeadHelper::addOpengraph('og:image', $group->getAvatar('avatar'), true); CHeadHelper::addOpengraph('og:image', $group->getCover(), true); $featured = new CFeatured(FEATURED_GROUPS); $featuredList = $featured->getItemIds(); echo $tmpl->setMetaTags('group', $group) ->set('streamHTML', $streamHTML) ->set('showMoreActivity', $showMoreActivity) ->set('status', $status) ->set('events', $events) ->set('totalEvents', $totalEvents) ->set('showEvents', $config->get('group_events') && $config->get('enableevents') && $params->get('eventpermission',1) >= 1) ->set('showPhotos', ( $params->get('photopermission') != -1 ) && $config->get('enablephotos') && $config->get('groupphotos')) ->set('showVideos', ( $params->get('videopermission') != -1 ) && $config->get('enablevideos') && $config->get('groupvideos')) ->set('showPolls', ( $params->get('pollspermission') != -1 ) && $config->get('enablepolls') && $config->get('group_polls')) ->set('eventPermission', $params->get('eventpermission')) ->set('photoPermission', $params->get('photopermission')) ->set('videoPermission', $params->get('videopermission')) ->set('pollspermission', $params->get('pollspermission')) ->set('allowCreateEvent', $allowCreateEvent) ->set('videos', $videos) ->set('totalVideos', $totalVideos) ->set('albums', $albums) ->set('editGroup', $editGroup) ->set('waitingApproval', $waitingApproval) ->set('config', $config) ->set('isMine', $isMine) ->set('isAdmin', $isAdmin) ->set('isSuperAdmin', $isSuperAdmin) ->set('isMember', $isMember) ->set('isInvited', $isInvited) ->set('friendsCount', $friendsCount) ->set('join', $join) ->set('unapproved', $unapproved) ->set('membersCount', $membersCount) ->set('group', $group) ->set('totalBulletin', $totalBulletin) ->set('totalDiscussion', $totalDiscussion) ->set('totalVideos', $totalVideos) ->set('members', $approvedMembers) ->set('bulletins', $bulletins) ->set('discussions', $discussions) ->set('discussionsHTML', $discussionsHTML) ->set('bulletinsHTML', $bulletinsHTML) ->set('isBanned', $isBanned) ->set('totalBannedMembers', count($bannedMembers) ) ->set('isPrivate', $group->approvals) ->set('limit', $limit) ->set('adminsList', $adminsList) ->set('isFile', $fileModel->isfileAvailable($group->id, 'group') ) /* Set notification counts */ ->set('alertNewDiscussion', $my->count('group_discussion_' . $group->id) != $totalDiscussion) ->set('alertNewBulletin', $my->count('group_bulletin_' . $group->id) != $totalBulletin) ->set('alertNewStream', $my->count('group_activity_' . $group->id) != $totalStream) ->set('isUserLiked', $isUserLiked) ->set('totalLikes', $totalLikes) ->set('isLikeEnabled', $isLikeEnabled) ->set('totalPhotos', $totalPhotos) ->set('totalAlbums', $totalAlbums) ->set('totalPolls', $totalPolls) ->set('profile', $my) ->set('featuredList', $featuredList) ->fetch('groups/single'); // Update stream count cache, can only set this after we've set the alert aove if($my->id){ $my->setCount('group_activity_' . $group->id, $totalStream); } } public function uploadAvatar($data) { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_AVATAR_UPLOAD')); $this->_addGroupInPathway($data->id); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_AVATAR_UPLOAD')); $this->showSubmenu(); $config = CFactory::getConfig(); $uploadLimit = (double) $config->get('maxuploadsize'); $uploadLimit .= 'MB'; $group = Table::getInstance('Group', 'CTable'); $group->load($data->id); // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } $app = CAppPlugins::getInstance(); $appFields = $app->triggerEvent('onFormDisplay', array('jsform-groups-uploadavatar')); $beforeFormDisplay = CFormElement::renderElements($appFields, 'before'); $afterFormDisplay = CFormElement::renderElements($appFields, 'after'); $tmpl = new CTemplate(); echo $tmpl->set('beforeFormDisplay', $beforeFormDisplay) ->set('afterFormDisplay', $afterFormDisplay) ->set('groupId', $data->id) ->set('avatar', $group->getAvatar('avatar')) ->set('thumbnail', $group->getAvatar()) ->set('uploadLimit', $uploadLimit) ->fetch('groups.uploadavatar'); } /** * Method to display groups that belongs to a user. * * @access public */ public function mygroups($userid) { $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $document = Factory::getDocument(); $user = CFactory::getUser($userid); $my = CFactory::getUser(); if(!$user->_userid){ $mainframe->redirect(CRoute::_('index.php?option=com_community&view=groups')); } // Respect profile privacy setting. if (!CPrivacy::isAccessAllowed($my->id, $user->id, 'user', 'privacyGroupsView')) { //echo Text::_('COM_COMMUNITY_ACCESS_FORBIDDEN'); echo "<div class=\"cEmpty cAlert\">" . Text::_('COM_COMMUNITY_PRIVACY_ERROR_MSG') . "</div>"; return; } $title = ($my->id == $user->id) ? Text::_('COM_COMMUNITY_GROUPS_MY_GROUPS') : Text::sprintf('COM_COMMUNITY_GROUPS_USER_TITLE', $user->getDisplayName()); /** * Opengraph */ CHeadHelper::setType('website', $title); // Add the miniheader if necessary if ($my->id != $user->id) { $this->attachMiniHeaderUser($user->id); } // Load required filterbar library that will be used to display the filtering and sorting. $this->addPathway(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups')); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_MY_GROUPS'), ''); $uri = Uri::base(); //@todo: make mygroups page to contain several admin tools for owner? $config = CFactory::getConfig(); $defaultSortOrder = $config->get('group_default_sort_order', 'latest'); $groupsModel = CFactory::getModel('groups'); $avatarModel = CFactory::getModel('avatar'); $wallsModel = CFactory::getModel('wall'); $activityModel = CFactory::getModel('activities'); $discussionModel = CFactory::getModel('discussions'); $sorted = $jinput->get->get('sort', $defaultSortOrder, 'STRING'); // @todo: proper check with CError::assertion // Make sure the sort value is not other than the array keys $groups = $groupsModel->getGroups($user->id, $sorted); $pagination = $groupsModel->getPagination(count($groups)); require_once( JPATH_COMPONENT . '/libraries/activities.php'); $act = new CActivityStream(); // Attach additional properties that the group might have $groupIds = ''; if ($groups) { foreach ($groups as $group) { $groupIds = (empty($groupIds)) ? $group->id : $groupIds . ',' . $group->id; } } // Get the template for the group lists $groupsHTML = $this->_getGroupsHTML($groups, $pagination); $feedLink = CRoute::_('index.php?option=com_community&view=groups&task=mygroups&userid=' . $userid . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_LATEST_MY_GROUPS_FEED') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); $feedLink = CRoute::_('index.php?option=com_community&view=groups&task=viewmylatestdiscussions&groupids=' . $groupIds . '&userid=' . $userid . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_LATEST_MY_GROUP_DISCUSSIONS_FEED') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); $sortItems = array( 'latest' => Text::_('COM_COMMUNITY_GROUPS_SORT_LATEST'), 'oldest' => Text::_('COM_COMMUNITY_GROUPS_SORT_OLDEST'), 'alphabetical' => Text::_('COM_COMMUNITY_SORT_ALPHABETICAL'), 'mostactive' => Text::_('COM_COMMUNITY_GROUPS_SORT_MOST_ACTIVE') ); if(CFactory::getConfig()->get('show_featured')){ $sortItems['featured'] = Text::_('COM_COMMUNITY_GROUP_SORT_FEATURED'); } $tmpl = new CTemplate(); echo $tmpl->set('groupsHTML', $groupsHTML) ->set('pagination', $pagination) ->set('isMyGroups', true) ->set('my', $my) ->set('user', $user) ->set('title', $title) ->set('sortings', CFilterBar::getHTML(CRoute::getURI(), $sortItems, $defaultSortOrder)) ->set('discussionsHTML', $this->modUserDiscussion($user->id)) ->set('submenu', $this->showSubmenu(false)) ->fetch('groups/base'); } public function myinvites() { $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $userId = $jinput->get('userid', '', 'INT'); $config = CFactory::getConfig(); // Load required filterbar library that will be used to display the filtering and sorting. $document = Factory::getDocument(); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups')); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_PENDING_INVITES'), ''); /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_PENDING_INVITES')); $feedLink = CRoute::_('index.php?option=com_community&view=groups&task=mygroups&userid=' . $userId . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_PENDING_INVITATIONS_FEED') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); $my = CFactory::getUser(); $model = CFactory::getModel('groups'); $discussionModel = CFactory::getModel('discussions'); $sorted = $jinput->get->get('sort', 'latest', 'STRING'); $rows = $model->getGroupInvites($my->id); $pagination = $model->getPagination(count($rows)); $groups = array(); $ids = ''; if ($rows) { foreach ($rows as $row) { $table = Table::getInstance('Group', 'CTable'); $table->load($row->groupid); $table->description = CStringHelper::clean(JHTML::_('string.truncate', $table->description, $config->get('tips_desc_length'))); $groups[] = $table; $ids = (empty($ids)) ? $table->id : $ids . ',' . $table->id; } } $sortItems = array( 'latest' => Text::_('COM_COMMUNITY_GROUPS_SORT_LATEST'), 'oldest' => Text::_('COM_COMMUNITY_GROUPS_SORT_OLDEST'), 'alphabetical' => Text::_('COM_COMMUNITY_SORT_ALPHABETICAL'), 'mostactive' => Text::_('COM_COMMUNITY_GROUPS_SORT_MOST_ACTIVE')); $defaultSortOrder = $config->get('group_default_sort_order', 'latest'); $tmpl = new CTemplate(); echo $tmpl->set('groups', $groups) ->set('showFeatured', $config->get('show_featured')) ->set('pagination', $pagination) ->set('count', $pagination->total) ->set('my', $my) ->set('sortings', CFilterBar::getHTML(CRoute::getURI(), $sortItems, $defaultSortOrder)) ->set('submenu', $this->showSubmenu(false)) ->fetch('groups.myinvites'); } /** * @since 2.4 */ public function modPublicDiscussion($categoryId = null) { $groupsModel = CFactory::getModel('groups'); $discussionModel = CFactory::getModel('discussions'); // getting group's latest discussion activities. $templateParams = CTemplate::getTemplateParams(); $discussions = $groupsModel->getGroupLatestDiscussion($categoryId, '', $templateParams->get('sidebarTotalDiscussions')); return $this->_getSidebarDiscussions($discussions); } /** * @since 2.4 */ public function modUserDiscussion($userid) { $user = CFactory::getUser($userid); $groupsModel = CFactory::getModel('groups'); $discussionModel = CFactory::getModel('discussions'); $groupIds = $user->_groups; // getting group's latest discussion activities. $templateParams = CTemplate::getTemplateParams(); $discussions = $groupsModel->getGroupLatestDiscussion('', $groupIds, $templateParams->get('sidebarTotalDiscussions')); return $this->_getSidebarDiscussions($discussions); } private function _getSidebarDiscussions($discussions) { if (!empty($discussions)) { $discussionModel = CFactory::getModel('discussions'); for ($i = 0; $i < count($discussions); $i++) { $row = $discussions[$i]; $creator = CFactory::getUser($row->creator); $commentorName = ''; /** * need to retrieve last replier's id * if there is lastreplied (date) for corresponding discussion */ if (!empty($discussions[$i]->lastreplied)) { $lastReplier = $discussionModel->getLastReplier($discussions[$i]->id); // Add is_null check to avoid earlier wall post being removed but lastreplied is with valid date if (!is_null($lastReplier)) { $discussions[$i]->lastReplier = $lastReplier->post_by; } } if ($creator->block) { $row->title = Text::_('COM_COMMUNITY_CENSORED'); } /** * Modified by Adam Lim on 14 July 2011 * Check for lastReplier and get lastReplier's name to display * Note: Check for lastReplier and in mygroups function already checked for lastreplied (date) */ if (!empty($row->lastReplier)) { $commentor = CFactory::getUser($row->lastReplier); $commentorName = $commentor->getDisplayName(); } $row->creatorName = $creator->getDisplayName(); $row->commentorName = $commentorName; } $tmpl = new CTemplate(); return $tmpl->set('discussions', $discussions) ->fetch('groups.module.discussions'); } return ''; } public function viewbulletin() { $document = Factory::getDocument(); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; // Load necessary libraries $groupsModel = CFactory::getModel('groups'); $bulletin = Table::getInstance('Bulletin', 'CTable'); $group = Table::getInstance('Group', 'CTable'); $my = CFactory::getUser(); $bulletinId = $jinput->get('bulletinid', '', 'INT'); $bulletin->load($bulletinId); $group->load($bulletin->groupid); // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } if ($group->approvals == 1 && !($group->isMember($my->id) ) && !COwnerHelper::isCommunityAdmin()) { $this->noAccess(Text::_('COM_COMMUNITY_GROUPS_PRIVATE_NOTICE')); return; } /** * Opengraph */ CHeadHelper::setType('website', $bulletin->title); // Santinise output $bulletin->title = strip_tags($bulletin->title); $bulletin->title = CStringHelper::escape($bulletin->title); // Add pathways $this->_addGroupInPathway($group->id); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_BULLETIN'), CRoute::_('index.php?option=com_community&view=groups&task=viewbulletins&groupid=' . $group->id)); $this->addPathway(Text::sprintf('COM_COMMUNITY_GROUPS_BULLETIN_PATHWAY_TITLE', $bulletin->title)); if ($groupsModel->isAdmin($my->id, $group->id) || COwnerHelper::isCommunityAdmin()) { $this->addSubmenuItem('', Text::_('COM_COMMUNITY_DELETE'), "joms.api.announcementRemove('" . $bulletin->groupid . "', '" . $bulletin->id . "');", true); $this->addSubmenuItem('', Text::_('COM_COMMUNITY_EDIT'), "joms.api.announcementEdit('" . $bulletin->groupid . "', '" . $bulletin->id . "');", true); } $config = CFactory::getConfig(); $editor = new CEditor($config->get('htmleditor', 'none')); $appsLib = CAppPlugins::getInstance(); $appsLib->loadApplications(); $args[] = $bulletin; $editorMessage = $bulletin->message; // Format the bulletins $appsLib->triggerEvent('onBulletinDisplay', $args); $bookmarks = new CBookmarks(CRoute::getExternalURL('index.php?option=com_community&view=groups&task=viewbulletin&groupid=' . $group->id . '&bulletinid=' . $bulletin->id)); $bookmarksHTML = $bookmarks->getHTML(); $creator = CFactory::getUser($bulletin->created_by); //filesharing $filesharingHTML = ''; $permission = CGroupHelper::getMediaPermission($bulletin->groupid); if ($config->get('groupbulletinfilesharing') && $permission->params->get('groupannouncementfilesharing')) { $file = new CFilesLibrary(); $filesharingHTML = $file->getFileHTML('bulletin', $bulletin->id); } $params = $bulletin->getParams(); $gparams = $group->getParams(); $tmpl = new CTemplate(); echo $tmpl->set('bookmarksHTML', $bookmarksHTML) ->set('creator', $creator) ->set('bulletin', $bulletin) ->set('editor', $editor) ->set('config', $config) ->set('editorMessage', $editorMessage) ->set('filesharingHTML', $filesharingHTML) ->set('params', $params) ->set('gparams', $gparams) ->set('group', $group) ->set('canCreate', $my->authorise('community.create', 'groups.discussions.' . $group->id)) ->set('submenu', $this->showSubmenu(false)) ->fetch('groups.viewbulletin'); } /** * Display a list of bulletins from the specific group * */ public function viewbulletins() { $document = Factory::getDocument(); $jinput = Factory::getApplication()->input; $id = $jinput->getInt('groupid'); $my = CFactory::getUser(); // Load the group $group = Table::getInstance('Group', 'CTable'); $group->load($id); $this->_addGroupInPathway($group->id); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_BULLETIN')); if ($group->id == 0) { echo Text::_('COM_COMMUNITY_GROUPS_ID_NOITEM'); return; } // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } //display notice if the user is not a member of the group if ($group->approvals == 1 && !($group->isMember($my->id) ) && !COwnerHelper::isCommunityAdmin()) { $this->noAccess(Text::_('COM_COMMUNITY_GROUPS_PRIVATE_NOTICE')); return; } /** * Opengraph */ CHeadHelper::setType('website', Text::sprintf('COM_COMMUNITY_GROUPS_VIEW_ALL_BULLETINS_TITLE', $group->name)); // Load submenu //$this->showSubMenu(); $model = CFactory::getModel('bulletins'); $bulletins = $model->getBulletins($group->id); // Set feed url $feedLink = CRoute::_('index.php?option=com_community&view=groups&task=viewbulletins&groupid=' . $group->id . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_BULLETIN_FEEDS') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); // Get the creator of the bulletins for ($i = 0; $i < count($bulletins); $i++) { $row = $bulletins[$i]; $row->creator = CFactory::getUser($row->created_by); } // Only trigger the bulletins if there is really a need to. if (!empty($bulletins) && isset($bulletins)) { $appsLib = CAppPlugins::getInstance(); $appsLib->loadApplications(); // Format the bulletins // the bulletins need to be an array or reference to work around // PHP 5.3 pass by value $args = array(); foreach ($bulletins as &$b) { $args[] = $b; } $appsLib->triggerEvent('onBulletinDisplay', $args); } // Process bulletins HTML output $tmpl = new CTemplate(); $bulletinsHTML = $tmpl->set('bulletins', $bulletins) ->set('groupId', $group->id) ->set('isAdmin',$group->isAdmin($my->id)) ->fetch('groups.bulletinlist'); unset($tmpl); $tmpl = new CTemplate(); echo $tmpl->set('group', $group) ->set('bulletinsHTML', $bulletinsHTML) ->set('pagination', $model->getPagination()) ->fetch('groups.viewbulletins'); } public function banlist($data) { $this->viewmembers($data); } /** * View method to display members of the groups * * @access public * @param string Group Id * @returns object An object of the specific group */ public function viewmembers($data) { $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $groupsModel = CFactory::getModel('groups'); $friendsModel = CFactory::getModel('friends'); $userModel = CFactory::getModel('user'); $my = CFactory::getUser(); $config = CFactory::getConfig(); $type = $jinput->get->get('approve', '', 'NONE'); $group = Table::getInstance('Group', 'CTable'); $list = $jinput->get->get('list', '', 'NONE'); if (!$group->load($data->id)) { echo CSystemHelper::showErrorPage(); return; } // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } /** * Opengraph */ CHeadHelper::setType('website', Text::sprintf('COM_COMMUNITY_GROUPS_MEMBERS_TITLE', $group->name)); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups')); $this->addPathway($group->name, CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group->id)); $this->addPathway(Text::_('COM_COMMUNITY_MEMBERS')); $isSuperAdmin = COwnerHelper::isCommunityAdmin(); $isAdmin = $groupsModel->isAdmin($my->id, $group->id); $isMember = $group->isMember($my->id); $isMine = ($my->id == $group->ownerid); $isBanned = $group->isBanned($my->id); if ($group->approvals == '1' && !$isMine && !$isMember && !$isSuperAdmin) { $this->noAccess(Text::_('COM_COMMUNITY_GROUPS_PRIVATE_NOTICE')); return; } switch ($list) { case COMMUNITY_GROUP_ADMIN : $members = $groupsModel->getAdmins($data->id); $title = Text::_('COM_COMMUNITY_GROUP_MEMBERS'); break; case COMMUNITY_GROUP_BANNED : $members = $groupsModel->getBannedMembers($data->id); $title = Text::_('COM_COMMUNITY_GROUPS_BANNED_MEMBERS'); break; default : $title = Text::_('COM_COMMUNITY_GROUP_MEMBERS'); if (!empty($type) && ( $type == '1' )) { $members = $groupsModel->getMembers($data->id, 0, false); } else { $members = $groupsModel->getMembers($data->id, 0, true, false, SHOW_GROUP_ADMIN); } } if($type == 1){ $title = TEXT::_('COM_COMMUNITY_GROUPS_MEMBERS_PENDING_APPROVAL_TITLE'); } // Attach avatar of the member // Pre-load multiple users at once $userids = array(); foreach ($members as $uid) { $userids[] = $uid->id; } CFactory::loadUsers($userids); $membersList = array(); foreach ($members as $member) { $user = CFactory::getUser($member->id); $user->friendsCount = $user->getFriendCount(); $user->approved = $member->approved; $user->isMe = ( $my->id == $member->id ) ? true : false; $user->isAdmin = $groupsModel->isAdmin($user->id, $group->id); $user->isOwner = ( $member->id == $group->ownerid ) ? true : false; // Check user's permission $groupmember = Table::getInstance('GroupMembers', 'CTable'); $keys['groupId'] = $group->id; $keys['memberId'] = $member->id; $groupmember->load($keys); $user->isBanned = ( $groupmember->permissions == COMMUNITY_GROUP_BANNED ) ? true : false; $membersList[] = $user; } // Featured $featured = new CFeatured(FEATURED_USERS); $featuredList = $featured->getItemIds(); $pagination = $groupsModel->getPagination(); $tmpl = new CTemplate(); echo $tmpl->set('members', $membersList) ->set('list', $list) ->set('type', $type) ->set('title', $title) ->set('isMine', $groupsModel->isCreator($my->id, $group->id)) ->set('isAdmin', $isAdmin) ->set('isMember', $isMember) ->set('isSuperAdmin', $isSuperAdmin) ->set('pagination', $pagination) ->set('groupid', $group->id) ->set('my', $my) ->set('config', $config) ->set('group', $group) ->set('submenu', $this->showSubmenu(false)) ->set('featuredList', $featuredList) ->fetch('groups.viewmembers'); } /** * View method to display discussions from a group * * @access public */ public function viewdiscussions() { $document = Factory::getDocument(); $jinput = Factory::getApplication()->input; $id = $jinput->getInt('groupid'); $my = CFactory::getUser(); $model = CFactory::getModel('discussions'); // Load the group $group = Table::getInstance('Group', 'CTable'); $group->load($id); $this->_addGroupInPathway($group->id); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_DISCUSSION_TITLE')); $params = $group->getParams(); //check if group is valid if ($group->id == 0) { echo Text::_('COM_COMMUNITY_GROUPS_ID_NOITEM'); return; } // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } //display notice if the user is not a member of the group if ($group->approvals == 1 && !($group->isMember($my->id) ) && !CFactory::getUser()->authorise('community.groupeditstate', 'com_community') && !CFactory::getUser()->authorise('community.groupedit', 'com_community') && !CFactory::getUser()->authorise('community.groupdelete', 'com_community')) { $this->noAccess(Text::_('COM_COMMUNITY_GROUPS_PRIVATE_NOTICE')); return; } /** * Opengraph */ CHeadHelper::setType('website', Text::sprintf('COM_COMMUNITY_GROUPS_VIEW_ALL_DISCUSSIONS_TITLE', $group->name)); $feedLink = CRoute::_('index.php?option=com_community&view=groups&task=viewdiscussions&groupid=' . $group->id . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_SUBSCRIBE_TO_DISCUSSION_FEEDS') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); // Load submenu //$this->showSubMenu(); $discussions = $model->getDiscussionTopics($group->id, 0, 0, DISCUSSION_ORDER_BYLASTACTIVITY); for ($i = 0; $i < count($discussions); $i++) { $row = $discussions[$i]; $row->user = CFactory::getUser($row->creator); $row->lastreplyuser = CFactory::getUser($row->lastmessageby); if (isset($row->lastreplyuser->block) && $row->lastreplyuser->block == 1) { $row->title = $row->lastmessage = Text::_('COM_COMMUNITY_CENSORED'); } } // Process discussions HTML output $tmpl = new CTemplate(); $my = CFactory::getUser(); $discussionsHTML = $tmpl->set('discussions', $discussions) ->set('groupId', $group->id) ->set('canCreate', $my->authorise('community.create', 'groups.discussions.' . $group->id)) ->fetch('groups.discussionlist'); unset($tmpl); $tmpl = new CTemplate(); echo $tmpl->set('group', $group) ->set('discussions', $discussions) ->set('discussionsHTML', $discussionsHTML) ->set('pagination', $model->getPagination()) ->fetch('groups.viewdiscussions'); } /* * @since 2.4 */ public function modRelatedDiscussion($keywords = null, $exclude = null) { $discussModel = CFactory::getModel('discussions'); $relatedDiscussions = $discussModel->getRelatedDiscussion($keywords, $exclude); return $this->_getSidebarRelatedDiscussions($relatedDiscussions); } /* * @since 2.4 */ private function _getSidebarRelatedDiscussions($discussions) { if (!empty($discussions)) { $tmpl = new CTemplate(); return $tmpl->set('discussions', $discussions) ->fetch('groups.module.relateddiscussion'); } return ''; } /** * View method to display specific discussion from a group * @since 2.4 * @access public * @param Object Data object passed from controller */ public function viewdiscussion() { $mainframe = Factory::getApplication(); $document = Factory::getDocument(); $config = CFactory::getConfig(); CWindow::load(); $jinput = Factory::getApplication()->input; $my = CFactory::getUser(); $groupId = $jinput->get('groupid', 0, 'INT'); $topicId = $jinput->get('topicid', 0, 'INT'); // Load necessary library and objects $groupModel = CFactory::getModel('groups'); $discussion = Table::getInstance('Discussion', 'CTable'); $discussion->load($topicId); if ($discussion->groupid) $groupId = $discussion->groupid; $group = Table::getInstance('Group', 'CTable'); $group->load($groupId); $isBanned = $group->isBanned($my->id); //check if discussion does not exist if(!$discussion->id){ if($groupId){ //redirect to discussion page without group id to avoid miniheader to be displayed $mainframe->redirect('index.php?option=com_community&view=groups&task=viewdiscussion&topicid='.$topicId); } $tmpl = new CTemplate(); Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_GROUP_DISCUSSION_NOT_FOUND'), 'Error'); echo $tmpl->fetch('groups/missingdiscussion'); return; } $document->addCustomTag('<link rel="image_src" href="' . $group->getThumbAvatar() . '" />'); // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } $feedLink = CRoute::_('index.php?option=com_community&view=groups&task=viewdiscussion&topicid=' . $topicId . '&format=feed'); $feed = '<link rel="alternate" type="application/rss+xml" title="' . Text::_('COM_COMMUNITY_GROUPS_LATEST_FEED') . '" href="' . $feedLink . '"/>'; $document->addCustomTag($feed); if ($group->approvals == 1 && !($group->isMember($my->id) ) && !CFactory::getUser()->authorise('community.groupeditstate', 'com_community') && !CFactory::getUser()->authorise('community.groupedit', 'com_community') && !CFactory::getUser()->authorise('community.groupdelete', 'com_community')) { $this->noAccess(Text::_('COM_COMMUNITY_GROUPS_PRIVATE_NOTICE')); return; } // Execute discussion onDisplay filter $appsLib = CAppPlugins::getInstance(); $appsLib->loadApplications(); $args = array(); $args[] = $discussion; $appsLib->triggerEvent('onDiscussionDisplay', $args); // Get the discussion creator info $creator = CFactory::getUser($discussion->creator); // Format the date accordingly. //$discussion->created = CTimeHelper::getDate( $discussion->created ); $dayinterval = ACTIVITY_INTERVAL_DAY; $timeFormat = $config->get('activitiestimeformat'); $dayFormat = $config->get('activitiesdayformat'); if ($config->get('activitydateformat') == COMMUNITY_DATE_FIXED) { $discussion->created = CTimeHelper::getDate($discussion->created)->format(Text::_('DATE_FORMAT_LC2'), true); } else { $discussion->created = CTimeHelper::timeLapse(CTimeHelper::getDate($discussion->created)); } if ($creator->block) { $discussion->title = $discussion->message = Text::_('COM_COMMUNITY_CENSORED'); } /** * Opengraph */ CHeadHelper::setType('website', Text::sprintf('COM_COMMUNITY_GROUPS_DISCUSSION_TITTLE', $discussion->title),$discussion->message); // Add pathways $this->_addGroupInPathway($group->id); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_DISCUSSION_TITLE'), CRoute::_('index.php?option=com_community&view=groups&task=viewdiscussions&groupid=' . $group->id)); $this->addPathway(Text::sprintf('COM_COMMUNITY_GROUPS_DISCUSSION_TITTLE', $discussion->title)); $isGroupAdmin = $groupModel->isAdmin($my->id, $group->id); if (($my->id == $creator->id || $isGroupAdmin || COwnerHelper::isCommunityAdmin()) && CFactory::getUser()->authorise('community.postcommentcreate', 'com_community')) { $title = Text::_('COM_COMMUNITY_DELETE_DISCUSSION'); $titleLock = $discussion->lock ? Text::_('COM_COMMUNITY_UNLOCK_DISCUSSION') : Text::_('COM_COMMUNITY_LOCK_DISCUSSION'); $actionLock = $discussion->lock ? Text::_('COM_COMMUNITY_UNLOCK') : Text::_('COM_COMMUNITY_LOCK'); $this->addSubmenuItem('', $actionLock, "joms.api.discussionLock('" . $group->id . "', '" . $discussion->id . "');", SUBMENU_RIGHT); $this->addSubmenuItem('', Text::_('COM_COMMUNITY_DELETE'), "joms.api.discussionRemove('" . $group->id . "', '" . $discussion->id . "');", SUBMENU_RIGHT); $this->addSubmenuItem('index.php?option=com_community&view=groups&task=editdiscussion&groupid=' . $group->id . '&topicid=' . $discussion->id, Text::_('COM_COMMUNITY_EDIT'), '', SUBMENU_RIGHT); } else { if (CFactory::getUser()->authorise('community.postcommentdelete', 'com_community')) { $this->addSubmenuItem('', Text::_('COM_COMMUNITY_DELETE'), "joms.api.discussionRemove('" . $group->id . "', '" . $discussion->id . "');", SUBMENU_RIGHT); } if (CFactory::getUser()->authorise('community.postcommentedit', 'com_community')) { $this->addSubmenuItem('index.php?option=com_community&view=groups&task=editdiscussion&groupid=' . $group->id . '&topicid=' . $discussion->id, Text::_('COM_COMMUNITY_EDIT'), '', SUBMENU_RIGHT); } } $wallContent = CWallLibrary::getWallContents('discussions', $discussion->id, $isGroupAdmin, $config->get('stream_default_comments', 0), 0, 'wall/content', 'groups,discussion'); $wallCount = CWallLibrary::getWallCount('discussions', $discussion->id); $viewAllLink = CRoute::_('index.php?option=com_community&view=groups&task=discussapp&topicid=' . $discussion->id . '&app=walls'); $wallViewAll = ''; if ( $wallCount > $config->get('stream_default_comments', 0) ) { $wallViewAll = CWallLibrary::getViewAllLinkHTML($viewAllLink, $wallCount); } // Test if the current browser is a member of the group $isMember = $group->isMember($my->id); $waitingApproval = false; // If I have tried to join this group, but not yet approved, display a notice if ($groupModel->isWaitingAuthorization($my->id, $group->id)) { $waitingApproval = true; } $wallForm = ''; $config = CFactory::getConfig(); // Only get the wall form if user is really allowed to see it. if (!$config->get('lockgroupwalls') || ($config->get('lockgroupwalls') && ($isMember) && (!$isBanned) && !($waitingApproval) ) || COwnerHelper::isCommunityAdmin()) { $outputLock = '<div class="cAlert">' . Text::_('COM_COMMUNITY_DISCUSSION_LOCKED_NOTICE') . '</div>'; $outputUnLock = CWallLibrary::getWallInputForm($discussion->id, 'groups,ajaxSaveDiscussionWall', 'groups,ajaxRemoveReply'); $wallForm = $discussion->lock ? $outputLock : $outputUnLock; } if (empty($wallForm) && $wallForm != false) { //user must join in order to see this page $tmpl = new CTemplate(); $wallForm = $tmpl->set('groupid', $groupId) ->fetch('groups.joingroup'); $outputLock = '<div class="cAlert">' . Text::_('COM_COMMUNITY_DISCUSSION_LOCKED_NOTICE') . '</div>'; $outputUnLock = CWallLibrary::getWallInputForm($discussion->id, 'groups,ajaxSaveDiscussionWall', 'groups,ajaxRemoveReply'); $wallForm2 = '<div class="cWall-Header">' . Text::_('COM_COMMUNITY_REPLIES') . '</div>'; $wallForm2 .= $discussion->lock ? $outputLock : $outputUnLock; $wallForm = $wallForm . '<div style="display:none" class="reply-form">' . $wallForm2 . '</div>'; } $config = CFactory::getConfig(); // Get creator link $creatorLink = CRoute::_('index.php?option=com_community&view=profile&userid=' . $creator->id); // Get reporting html $report = new CReportingLibrary(); $reportHTML = $report->getReportingHTML(Text::_('COM_COMMUNITY_GROUPS_DISCUSSION_REPORT'), 'groups,reportDiscussion', array($discussion->id)); $bookmarks = new CBookmarks(CRoute::getExternalURL('index.php?option=com_community&view=groups&task=viewdiscussion&groupid=' . $group->id . '&topicid=' . $discussion->id)); $bookmarksHTML = $bookmarks->getHTML(); //filesharing $filesharingHTML = ''; $permission = CGroupHelper::getMediaPermission($groupId); if ($config->get('groupdiscussfilesharing') && $permission->params->get('groupdiscussionfilesharing')) { $file = new CFilesLibrary(); $filesharingHTML = $file->getFileHTML('discussion', $discussion->id); } $likes = new CLike(); $isUserLiked = false; $totalLikes = 0; if ($isLikeEnabled = $likes->enabled('discussion')) { $isUserLiked = $likes->userLiked('discussion', $discussion->id, $my->id); $totalLikes = $likes->getLikeCount('discussion', $discussion->id); } $tmpl = new CTemplate(); echo $tmpl->set('bookmarksHTML', $bookmarksHTML) ->set('discussion', $discussion) ->set('creator', $creator) ->set('wallContent', $wallContent) ->set('wallForm', $wallForm) ->set('wallCount', $wallCount) ->set('wallViewAll', $wallViewAll) ->set('creatorLink', $creatorLink) ->set('reportHTML', $reportHTML) ->set('filesharingHTML', $filesharingHTML) ->set('group', $group) ->set('canCreate', $my->authorise('community.create', 'groups.discussions.' . $group->id)) ->set('isTimeLapsed', $config->get('activitydateformat')) ->set('submenu', $this->showSubmenu(false)) ->set('isUserLiked', $isUserLiked) ->set('totalLikes', $totalLikes) ->set('isLikeEnabled', $isLikeEnabled) ->fetch('groups.viewdiscussion'); } /** * View method to display new discussion form * * @access public * @param Object Data object passed from controller */ public function adddiscussion(&$discussion) { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_DISCUSSION_CREATE')); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $groupId = $jinput->get('groupid', '', 'INT'); $this->_addGroupInPathway($groupId); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_DISCUSSION_CREATE')); //$this->showSubmenu(); $config = CFactory::getConfig(); $editorType = ($config->get('allowhtml') ) ? $config->get('htmleditor', 'none') : 'none'; $editor = new CEditor($editorType); $group = Table::getInstance('Group', 'CTable'); $group->load($groupId); // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } $params = $group->getParams(); $app = CAppPlugins::getInstance(); $appFields = $app->triggerEvent('onFormDisplay', array('jsform-groups-discussionform')); $beforeFormDisplay = CFormElement::renderElements($appFields, 'before'); $afterFormDisplay = CFormElement::renderElements($appFields, 'after'); $tmpl = new CTemplate(); echo $tmpl->set('beforeFormDisplay', $beforeFormDisplay) ->set('afterFormDisplay', $afterFormDisplay) ->set('config', $config) ->set('editor', $editor) ->set('group', $group) ->set('discussion', $discussion) ->set('params', $params) ->fetch('groups.adddiscussion'); } /** * View method to display new discussion form * * @access public * @param Object Data object passed from controller */ public function editdiscussion($discussion) { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_EDIT_DISCUSSION')); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $groupId = $jinput->get('groupid', '', 'INT'); $topicId = $jinput->get('topicid', '', 'INT'); $this->_addGroupInPathway($groupId); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_EDIT_DISCUSSION')); $this->showSubmenu(); $config = CFactory::getConfig(); $editorType = ($config->get('allowhtml') ) ? $config->get('htmleditor', 'none') : 'none'; $editor = new CEditor($editorType); $group = Table::getInstance('Group', 'CTable'); $group->load($groupId); // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } // Santinise output $discussion->title = strip_tags($discussion->title); $discussion->title = CStringHelper::escape($discussion->title); $app = CAppPlugins::getInstance(); $appFields = $app->triggerEvent('onFormDisplay', array('jsform-groups-discussionform')); $beforeFormDisplay = CFormElement::renderElements($appFields, 'before'); $afterFormDisplay = CFormElement::renderElements($appFields, 'after'); $params = $discussion->getParams(); $gparams = $group->getParams(); $tmpl = new CTemplate(); echo $tmpl->set('beforeFormDisplay', $beforeFormDisplay) ->set('afterFormDisplay', $afterFormDisplay) ->set('config', $config) ->set('editor', $editor) ->set('group', $group) ->set('discussion', $discussion) ->set('params', $params) ->set('gparams', $gparams) ->fetch('groups.editdiscussion'); } /** * View method to search groups * * @access public * * @returns object An object of the specific group */ public function search() { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_SEARCH_TITLE')); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $this->addPathway(Text::_('COM_COMMUNITY_GROUPS'), CRoute::_('index.php?option=com_community&view=groups')); $this->addPathway(Text::_("COM_COMMUNITY_SEARCH"), ''); $search = $jinput->get('search', '', 'STRING'); $catId = $jinput->get('catid', 0, 'INT'); $groups = ''; $pagination = null; $posted = false; $count = 0; $model = CFactory::getModel('groups'); $categories = $model->getCategories(); // Test if there are any post requests made if ((!empty($search) || !empty($catId))) { Session::checkToken('get') or jexit(Text::_('COM_COMMUNITY_INVALID_TOKEN')); $appsLib = CAppPlugins::getInstance(); $saveSuccess = $appsLib->triggerEvent('onFormSave', array('jsform-groups-search')); if (empty($saveSuccess) || !in_array(false, $saveSuccess)) { $posted = true; $groups = $model->getAllGroups($catId, null, $search); $pagination = $model->getPagination(); $count = count($groups); } } // Get the template for the group lists $groupsHTML = $this->_getGroupsHTML($groups, $pagination); $app = CAppPlugins::getInstance(); $appFields = $app->triggerEvent('onFormDisplay', array('jsform-groups-search')); $beforeFormDisplay = CFormElement::renderElements($appFields, 'before'); $afterFormDisplay = CFormElement::renderElements($appFields, 'after'); $searchLinks = parent::getAppSearchLinks('groups'); $tmpl = new CTemplate(); echo $tmpl->set('beforeFormDisplay', $beforeFormDisplay) ->set('afterFormDisplay', $afterFormDisplay) ->set('posted', $posted) ->set('groupsCount', $count) ->set('groupsHTML', $groupsHTML) ->set('search', $search) ->set('categories', $categories) ->set('catId', $catId) ->set('searchLinks', $searchLinks) ->set('submenu', $this->showSubmenu(false)) ->fetch('groups.search'); } /** * Method to display add new bulletin form * * @param $title The title of the bulletin if the adding failed * @param $message The message of the bulletin if adding failed * */ public function addNews($bulletin) { /** * Opengraph */ CHeadHelper::setType('website', Text::_('COM_COMMUNITY_GROUPS_ADD_BULLETIN')); $jinput = Factory::getApplication()->input; $this->showSubmenu(); $config = CFactory::getConfig(); $groupId = $jinput->get('groupid'); $group = Table::getInstance('Group', 'CTable'); $group->load($groupId); // @rule: Test if the group is unpublished, don't display it at all. if (!$group->published) { $this->_redirectUnpublishGroup(); return; } // Add pathways $this->_addGroupInPathway($groupId); $this->addPathway(Text::_('COM_COMMUNITY_GROUPS_BULLETIN_CREATE')); $editor = new CEditor($config->get('htmleditor', 'none')); $title = ( $bulletin ) ? $bulletin->title : ''; $message = ( $bulletin ) ? $bulletin->message : ''; $params = $group->getParams(); $tmpl = new CTemplate(); echo $tmpl->set('config', $config) ->set('title', $title) ->set('message', $message) ->set('groupid', $groupId) ->set('editor', $editor) ->set('params', $params) ->fetch('groups.addnews'); } public function _getGroupsHTML($tmpGroups, $tmpPagination = NULL) { $config = CFactory::getConfig(); $tmpl = new CTemplate(); $featured = new CFeatured(FEATURED_GROUPS); $featuredList = $featured->getItemIds(); $groups = array(); if ($tmpGroups) { foreach ($tmpGroups as $row) { $group = Table::getInstance('Group', 'CTable'); $group->bind($row); $group->updateStats(); //ensure that stats are up-to-date $group->description = CStringHelper::clean(HTMLHelper::_('string.truncate', $group->description, $config->get('tips_desc_length'))); $groups[] = $group; } unset($tmpGroups); } $groupsHTML = $tmpl->set('showFeatured', $config->get('show_featured')) ->set('featuredList', $featuredList) ->set('isCommunityAdmin', COwnerHelper::isCommunityAdmin()) ->set('groups', $groups) ->set('pagination', $tmpPagination) ->fetch('groups/list'); unset($tmpl); return $groupsHTML; } /** * Return the video list for viewGroup display */ protected function _getVideos($params, $groupId) { $result = array(); $videoModel = CFactory::getModel('videos'); $tmpVideos = $videoModel->getGroupVideos($groupId, '', $params->get('grouprecentvideos', GROUP_VIDEO_RECENT_LIMIT)); $videos = array(); if ($tmpVideos) { foreach ($tmpVideos as $videoEntry) { $video = Table::getInstance('Video', 'CTable'); $video->bind($videoEntry); $videos[] = $video; } } $totalVideos = $videoModel->total ? $videoModel->total : 0; $result['total'] = $totalVideos; $result['data'] = $videos; return $result; } /** * Return the poll list for viewGroup display */ protected function _getPolls($params, $groupId) { $result = array(); $pollModel = CFactory::getModel('polls'); $tmpPolls = $pollModel->getAllPolls(null, null, null, null, false, true, $groupId); $polls = array(); $totalPolls = 0; if ($tmpPolls) { foreach ($tmpPolls as $pollEntry) { $poll = Table::getInstance('Poll', 'CTable'); $poll->bind($pollEntry); $polls[] = $poll; $totalPolls++; } } $result['total'] = $totalPolls; $result['data'] = $polls; return $result; } /** * Return the albu list for viewGroup display */ protected function _getAlbums($params, $groupId, $ignoreRecentPhotos = false) { $result = array(); $photosModel = CFactory::getModel('photos'); if(!$ignoreRecentPhotos){ $albums = $photosModel->getGroupAlbums($groupId, true, false, $params->get('grouprecentphotos', GROUP_PHOTO_RECENT_LIMIT), false, '', array('group.avatar', 'group.Cover')); }else{ $albums = $photosModel->getGroupAlbums($groupId, false, false); } $db = Factory::getDBO(); $where = 'WHERE a.' . $db->quoteName('groupid') . ' = ' . $db->quote($groupId); $where .= ' AND a.' . $db->quoteName('type') . ' != ' . $db->quote('group.avatar'); $where .= ' AND a.' . $db->quoteName('type') . ' != ' . $db->quote('group.Cover'); $totalAlbums = $photosModel->getAlbumCount($where); $result['total'] = $totalAlbums; $result['data'] = $albums; return $result; } /** * Return the an array of HTML part of bulletings in viewGroups * and the total number of bulletin */ protected function _getDiscussionListHTML($params, $groupId) { $result = array(); $discussModel = CFactory::getModel('discussions'); $discussions = $discussModel->getDiscussionTopics($groupId, '10', 0); $totalDiscussion = $discussModel->total; // Attach avatar of the member to the discussions for ($i = 0; $i < count($discussions); $i++) { $row = $discussions[$i]; $row->user = CFactory::getUser($row->creator); // Get last replier for the discussion $row->lastreplier = $discussModel->getLastReplier($row->id); if ($row->lastreplier) { $row->lastreplier->post_by = CFactory::getUser($row->lastreplier->post_by); } if ($row->lastmessageby) { $row->lastreplyuser = CFactory::getUser($row->lastmessageby); } if ($row->user->block) { $row->title = Text::_('COM_COMMUNITY_CENSORED'); } if (isset($row->lastreplyuser->block) && $row->lastreplyuser->block == 1) { $row->lastmessage = Text::_('COM_COMMUNITY_CENSORED'); } } // Process discussions HTML output $tmpl = new CTemplate(); $my = CFactory::getUser(); $discussionsHTML = $tmpl->set('discussions', $discussions) ->set('groupId', $groupId) ->set('canCreate', $my->authorise('community.create', 'groups.discussions.' . $groupId)) ->fetch('groups.discussionlist'); unset($tmpl); $result['HTML'] = $discussionsHTML; $result['total'] = $totalDiscussion; $result['data'] = $discussions; return $result; } /** * Return the an array of HTML part of bulletings in viewGroups * and the total number of bulletin */ protected function _getBulletinListHTML($groupId) { $result = array(); $bulletinModel = CFactory::getModel('bulletins'); $bulletins = $bulletinModel->getBulletins($groupId); $totalBulletin = $bulletinModel->total; // Get the creator of the discussions for ($i = 0; $i < count($bulletins); $i++) { $row = $bulletins[$i]; $row->creator = CFactory::getUser($row->created_by); } // Only trigger the bulletins if there is really a need to. if (!empty($bulletins)) { $appsLib = CAppPlugins::getInstance(); $appsLib->loadApplications(); // Format the bulletins // the bulletins need to be an array or reference to work around // PHP 5.3 pass by value $args = array(); foreach ($bulletins as &$b) { $args[] = $b; } $appsLib->triggerEvent('onBulletinDisplay', $args); } // Process bulletins HTML output $tmpl = new CTemplate(); $bulletinsHTML = $tmpl->set('bulletins', $bulletins) ->set('groupId', $groupId) ->fetch('groups.bulletinlist'); unset($tmpl); $result['HTML'] = $bulletinsHTML; $result['total'] = $totalBulletin; $result['data'] = $bulletins; return $result; } private function _getPendingListHTML($userId) { $model = CFactory::getModel('groups'); $rows = $model->getGroupInvites($userId); $groups = array(); if ($rows) { foreach ($rows as $row) { $table = Table::getInstance('Group', 'CTable'); $table->load($row->groupid); $groups[] = $table; } } if (count($rows) > 0) { $tmpl = new CTemplate(); return $tmpl->set('groups', $groups) ->fetch('groups.pendinginvitelist'); } else { return ''; } } /** * List all the category including the children and format it */ public function getFullGroupsCategories($id = 0, $level = 0, $categoryList = array()){ $model = CFactory::getModel('groups'); $mainCategories = $model->getCategories($id); if(count($mainCategories) > 0){ foreach($mainCategories as $category){ $prefix = ''; for($i = 0; $i < $level; $i++){ $prefix = $prefix.'-'; // this will add the - in front of the category name } $category->name = $prefix.' '.Text::_($category->name); $categoryList[] = $category; $categoryList = $this->getFullGroupsCategories($category->id, $level+1, $categoryList); } } return $categoryList; } } }
| ver. 1.1 | |
.
| PHP 8.4.18 | Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ñтраницы: 0.01 |
proxy
|
phpinfo
|
ÐаÑтройка