| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/nice/components/com_community/views/groups/ |
Upload File : |
<?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;
}
}
}