/** * save notifications * * @param int $id * @param UserTable $user */ private function saveNotifications( $id, $user ) { global $_CB_framework; $row = new NotificationTable(); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $group = CBGroupJive::getGroup( $id ); $row->load( array( 'user_id' => (int) $user->get( 'id' ), 'group' => (int) $group->get( 'id' ) ) ); $returnUrl = $_CB_framework->pluginClassUrl( $this->element, false, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ); if ( ! CBGroupJive::canAccessGroup( $group, $user ) ) { cbRedirect( $returnUrl, CBTxt::T( 'Group does not exist.' ), 'error' ); } elseif ( ! $this->params->get( 'notifications', 1 ) ) { cbRedirect( $returnUrl, CBTxt::T( 'You do not have access to notifications in this group.' ), 'error' ); } elseif ( $row->get( 'id' ) && ( $user->get( 'id' ) != $row->get( 'user_id' ) ) ) { cbRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to edit this users notifications.' ), 'error' ); } elseif ( ! $isModerator ) { if ( ! CBGroupJive::canCreateGroupContent( $user, $group ) ) { cbRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to notifications in this group.' ), 'error' ); } } $row->set( 'user_id', $row->get( 'user_id', (int) $user->get( 'id' ) ) ); $row->set( 'group', $row->get( 'group', (int) $group->get( 'id' ) ) ); foreach ( $this->getInput()->subTree( 'params' ) as $k => $v ) { if ( is_array( $v ) || is_object( $v ) ) { continue; } $k = Get::clean( $k, GetterInterface::COMMAND ); if ( $k ) { if ( is_numeric( $v ) ) { $v = (int) $this->input( 'post/params.' . $k, null, GetterInterface::INT ); } else { $v = $this->input( 'post/params.' . $k, null, GetterInterface::STRING ); } $row->params()->set( $k, $v ); } } $row->set( 'params', $row->params()->asJson() ); if ( $row->getError() || ( ! $row->check() ) ) { $_CB_framework->enqueueMessage( CBTxt::T( 'GROUP_NOTIFICATIONS_FAILED_TO_SAVE', 'Notifications failed to save! Error: [error]', array( '[error]' => $row->getError() ) ), 'error' ); $this->showGroupNotifications( $id, $user ); return; } if ( $row->getError() || ( ! $row->store() ) ) { $_CB_framework->enqueueMessage( CBTxt::T( 'GROUP_NOTIFICATIONS_FAILED_TO_SAVE', 'Notifications failed to save! Error: [error]', array( '[error]' => $row->getError() ) ), 'error' ); $this->showGroupNotifications( $id, $user ); return; } cbRedirect( $returnUrl, CBTxt::T( 'Notifications saved successfully!' ) ); }
/** * render frontend videos * * @param VideoTable[] $rows * @param cbPageNav $pageNav * @param bool $searching * @param array $input * @param array $counters * @param GroupTable $group * @param UserTable $user * @param cbgjVideoPlugin $plugin * @return string */ static function showVideos( $rows, $pageNav, $searching, $input, &$counters, $group, $user, $plugin ) { global $_CB_framework, $_PLUGINS; $_CB_framework->outputCbJQuery( "$( '.gjVideoPlayer' ).mediaelementplayer();", 'media' ); $counters[] = '<span class="gjGroupVideoIcon fa-before fa-film"> ' . CBTxt::T( 'GROUP_VIDEOS_COUNT', '%%COUNT%% Video|%%COUNT%% Videos', array( '%%COUNT%%' => (int) $pageNav->total ) ) . '</span>'; initToolTip(); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $isOwner = ( $user->get( 'id' ) == $group->get( 'user_id' ) ); $userStatus = CBGroupJive::getGroupStatus( $user, $group ); $canCreate = CBGroupJive::canCreateGroupContent( $user, $group, 'video' ); $canSearch = ( $plugin->params->get( 'groups_video_search', 1 ) && ( $searching || $pageNav->total ) ); $return = null; $_PLUGINS->trigger( 'gj_onBeforeDisplayVideos', array( &$return, &$rows, $group, $user ) ); $return .= '<div class="gjGroupVideo">' . '<form action="' . $_CB_framework->pluginClassUrl( $plugin->_gjPlugin->element, true, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ) . '" method="post" name="gjGroupVideoForm" id="gjGroupVideoForm" class="gjGroupVideoForm">'; if ( $canCreate || $canSearch ) { $return .= '<div class="gjHeader gjGroupVideoHeader row">'; if ( $canCreate ) { $return .= '<div class="' . ( ! $canSearch ? 'col-sm-12' : 'col-sm-8' ) . ' text-left">' . '<button type="button" onclick="window.location.href=\'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'video', 'func' => 'new', 'group' => (int) $group->get( 'id' ) ) ) . '\';" class="gjButton gjButtonNewVideo btn btn-success"><span class="fa fa-plus-circle"></span> ' . CBTxt::T( 'New Video' ) . '</button>' . '</div>'; } if ( $canSearch ) { $return .= '<div class="' . ( ! $canCreate ? 'col-sm-offset-8 ' : null ) . 'col-sm-4 text-right">' . '<div class="input-group">' . '<span class="input-group-addon"><span class="fa fa-search"></span></span>' . $input['search'] . '</div>' . '</div>'; } $return .= '</div>'; } $return .= '<div class="gjGroupVideoRows">'; if ( $rows ) foreach ( $rows as $row ) { $rowCounters = array(); $content = null; $menu = array(); $_PLUGINS->trigger( 'gj_onDisplayVideo', array( &$row, &$rowCounters, &$content, &$menu, $group, $user ) ); $return .= '<div class="gjGroupVideoRow gjContainerBox img-thumbnail">' . '<div class="gjContainerBoxHeader">' . '<video width="640" height="360" style="width: 100%; height: 100%;" id="gjVideoPlayer' . (int) $row->get( 'id' ) . '" src="' . htmlspecialchars( $row->get( 'url' ) ) . '" type="' . htmlspecialchars( $row->mimeType() ) . '" controls="controls" preload="none" class="gjVideoPlayer"></video>' . '</div>' . '<div class="gjContainerBoxBody text-left">' . '<div class="gjContainerBoxTitle">' . '<a href="' . htmlspecialchars( $row->get( 'url' ) ) . '" target="_blank" rel="nofollow">' . htmlspecialchars( ( $row->get( 'title' ) ? $row->get( 'title' ) : $row->name() ) ) . '</a>' . '</div>' . '<div class="gjContainerBoxCounters text-muted small row">' . '<div class="gjGroupVideoPublisher gjContainerBoxCounter col-sm-6">' . CBuser::getInstance( (int) $row->get( 'user_id' ), false )->getField( 'formatname', null, 'html', 'none', 'list', 0, true ) . '</div>' . '<div class="gjContainerBoxCounter col-sm-6 text-right">' . '<span title="' . htmlspecialchars( $row->get( 'date' ) ) . '">' . cbFormatDate( $row->get( 'date' ), true, false, CBTxt::T( 'GROUP_VIDEO_DATE_FORMAT', 'M j, Y' ) ) . '</span>' . '</div>' . ( $rowCounters ? '<div class="gjContainerBoxCounter col-sm-6">' . implode( '</div><div class="gjContainerBoxCounter col-sm-6">', $rowCounters ) . '</div>' : null ) . '</div>' . ( $content ? '<div class="gjContainerBoxContent">' . $content . '</div>' : null ) . ( $row->get( 'caption' ) ? '<div class="gjContainerBoxDescription">' . cbTooltip( 1, $row->get( 'caption' ), $row->name(), 400, null, '<span class="fa fa-info-circle text-muted"></span>' ) . '</div>' : null ); if ( ( $isModerator || $isOwner || ( $userStatus >= 2 ) ) && ( $row->get( 'published' ) == -1 ) && ( $group->params()->get( 'video', 1 ) == 2 ) ) { $return .= '<div class="gjContainerBoxButton text-right">' . '<button type="button" onclick="window.location.href=\'' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'video', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '\';" class="gjButton gjButtonApprove btn btn-xs btn-success">' . CBTxt::T( 'Approve' ) . '</button>' . '</div>'; } $return .= '</div>'; if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) || $menu ) { $menuItems = '<ul class="gjVideoMenuItems dropdown-menu" style="display: block; position: relative; margin: 0;">'; if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjVideoMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'video', 'func' => 'edit', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-edit"></span> ' . CBTxt::T( 'Edit' ) . '</a></li>'; if ( ( $row->get( 'published' ) == -1 ) && ( $group->params()->get( 'video', 1 ) == 2 ) ) { if ( $isModerator || $isOwner || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjVideoMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'video', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Approve' ) . '</a></li>'; } } elseif ( $row->get( 'published' ) == 1 ) { $menuItems .= '<li class="gjVideoMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to unpublish this Video?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'video', 'func' => 'unpublish', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-times-circle"></span> ' . CBTxt::T( 'Unpublish' ) . '</a></li>'; } else { $menuItems .= '<li class="gjVideoMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'video', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Publish' ) . '</a></li>'; } } if ( $menu ) { $menuItems .= '<li class="gjVideoMenuItem">' . implode( '</li><li class="gjVideoMenuItem">', $menu ) . '</li>'; } if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjVideoMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to delete this Video?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'video', 'func' => 'delete', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-trash-o"></span> ' . CBTxt::T( 'Delete' ) . '</a></li>'; } $menuItems .= '</ul>'; $menuAttr = cbTooltip( 1, $menuItems, null, 'auto', null, null, null, 'class="btn btn-default btn-xs" data-cbtooltip-menu="true" data-cbtooltip-classes="qtip-nostyle"' ); $return .= '<div class="gjContainerBoxMenu">' . '<div class="gjVideoMenu btn-group">' . '<button type="button" ' . trim( $menuAttr ) . '><span class="fa fa-cog"></span> <span class="fa fa-caret-down"></span></button>' . '</div>' . '</div>'; } $return .= '</div>'; } else { if ( $searching ) { $return .= CBTxt::T( 'No group video search results found.' ); } else { $return .= CBTxt::T( 'This group currently has no videos.' ); } } $return .= '</div>'; if ( $plugin->params->get( 'groups_video_paging', 1 ) && ( $pageNav->total > $pageNav->limit ) ) { $return .= '<div class="gjGroupVideoPaging text-center">' . $pageNav->getListLinks() . '</div>'; } $return .= $pageNav->getLimitBox( false ) . '</form>' . '</div>'; $_PLUGINS->trigger( 'gj_onAfterDisplayVideos', array( &$return, $rows, $group, $user ) ); return $return; }
/** * prepare frontend events render * * @param string $return * @param GroupTable $group * @param string $users * @param string $invites * @param array $counters * @param array $buttons * @param array $menu * @param cbTabs $tabs * @param UserTable $user * @return array|null */ public function showEvents( &$return, &$group, &$users, &$invites, &$counters, &$buttons, &$menu, &$tabs, $user ) { global $_CB_framework, $_CB_database; CBGroupJive::getTemplate( 'events', true, true, $this->element ); $canModerate = ( CBGroupJive::isModerator( $user->get( 'id' ) ) || ( CBGroupJive::getGroupStatus( $user, $group ) >= 2 ) ); $limit = (int) $this->params->get( 'groups_events_limit', 15 ); $limitstart = $_CB_framework->getUserStateFromRequest( 'gj_group_events_limitstart{com_comprofiler}', 'gj_group_events_limitstart' ); $search = $_CB_framework->getUserStateFromRequest( 'gj_group_events_search{com_comprofiler}', 'gj_group_events_search' ); $where = null; if ( $search && $this->params->get( 'groups_events_search', 1 ) ) { $where .= "\n AND ( e." . $_CB_database->NameQuote( 'title' ) . " LIKE " . $_CB_database->Quote( '%' . $_CB_database->getEscaped( $search, true ) . '%', false ) . " OR e." . $_CB_database->NameQuote( 'event' ) . " LIKE " . $_CB_database->Quote( '%' . $_CB_database->getEscaped( $search, true ) . '%', false ) . " OR e." . $_CB_database->NameQuote( 'address' ) . " LIKE " . $_CB_database->Quote( '%' . $_CB_database->getEscaped( $search, true ) . '%', false ) . " OR e." . $_CB_database->NameQuote( 'location' ) . " LIKE " . $_CB_database->Quote( '%' . $_CB_database->getEscaped( $search, true ) . '%', false ) . " )"; } $searching = ( $where ? true : false ); $query = 'SELECT COUNT(*)' . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_plugin_events' ) . " AS e" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__comprofiler' ) . " AS cb" . ' ON cb.' . $_CB_database->NameQuote( 'id' ) . ' = e.' . $_CB_database->NameQuote( 'user_id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__users' ) . " AS j" . ' ON j.' . $_CB_database->NameQuote( 'id' ) . ' = cb.' . $_CB_database->NameQuote( 'id' ) . "\n WHERE e." . $_CB_database->NameQuote( 'group' ) . " = " . (int) $group->get( 'id' ) . "\n AND cb." . $_CB_database->NameQuote( 'approved' ) . " = 1" . "\n AND cb." . $_CB_database->NameQuote( 'confirmed' ) . " = 1" . "\n AND j." . $_CB_database->NameQuote( 'block' ) . " = 0"; if ( ! $canModerate ) { $query .= "\n AND ( e." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ) . ' OR e.' . $_CB_database->NameQuote( 'published' ) . ' = 1 )'; } $query .= $where; $_CB_database->setQuery( $query ); $total = (int) $_CB_database->loadResult(); if ( ( ! $total ) && ( ! $searching ) && ( ! CBGroupJive::canCreateGroupContent( $user, $group, 'events' ) ) ) { return null; } $pageNav = new cbPageNav( $total, $limitstart, $limit ); $pageNav->setInputNamePrefix( 'gj_group_events_' ); $guests = 'SELECT COUNT(*)' . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_plugin_events_attendance' ) . " AS ea" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__comprofiler' ) . " AS eacb" . ' ON eacb.' . $_CB_database->NameQuote( 'id' ) . ' = ea.' . $_CB_database->NameQuote( 'user_id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__users' ) . " AS eaj" . ' ON eaj.' . $_CB_database->NameQuote( 'id' ) . ' = eacb.' . $_CB_database->NameQuote( 'id' ) . "\n WHERE ea." . $_CB_database->NameQuote( 'event' ) . " = e." . $_CB_database->NameQuote( 'id' ) . "\n AND eacb." . $_CB_database->NameQuote( 'approved' ) . " = 1" . "\n AND eacb." . $_CB_database->NameQuote( 'confirmed' ) . " = 1" . "\n AND eaj." . $_CB_database->NameQuote( 'block' ) . " = 0"; $now = Application::Database()->getUtcDateTime(); $query = 'SELECT e.*' . ', TIMESTAMPDIFF( SECOND, ' . $_CB_database->Quote( $now ) . ',e.' . $_CB_database->NameQuote( 'start' ) . ' ) AS _start_ordering' . ', TIMESTAMPDIFF( SECOND, ' . $_CB_database->Quote( $now ) . ', e.' . $_CB_database->NameQuote( 'end' ) . ' ) AS _end_ordering' . ', a.' . $_CB_database->NameQuote( 'id' ) . ' AS _attending' . ', ( ' . $guests . ' ) AS _guests' . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_plugin_events' ) . " AS e" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__comprofiler' ) . " AS cb" . ' ON cb.' . $_CB_database->NameQuote( 'id' ) . ' = e.' . $_CB_database->NameQuote( 'user_id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__users' ) . " AS j" . ' ON j.' . $_CB_database->NameQuote( 'id' ) . ' = cb.' . $_CB_database->NameQuote( 'id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_plugin_events_attendance' ) . " AS a" . ' ON a.' . $_CB_database->NameQuote( 'user_id' ) . ' = ' . (int) $user->get( 'id' ) . ' AND a.' . $_CB_database->NameQuote( 'event' ) . ' = e.' . $_CB_database->NameQuote( 'id' ) . "\n WHERE e." . $_CB_database->NameQuote( 'group' ) . " = " . (int) $group->get( 'id' ) . "\n AND cb." . $_CB_database->NameQuote( 'approved' ) . " = 1" . "\n AND cb." . $_CB_database->NameQuote( 'confirmed' ) . " = 1" . "\n AND j." . $_CB_database->NameQuote( 'block' ) . " = 0"; if ( ! $canModerate ) { $query .= "\n AND ( e." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ) . ' OR e.' . $_CB_database->NameQuote( 'published' ) . ' = 1 )'; } $query .= $where . "\n ORDER BY IF( _start_ordering < 0 AND _end_ordering > 0, 1, IF( _start_ordering > 0, 2, 3 ) ), ABS( _start_ordering )"; if ( $this->params->get( 'groups_events_paging', 1 ) ) { $_CB_database->setQuery( $query, $pageNav->limitstart, $pageNav->limit ); } else { $_CB_database->setQuery( $query ); } $rows = $_CB_database->loadObjectList( null, '\CB\Plugin\GroupJiveEvents\Table\EventTable', array( $_CB_database ) ); $input = array(); $input['search'] = '<input type="text" name="gj_group_events_search" value="' . htmlspecialchars( $search ) . '" onchange="document.gjGroupEventsForm.submit();" placeholder="' . htmlspecialchars( CBTxt::T( 'Search Events...' ) ) . '" class="form-control" />'; CBGroupJiveEvents::getEvent( $rows ); CBGroupJive::preFetchUsers( $rows ); $group->set( '_events', $pageNav->total ); return array( 'id' => 'events', 'title' => CBTxt::T( 'Events' ), 'content' => HTML_groupjiveEvents::showEvents( $rows, $pageNav, $searching, $input, $counters, $group, $user, $this ) ); }
/** * save event * * @param int $id * @param UserTable $user */ private function saveEventEdit( $id, $user ) { global $_CB_framework, $_PLUGINS; $row = CBGroupJiveEvents::getEvent( (int) $id ); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $groupId = $this->input( 'group', null, GetterInterface::INT ); if ( $groupId === null ) { $group = $row->group(); } else { $group = CBGroupJive::getGroup( $groupId ); } $returnUrl = $_CB_framework->pluginClassUrl( $this->_gjPlugin->element, false, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ); if ( ! CBGroupJive::canAccessGroup( $group, $user ) ) { cbRedirect( $returnUrl, CBTxt::T( 'Group does not exist.' ), 'error' ); } elseif ( ! $isModerator ) { if ( ( ! $row->get( 'id' ) ) && ( ! CBGroupJive::canCreateGroupContent( $user, $group, 'events' ) ) ) { cbRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to schedule an event in this group.' ), 'error' ); } elseif ( $row->get( 'id' ) && ( $user->get( 'id' ) != $row->get( 'user_id' ) ) && ( CBGroupJive::getGroupStatus( $user, $group ) < 2 ) ) { cbRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to edit this event.' ), 'error' ); } } if ( $isModerator ) { $row->set( 'user_id', (int) $this->input( 'post/user_id', $row->get( 'user_id', $user->get( 'id' ) ), GetterInterface::INT ) ); } else { $row->set( 'user_id', (int) $row->get( 'user_id', $user->get( 'id' ) ) ); } $canModerate = ( CBGroupJive::getGroupStatus( $user, $group ) >= 2 ); $currentTitle = $row->get( 'title' ); $currentEvent = $row->get( 'event' ); $currentLocation = $row->get( 'location' ); $currentAddress = $row->get( 'address' ); $currentStart = $row->get( 'start', '0000-00-00 00:00:00' ); $currentEnd = $row->get( 'end', '0000-00-00 00:00:00' ); $newStart = $this->input( 'post/start', $currentStart, GetterInterface::STRING ); $newEnd = $this->input( 'post/end', $currentEnd, GetterInterface::STRING ); $row->set( 'published', ( $isModerator || $canModerate || ( $row->get( 'id' ) && ( $row->get( 'published' ) != -1 ) ) || ( $group->params()->get( 'events', 1 ) != 2 ) ? (int) $this->input( 'post/published', $row->get( 'published', 1 ), GetterInterface::INT ) : -1 ) ); $row->set( 'group', (int) $group->get( 'id' ) ); $row->set( 'title', $this->input( 'post/title', $currentTitle, GetterInterface::STRING ) ); $row->set( 'event', $this->input( 'post/event', $currentEvent, GetterInterface::HTML ) ); $row->set( 'location', $this->input( 'post/location', $currentLocation, GetterInterface::STRING ) ); $row->set( 'address', $this->input( 'post/address', $currentAddress, GetterInterface::STRING ) ); $row->set( 'start', ( $newStart ? $newStart : '0000-00-00 00:00:00' ) ); $row->set( 'end', ( $newEnd ? $newEnd : '0000-00-00 00:00:00' ) ); $row->set( 'limit', (int) $this->input( 'post/limit', $row->get( 'limit' ), GetterInterface::INT ) ); if ( ( ! $isModerator ) && $this->params->get( 'groups_events_captcha', 0 ) ) { $_PLUGINS->loadPluginGroup( 'user' ); $_PLUGINS->trigger( 'onCheckCaptchaHtmlElements', array() ); if ( $_PLUGINS->is_errors() ) { $row->setError( $_PLUGINS->getErrorMSG() ); } } $new = ( $row->get( 'id' ) ? false : true ); if ( $row->getError() || ( ! $row->check() ) ) { $_CB_framework->enqueueMessage( CBTxt::T( 'GROUP_EVENT_FAILED_TO_SAVE', 'Event failed to save! Error: [error]', array( '[error]' => $row->getError() ) ), 'error' ); $this->showEventEdit( $id, $user ); return; } if ( $row->getError() || ( ! $row->store() ) ) { $_CB_framework->enqueueMessage( CBTxt::T( 'GROUP_EVENT_FAILED_TO_SAVE', 'Event failed to save! Error: [error]', array( '[error]' => $row->getError() ) ), 'error' ); $this->showEventEdit( $id, $user ); return; } $extras = array( 'event_title' => htmlspecialchars( $row->get( 'title' ) ), 'event' => '<a href="' . $_CB_framework->pluginClassUrl( $this->_gjPlugin->element, false, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $row->get( 'group' ), 'tab' => 'grouptabevents' ) ) . '">' . htmlspecialchars( CBTxt::T( $row->get( 'title' ) ) ) . '</a>' ); if ( $new ) { if ( $row->get( 'published' ) == 1 ) { CBGroupJive::sendNotifications( 'event_new', CBTxt::T( 'New group event' ), CBTxt::T( '[user] has scheduled the event [event] in the group [group]!' ), $row->group(), (int) $row->get( 'user_id' ), null, array( $user->get( 'id' ) ), 1, $extras ); } elseif ( ( $row->get( 'published' ) == -1 ) && ( $row->group()->params()->get( 'events', 1 ) == 2 ) ) { CBGroupJive::sendNotifications( 'event_approve', CBTxt::T( 'New group event awaiting approval' ), CBTxt::T( '[user] has scheduled the event [event] in the group [group] and is awaiting approval!' ), $row->group(), (int) $row->get( 'user_id' ), null, array( $user->get( 'id' ) ), 1, $extras ); } cbRedirect( $returnUrl, CBTxt::T( 'Event scheduled successfully!' ) ); } else { if ( ( $row->get( 'published' ) == 1 ) && ( ( $row->get( 'title' ) != $currentTitle ) || ( $row->get( 'event' ) != $currentEvent ) || ( $row->get( 'location' ) != $currentLocation ) || ( $row->get( 'address' ) != $currentAddress ) || ( $row->get( 'start' ) != $currentStart ) || ( $row->get( 'end' ) != $currentEnd ) ) ) { CBGroupJive::sendNotifications( 'event_edit', CBTxt::T( 'Group event changed' ), CBTxt::T( '[user] has changed the scheduled event [event] in the group [group]!' ), $row->group(), (int) $row->get( 'user_id' ), null, array( $user->get( 'id' ) ), 1, $extras ); } cbRedirect( $returnUrl, CBTxt::T( 'Event saved successfully!' ) ); } }
/** * save wall * * @param int $id * @param UserTable $user */ private function saveWallEdit( $id, $user ) { global $_CB_framework; $row = CBGroupJiveWall::getPost( (int) $id ); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $groupId = $this->input( 'group', null, GetterInterface::INT ); if ( $groupId === null ) { $group = $row->group(); } else { $group = CBGroupJive::getGroup( $groupId ); } $returnUrl = $_CB_framework->pluginClassUrl( $this->_gjPlugin->element, false, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ); if ( ! CBGroupJive::canAccessGroup( $group, $user ) ) { cbRedirect( $returnUrl, CBTxt::T( 'Group does not exist.' ), 'error' ); } elseif ( ! $isModerator ) { if ( ( ! $row->get( 'id' ) ) && ( ! CBGroupJive::canCreateGroupContent( $user, $group, 'wall' ) ) ) { cbRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to post in this group.' ), 'error' ); } elseif ( $row->get( 'id' ) && ( $user->get( 'id' ) != $row->get( 'user_id' ) ) && ( CBGroupJive::getGroupStatus( $user, $group ) < 2 ) ) { cbRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to edit this post.' ), 'error' ); } } $replyId = (int) $this->input( 'reply', null, GetterInterface::INT ); if ( $replyId ) { $reply = CBGroupJiveWall::getPost( (int) $replyId ); if ( ! $reply->get( 'id' ) ) { cbRedirect( $returnUrl, CBTxt::T( 'Reply does not exist.' ), 'error' ); } $row->set( 'reply', (int) $reply->get( 'id' ) ); } $canModerate = ( CBGroupJive::getGroupStatus( $user, $group ) >= 2 ); if ( $isModerator ) { $row->set( 'user_id', (int) $this->input( 'post/user_id', $row->get( 'user_id', $user->get( 'id' ) ), GetterInterface::INT ) ); } else { $row->set( 'user_id', (int) $row->get( 'user_id', $user->get( 'id' ) ) ); } $row->set( 'published', ( $isModerator || $canModerate || ( $row->get( 'id' ) && ( $row->get( 'published' ) != -1 ) ) || ( $group->params()->get( 'wall', 1 ) != 2 ) ? (int) $this->input( 'post/published', $row->get( 'published', 1 ), GetterInterface::INT ) : -1 ) ); $row->set( 'group', (int) $group->get( 'id' ) ); $postLimit = ( $isModerator ? 0 : (int) $this->params->get( 'groups_wall_character_limit', 400 ) ); $post = trim( $this->input( 'post', $row->get( 'post', null, GetterInterface::HTML ), GetterInterface::HTML ) ); // Remove duplicate spaces: $post = preg_replace( '/ {2,}/i', ' ', $post ); // Remove duplicate tabs: $post = preg_replace( '/\t{2,}/i', "\t", $post ); // Remove duplicate linebreaks: $post = preg_replace( '/(\r\n|\r|\n){2,}/i', '$1', $post ); if ( $postLimit && ( cbutf8_strlen( $post ) > $postLimit ) ) { $post = cbutf8_substr( $post, 0, $postLimit ); } $row->set( 'post', $post ); $new = ( $row->get( 'id' ) ? false : true ); if ( $row->getError() || ( ! $row->check() ) ) { $_CB_framework->enqueueMessage( CBTxt::T( 'GROUP_POST_FAILED_TO_SAVE', 'Post failed to save! Error: [error]', array( '[error]' => $row->getError() ) ), 'error' ); $this->showWallEdit( $id, $user ); return; } if ( $row->getError() || ( ! $row->store() ) ) { $_CB_framework->enqueueMessage( CBTxt::T( 'GROUP_POST_FAILED_TO_SAVE', 'Post failed to save! Error: [error]', array( '[error]' => $row->getError() ) ), 'error' ); $this->showWallEdit( $id, $user ); return; } if ( $new ) { if ( $row->get( 'published' ) == 1 ) { if ( $row->reply()->get( 'id' ) ) { CBGroupJive::sendNotifications( 'wall_reply', CBTxt::T( 'New group post reply' ), CBTxt::T( '[user] has posted a reply on the wall in the group [group]!' ), $row->group(), (int) $row->get( 'user_id' ), (int) $row->reply()->get( 'user_id' ), array( $user->get( 'id' ) ) ); } else { CBGroupJive::sendNotifications( 'wall_new', CBTxt::T( 'New group post' ), CBTxt::T( '[user] has posted on the wall in the group [group]!' ), $row->group(), (int) $row->get( 'user_id' ), null, array( $user->get( 'id' ) ) ); } } elseif ( ( $row->get( 'published' ) == -1 ) && ( $row->group()->params()->get( 'wall', 1 ) == 2 ) ) { CBGroupJive::sendNotifications( 'wall_approve', CBTxt::T( 'New group post awaiting approval' ), CBTxt::T( '[user] has posted on the wall in the group [group] and is awaiting approval!' ), $row->group(), (int) $row->get( 'user_id' ), null, array( $user->get( 'id' ) ) ); } cbRedirect( $returnUrl, CBTxt::T( 'Posted successfully!' ) ); } else { cbRedirect( $returnUrl, CBTxt::T( 'Post saved successfully!' ) ); } }
/** * render frontend events * * @param EventTable[] $rows * @param cbPageNav $pageNav * @param bool $searching * @param array $input * @param array $counters * @param GroupTable $group * @param UserTable $user * @param cbgjEventsPlugin $plugin * @return string */ static function showEvents( $rows, $pageNav, $searching, $input, &$counters, $group, $user, $plugin ) { global $_CB_framework, $_PLUGINS; $_CB_framework->outputCbJQuery( "$( '.gjGroupEventDescription .cbMoreLess' ).cbmoreless();", 'cbmoreless' ); $counters[] = '<span class="gjGroupEventsIcon fa-before fa-calendar"> ' . CBTxt::T( 'GROUP_EVENTS_COUNT', '%%COUNT%% Event|%%COUNT%% Events', array( '%%COUNT%%' => (int) $pageNav->total ) ) . '</span>'; initToolTip(); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $isOwner = ( $user->get( 'id' ) == $group->get( 'user_id' ) ); $userStatus = CBGroupJive::getGroupStatus( $user, $group ); $canCreate = CBGroupJive::canCreateGroupContent( $user, $group, 'events' ); $canSearch = ( $plugin->params->get( 'groups_events_search', 1 ) && ( $searching || $pageNav->total ) ); $showAddress = $plugin->params->get( 'groups_events_address', 1 ); $return = null; $_PLUGINS->trigger( 'gj_onBeforeDisplayEvents', array( &$return, &$rows, $group, $user ) ); $return .= '<div class="gjGroupEvents">' . '<form action="' . $_CB_framework->pluginClassUrl( $plugin->_gjPlugin->element, true, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ) . '" method="post" name="gjGroupEventsForm" id="gjGroupEventsForm" class="gjGroupEventsForm">'; if ( $canCreate || $canSearch ) { $return .= '<div class="gjHeader gjGroupEventsHeader row">'; if ( $canCreate ) { $return .= '<div class="' . ( ! $canSearch ? 'col-sm-12' : 'col-sm-8' ) . ' text-left">' . '<button type="button" onclick="window.location.href=\'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'events', 'func' => 'new', 'group' => (int) $group->get( 'id' ) ) ) . '\';" class="gjButton gjButtonNewEvent btn btn-success"><span class="fa fa-plus-circle"></span> ' . CBTxt::T( 'New Event' ) . '</button>' . '</div>'; } if ( $canSearch ) { $return .= '<div class="' . ( ! $canCreate ? 'col-sm-offset-8 ' : null ) . 'col-sm-4 text-right">' . '<div class="input-group">' . '<span class="input-group-addon"><span class="fa fa-search"></span></span>' . $input['search'] . '</div>' . '</div>'; } $return .= '</div>'; } $return .= '<div class="gjGroupEventsRows">'; if ( $rows ) foreach ( $rows as $row ) { $rowOwner = ( $user->get( 'id' ) == $row->get( 'user_id' ) ); $address = htmlspecialchars( $row->get( 'location' ) ); if ( $showAddress ) { if ( $row->get( 'address' ) ) { $mapUrl = CBTxt::T( 'GROUP_EVENT_ADDRESS_MAP_URL', 'https://www.google.com/maps/place/[address]', array( '[location]' => urlencode( $row->get( 'location' ) ), '[address]' => urlencode( $row->get( 'address' ) ) ) ); } else { $mapUrl = CBTxt::T( 'GROUP_EVENT_LOCATION_MAP_URL', 'https://www.google.com/maps/search/[location]', array( '[location]' => urlencode( $row->get( 'location' ) ), '[address]' => urlencode( $row->get( 'address' ) ) ) ); } if ( $mapUrl ) { $address = '<a href="' . htmlspecialchars( $mapUrl ) . '" target="_blank" rel="nofollow">' . $address . '</a>'; } } $menu = array(); $integrations = $_PLUGINS->trigger( 'gj_onDisplayEvent', array( &$row, &$menu, $group, $user ) ); $canAttend = ( ( ! $rowOwner ) && ( $row->status() != 1 ) && ( ! $row->get( '_attending' ) ) && ( $userStatus >= 1 ) && ( ( ! $row->get( 'limit' ) ) || ( $row->get( 'limit' ) && ( $row->get( '_guests' ) < $row->get( 'limit' ) ) ) ) ); $canMenu = ( $isModerator || $isOwner || $rowOwner || ( $userStatus >= 2 ) || ( ( ! $rowOwner ) && ( $row->status() != 1 ) && ( $userStatus >= 1 ) && $row->get( '_attending' ) ) || $menu ); $return .= '<div class="gjGroupEventsRow row' . ( $row->status() == 1 ? ' gjGroupEventExpired' : ( $row->status() == 2 ? ' gjGroupEventActive' : null ) ) . '">' . '<div class="gjGroupEventCalendar col-md-2 hidden-sm hidden-xs">' . '<div class="panel panel-default text-center">' . '<div class="gjGroupEventMonth panel-body">' . cbFormatDate( $row->get( 'start' ), true, false, 'M' ) . '</div>' . '<div class="gjGroupEventDay panel-footer">' . cbFormatDate( $row->get( 'start' ), true, false, 'j' ) . '</div>' . '</div>' . '</div>' . '<div class="gjGroupEventContainer col-md-10 col-sm-12 col-xs-12">' . '<div class="panel ' . ( $row->status() == 1 ? 'panel-warning' : ( $row->status() == 2 ? 'panel-primary' : 'panel-default' ) ) . '">' . '<div class="gjGroupEventHeader panel-heading">' . '<div class="row">' . '<div class="gjGroupEventTitle ' . ( $canAttend || $canMenu ? 'col-sm-8' : 'col-sm-12' ) . '">' . htmlspecialchars( $row->get( 'title' ) ) . '</div>'; if ( $canAttend || $canMenu ) { $return .= '<div class="gjGroupEventMenu col-sm-4 text-right">'; if ( $canAttend ) { $return .= '<button type="button" onclick="window.location.href=\'' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'events', 'func' => 'attend', 'id' => (int) $row->get( 'id' ) ) ) . '\';" class="gjButton gjButtonAttend btn btn-xs btn-success">' . CBTxt::T( 'Attend' ) . '</button> '; } if ( $canMenu ) { $menuItems = '<ul class="gjEventMenuItems dropdown-menu" style="display: block; position: relative; margin: 0;">'; if ( ( ! $rowOwner ) && ( $row->status() != 1 ) && ( $userStatus >= 1 ) && $row->get( '_attending' ) ) { $menuItems .= '<li class="gjEventMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you do not want to attend this Event?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'events', 'func' => 'unattend', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-times-circle"></span> ' . CBTxt::T( 'Unattend' ) . '</a></li>'; } if ( $isModerator || $isOwner || $rowOwner || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjEventMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'events', 'func' => 'edit', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-edit"></span> ' . CBTxt::T( 'Edit' ) . '</a></li>'; if ( ( $row->get( 'published' ) == -1 ) && ( $group->params()->get( 'events', 1 ) == 2 ) ) { if ( $isModerator || $isOwner || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjEventMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'events', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Approve' ) . '</a></li>'; } } elseif ( $row->get( 'published' ) == 1 ) { $menuItems .= '<li class="gjEventMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to unpublish this Event?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'events', 'func' => 'unpublish', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-times-circle"></span> ' . CBTxt::T( 'Unpublish' ) . '</a></li>'; } else { $menuItems .= '<li class="gjEventMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'events', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Publish' ) . '</a></li>'; } } if ( $menu ) { $menuItems .= '<li class="gjEventMenuItem">' . implode( '</li><li class="gjEventMenuItem">', $menu ) . '</li>'; } if ( $isModerator || $isOwner || $rowOwner || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjEventMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to delete this Event?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'events', 'func' => 'delete', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-trash-o"></span> ' . CBTxt::T( 'Delete' ) . '</a></li>'; } $menuItems .= '</ul>'; $menuAttr = cbTooltip( 1, $menuItems, null, 'auto', null, null, null, 'class="btn btn-default btn-xs" data-cbtooltip-menu="true" data-cbtooltip-classes="qtip-nostyle"' ); $return .= '<span class="gjEventMenu btn-group">' . '<button type="button" ' . trim( $menuAttr ) . '><span class="fa fa-cog"></span> <span class="fa fa-caret-down"></span></button>' . '</span>'; } $return .= '</div>'; } $return .= '</div>' . '</div>' . '<div class="gjGroupEventDetails panel-body small">'; if ( $row->status() == 1 ) { $return .= '<div class="gjGroupEventNotice text-warning text-right">' . CBTxt::T( 'This event has ended.' ) . '</div>'; } elseif ( $row->status() == 2 ) { if ( $row->get( 'end' ) ) { $return .= '<div class="gjGroupEventNotice text-primary text-right">' . CBTxt::T( 'GROUP_EVENT_ENDS_IN', 'This event is currently in progress and ends in [timeago].', array( '[timeago]' => cbFormatDate( $row->get( 'end' ), true, 'exacttimeago' ) ) ) . '</div>'; } else { $return .= '<div class="gjGroupEventNotice text-primary text-right">' . CBTxt::T( 'This event is currently in progress.' ) . '</div>'; } } else { $return .= '<div class="gjGroupEventNotice text-right">' . CBTxt::T( 'GROUP_EVENT_STARTS_IN', 'This event starts in [timeago].', array( '[timeago]' => cbFormatDate( $row->get( 'start' ), true, 'exacttimeago' ) ) ) . '</div>'; } $return .= '<div class="gjGroupEventDate">' . '<span class="gjGroupEventIcon fa fa-clock-o text-center"></span> ' . $row->date() . '</div>' . '<div class="gjGroupEventLocation">' . '<span class="gjGroupEventIcon fa fa-map-marker text-center"></span> ' . $address . '</div>' . '<div class="gjGroupEventAttending row">' . '<div class="gjGroupEventGuests col-sm-6">' . '<span class="gjGroupEventIcon fa fa-users text-center"></span> ' . '<a href="' . htmlspecialchars( $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'events', 'func' => 'attending', 'id' => (int) $row->get( 'id' ) ) ) ) . '">' . ( $row->get( 'limit' ) ? CBTxt::T( 'GROUP_GUESTS_COUNT_LIMITED', '%%COUNT%% of [limit] Guest|%%COUNT%% of [limit] Guests', array( '%%COUNT%%' => (int) $row->get( '_guests', 0 ), '[limit]' => (int) $row->get( 'limit' ) ) ) : CBTxt::T( 'GROUP_GUESTS_COUNT', '%%COUNT%% Guest|%%COUNT%% Guests', array( '%%COUNT%%' => (int) $row->get( '_guests', 0 ) ) ) ) . '</a>' . '</div>' . '<div class="gjGroupEventHost col-sm-6 text-right">' . CBuser::getInstance( (int) $row->get( 'user_id' ), false )->getField( 'formatname', null, 'html', 'none', 'list', 0, true ) . '</div>' . '</div>' . '</div>' . '<div class="gjGroupEventDescription panel-footer">' . '<div class="cbMoreLess">' . '<div class="cbMoreLessContent">' . ( $plugin->params->get( 'groups_events_content_plugins', 0 ) ? Application::Cms()->prepareHtmlContentPlugins( $row->get( 'event' ) ) : $row->get( 'event' ) ) . '</div>' . '<div class="cbMoreLessOpen fade-edge hidden">' . '<a href="javascript: void(0);" class="cbMoreLessButton">' . CBTxt::T( 'See More' ) . '</a>' . '</div>' . '</div>' . '</div>' . ( is_array( $integrations ) && $integrations ? '<div class="gjGroupEventFooter panel-footer">' . implode( '', $integrations ) . '</div>' : null ) . '</div>' . '</div>' . '</div>'; } else { if ( $searching ) { $return .= CBTxt::T( 'No group event search results found.' ); } else { $return .= CBTxt::T( 'This group currently has no events.' ); } } $return .= '</div>'; if ( $plugin->params->get( 'groups_events_paging', 1 ) && ( $pageNav->total > $pageNav->limit ) ) { $return .= '<div class="gjGroupEventsPaging text-center">' . $pageNav->getListLinks() . '</div>'; } $return .= $pageNav->getLimitBox( false ) . '</form>' . '</div>'; $_PLUGINS->trigger( 'gj_onAfterDisplayEvents', array( &$return, $rows, $group, $user ) ); return $return; }
/** * @param UserTable $user * @param GroupTable $group * @param array $counters * @return array|null */ public function getTopics( $user, &$group, &$counters ) { global $_CB_framework, $_CB_database; $categoryId = (int) $group->params()->get( 'forum_id' ); if ( ( ! $categoryId ) || ( ! $group->params()->get( 'forums', 1 ) ) || ( $group->category()->get( 'id' ) && ( ! $group->category()->params()->get( 'forums', 1 ) ) ) ) { return null; } CBGroupJive::getTemplate( 'forums', true, true, $this->plugin->element ); $limit = (int) $this->params->get( 'groups_forums_limit', 15 ); $limitstart = $_CB_framework->getUserStateFromRequest( 'gj_group_forums_limitstart{com_comprofiler}', 'gj_group_forums_limitstart' ); $search = $_CB_framework->getUserStateFromRequest( 'gj_group_forums_search{com_comprofiler}', 'gj_group_forums_search' ); $where = null; if ( $search && $this->params->get( 'groups_forums_search', 1 ) ) { $where .= '( m.' . $_CB_database->NameQuote( 'subject' ) . ' LIKE ' . $_CB_database->Quote( '%' . $_CB_database->getEscaped( $search, true ) . '%', false ) . ' OR t.' . $_CB_database->NameQuote( 'message' ) . ' LIKE ' . $_CB_database->Quote( '%' . $_CB_database->getEscaped( $search, true ) . '%', false ) . ' )'; } $searching = ( $where ? true : false ); $params = array( 'starttime' => -1, 'where' => $where ); $posts = \KunenaForumMessageHelper::getLatestMessages( $categoryId, 0, 0, $params ); $total = array_shift( $posts ); if ( ( ! $total ) && ( ! $searching ) && ( ! CBGroupJive::canCreateGroupContent( $user, $group, 'forums' ) ) ) { return null; } $pageNav = new \cbPageNav( $total, $limitstart, $limit ); $pageNav->setInputNamePrefix( 'gj_group_forums_' ); switch( (int) $this->params->get( 'groups_forums_orderby', 2 ) ) { case 1: $params['orderby'] = 'm.' . $_CB_database->NameQuote( 'time' ) . ' ASC'; break; } if ( $this->params->get( 'groups_forums_paging', 1 ) ) { $posts = \KunenaForumMessageHelper::getLatestMessages( $categoryId, (int) $pageNav->limitstart, (int) $pageNav->limit, $params ); $posts = array_pop( $posts ); } else { $posts = array_pop( $posts ); } $rows = array(); /** @var \KunenaForumMessage[] $posts */ foreach ( $posts as $post ) { $row = new PostTable(); $row->post( $post ); $rows[] = $row; } $input = array(); $input['search'] = '<input type="text" name="gj_group_forums_search" value="' . htmlspecialchars( $search ) . '" onchange="document.gjGroupForumsForm.submit();" placeholder="' . htmlspecialchars( CBTxt::T( 'Search Posts...' ) ) . '" class="form-control" />'; CBGroupJive::preFetchUsers( $rows ); $group->set( '_forums', $pageNav->total ); return array( 'id' => 'forums', 'title' => CBTxt::T( 'Forums' ), 'content' => \HTML_groupjiveForums::showForums( $rows, $pageNav, $searching, $input, $counters, $group, $user, $this ) ); }
/** * prepare frontend wall replies render * * @param WallTable $reply * @param GroupTable $group * @param UserTable $user * @return array|null */ public function showReplies( $reply, $group, $user ) { global $_CB_framework, $_CB_database; CBGroupJive::getTemplate( 'replies', true, true, $this->element ); $canModerate = ( CBGroupJive::isModerator( $user->get( 'id' ) ) || ( CBGroupJive::getGroupStatus( $user, $group ) >= 2 ) ); $limit = (int) $this->params->get( 'groups_wall_replies_limit', 15 ); $limitstart = $_CB_framework->getUserStateFromRequest( 'gj_group_wall_replies_limitstart{com_comprofiler}', 'gj_group_wall_replies_limitstart' ); if ( $reply->get( '_replies' ) ) { $query = 'SELECT COUNT(*)' . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_plugin_wall' ) . " AS r" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__comprofiler' ) . " AS cb" . ' ON cb.' . $_CB_database->NameQuote( 'id' ) . ' = r.' . $_CB_database->NameQuote( 'user_id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__users' ) . " AS j" . ' ON j.' . $_CB_database->NameQuote( 'id' ) . ' = cb.' . $_CB_database->NameQuote( 'id' ) . "\n WHERE r." . $_CB_database->NameQuote( 'group' ) . " = " . (int) $group->get( 'id' ) . "\n AND r." . $_CB_database->NameQuote( 'reply' ) . " = " . (int) $reply->get( 'id' ) . "\n AND cb." . $_CB_database->NameQuote( 'approved' ) . " = 1" . "\n AND cb." . $_CB_database->NameQuote( 'confirmed' ) . " = 1" . "\n AND j." . $_CB_database->NameQuote( 'block' ) . " = 0"; if ( ! $canModerate ) { $query .= "\n AND ( r." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ) . ' OR r.' . $_CB_database->NameQuote( 'published' ) . ' = 1 )'; } $_CB_database->setQuery( $query ); $total = (int) $_CB_database->loadResult(); } else { $total = 0; } if ( ( ! $total ) && ( ! CBGroupJive::canCreateGroupContent( $user, $group, 'wall' ) ) ) { return null; } $pageNav = new cbPageNav( $total, $limitstart, $limit ); $pageNav->setClasses( array( 'cbPaginationLinks' => 'cbPaginationLinks pagination pagination-sm' ) ); $pageNav->setInputNamePrefix( 'gj_group_wall_replies_' ); if ( $reply->get( '_replies' ) ) { switch( (int) $this->params->get( 'groups_wall_replies_orderby', 2 ) ) { case 1: $orderBy = 'r.' . $_CB_database->NameQuote( 'date' ) . ' ASC'; break; case 2: default: $orderBy = 'r.' . $_CB_database->NameQuote( 'date' ) . ' DESC'; break; } $query = 'SELECT r.*' . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_plugin_wall' ) . " AS r" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__comprofiler' ) . " AS cb" . ' ON cb.' . $_CB_database->NameQuote( 'id' ) . ' = r.' . $_CB_database->NameQuote( 'user_id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__users' ) . " AS j" . ' ON j.' . $_CB_database->NameQuote( 'id' ) . ' = cb.' . $_CB_database->NameQuote( 'id' ) . "\n WHERE r." . $_CB_database->NameQuote( 'group' ) . " = " . (int) $group->get( 'id' ) . "\n AND r." . $_CB_database->NameQuote( 'reply' ) . " = " . (int) $reply->get( 'id' ) . "\n AND cb." . $_CB_database->NameQuote( 'approved' ) . " = 1" . "\n AND cb." . $_CB_database->NameQuote( 'confirmed' ) . " = 1" . "\n AND j." . $_CB_database->NameQuote( 'block' ) . " = 0"; if ( ! $canModerate ) { $query .= "\n AND ( r." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ) . ' OR r.' . $_CB_database->NameQuote( 'published' ) . ' = 1 )'; } $query .= "\n ORDER BY " . $orderBy; if ( $this->params->get( 'groups_wall_replies_paging', 1 ) ) { $_CB_database->setQuery( $query, $pageNav->limitstart, $pageNav->limit ); } else { $_CB_database->setQuery( $query ); } $rows = $_CB_database->loadObjectList( null, '\CB\Plugin\GroupJiveWall\Table\WallTable', array( $_CB_database ) ); CBGroupJiveWall::getPost( $rows ); CBGroupJive::preFetchUsers( $rows ); } else { $rows = array(); } return HTML_groupjiveWallReplies::showReplies( $reply, $rows, $pageNav, $group, $user, $this ); }
/** * prepare frontend photos render * * @param string $return * @param GroupTable $group * @param string $users * @param string $invites * @param array $counters * @param array $buttons * @param array $menu * @param cbTabs $tabs * @param UserTable $user * @return array|null */ public function showPhotos( &$return, &$group, &$users, &$invites, &$counters, &$buttons, &$menu, &$tabs, $user ) { global $_CB_framework, $_CB_database; CBGroupJive::getTemplate( 'photos', true, true, $this->element ); $canModerate = ( CBGroupJive::isModerator( $user->get( 'id' ) ) || ( CBGroupJive::getGroupStatus( $user, $group ) >= 2 ) ); $limit = (int) $this->params->get( 'groups_photo_limit', 15 ); $limitstart = $_CB_framework->getUserStateFromRequest( 'gj_group_photo_limitstart{com_comprofiler}', 'gj_group_photo_limitstart' ); $search = $_CB_framework->getUserStateFromRequest( 'gj_group_photo_search{com_comprofiler}', 'gj_group_photo_search' ); $where = null; if ( $search && $this->params->get( 'groups_photo_search', 1 ) ) { $where .= "\n AND ( p." . $_CB_database->NameQuote( 'title' ) . " LIKE " . $_CB_database->Quote( '%' . $_CB_database->getEscaped( $search, true ) . '%', false ) . " OR p." . $_CB_database->NameQuote( 'filename' ) . " LIKE " . $_CB_database->Quote( '%' . $_CB_database->getEscaped( $search, true ) . '%', false ) . " OR p." . $_CB_database->NameQuote( 'description' ) . " LIKE " . $_CB_database->Quote( '%' . $_CB_database->getEscaped( $search, true ) . '%', false ) . " )"; } $searching = ( $where ? true : false ); $query = 'SELECT COUNT(*)' . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_plugin_photo' ) . " AS p" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__comprofiler' ) . " AS cb" . ' ON cb.' . $_CB_database->NameQuote( 'id' ) . ' = p.' . $_CB_database->NameQuote( 'user_id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__users' ) . " AS j" . ' ON j.' . $_CB_database->NameQuote( 'id' ) . ' = cb.' . $_CB_database->NameQuote( 'id' ) . "\n WHERE p." . $_CB_database->NameQuote( 'group' ) . " = " . (int) $group->get( 'id' ) . "\n AND cb." . $_CB_database->NameQuote( 'approved' ) . " = 1" . "\n AND cb." . $_CB_database->NameQuote( 'confirmed' ) . " = 1" . "\n AND j." . $_CB_database->NameQuote( 'block' ) . " = 0"; if ( ! $canModerate ) { $query .= "\n AND ( p." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ) . ' OR p.' . $_CB_database->NameQuote( 'published' ) . ' = 1 )'; } $query .= $where; $_CB_database->setQuery( $query ); $total = (int) $_CB_database->loadResult(); if ( ( ! $total ) && ( ! $searching ) && ( ! CBGroupJive::canCreateGroupContent( $user, $group, 'photo' ) ) ) { return null; } $pageNav = new cbPageNav( $total, $limitstart, $limit ); $pageNav->setInputNamePrefix( 'gj_group_photo_' ); switch( (int) $this->params->get( 'groups_photo_orderby', 2 ) ) { case 1: $orderBy = 'p.' . $_CB_database->NameQuote( 'date' ) . ' ASC'; break; case 3: $orderBy = 'p.' . $_CB_database->NameQuote( 'filename' ) . ' ASC'; break; case 4: $orderBy = 'p.' . $_CB_database->NameQuote( 'filename' ) . ' DESC'; break; case 2: default: $orderBy = 'p.' . $_CB_database->NameQuote( 'date' ) . ' DESC'; break; } $query = 'SELECT p.*' . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_plugin_photo' ) . " AS p" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__comprofiler' ) . " AS cb" . ' ON cb.' . $_CB_database->NameQuote( 'id' ) . ' = p.' . $_CB_database->NameQuote( 'user_id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__users' ) . " AS j" . ' ON j.' . $_CB_database->NameQuote( 'id' ) . ' = cb.' . $_CB_database->NameQuote( 'id' ) . "\n WHERE p." . $_CB_database->NameQuote( 'group' ) . " = " . (int) $group->get( 'id' ) . "\n AND cb." . $_CB_database->NameQuote( 'approved' ) . " = 1" . "\n AND cb." . $_CB_database->NameQuote( 'confirmed' ) . " = 1" . "\n AND j." . $_CB_database->NameQuote( 'block' ) . " = 0"; if ( ! $canModerate ) { $query .= "\n AND ( p." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ) . ' OR p.' . $_CB_database->NameQuote( 'published' ) . ' = 1 )'; } $query .= $where . "\n ORDER BY " . $orderBy; if ( $this->params->get( 'groups_photo_paging', 1 ) ) { $_CB_database->setQuery( $query, $pageNav->limitstart, $pageNav->limit ); } else { $_CB_database->setQuery( $query ); } $rows = $_CB_database->loadObjectList( null, '\CB\Plugin\GroupJivePhoto\Table\PhotoTable', array( $_CB_database ) ); $input = array(); $input['search'] = '<input type="text" name="gj_group_photo_search" value="' . htmlspecialchars( $search ) . '" onchange="document.gjGroupPhotoForm.submit();" placeholder="' . htmlspecialchars( CBTxt::T( 'Search Photos...' ) ) . '" class="form-control" />'; CBGroupJivePhoto::getPhoto( $rows ); CBGroupJive::preFetchUsers( $rows ); $group->set( '_photos', $pageNav->total ); return array( 'id' => 'photo', 'title' => CBTxt::T( 'Photos' ), 'content' => HTML_groupjivePhoto::showPhotos( $rows, $pageNav, $searching, $input, $counters, $group, $user, $this ) ); }
/** * render frontend forums * * @param PostTableInterface[] $rows * @param cbPageNav $pageNav * @param bool $searching * @param array $input * @param array $counters * @param GroupTable $group * @param UserTable $user * @param ModelInterface $model * @return string */ static function showForums( $rows, $pageNav, $searching, $input, &$counters, $group, $user, $model ) { global $_CB_framework, $_PLUGINS; $counters[] = '<span class="gjGroupForumsIcon fa-before fa-comments-o"> ' . CBTxt::T( 'GROUP_FORUMS_COUNT', '%%COUNT%% Discussion|%%COUNT%% Discussions', array( '%%COUNT%%' => (int) $pageNav->total ) ) . '</span>'; $canCreate = CBGroupJive::canCreateGroupContent( $user, $group, 'forums' ); $canSearch = ( $model->params->get( 'groups_forums_search', 1 ) && ( $searching || $pageNav->total ) ); $return = null; $_PLUGINS->trigger( 'gj_onBeforeDisplayForums', array( &$return, &$rows, $group, $user ) ); $return .= '<div class="gjGroupForums">' . '<form action="' . $_CB_framework->pluginClassUrl( $model->gjPlugin->element, true, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ) . '" method="post" name="gjGroupForumsForm" id="gjGroupForumsForm" class="gjGroupForumsForm">'; if ( $canCreate || $canSearch ) { $return .= '<div class="gjHeader gjGroupForumsHeader row">'; if ( $canCreate ) { $return .= '<div class="' . ( ! $canSearch ? 'col-sm-12' : 'col-sm-8' ) . ' text-left">' . '<button type="button" onclick="window.location.href=\'' . $model->getCategory( (int) $group->params()->get( 'forum_id' ) )->url() . '\';" class="gjButton gjButtonNewPost btn btn-success"><span class="fa fa-plus-circle"></span> ' . CBTxt::T( 'New Post' ) . '</button>' . '</div>'; } if ( $canSearch ) { $return .= '<div class="' . ( ! $canCreate ? 'col-sm-offset-8 ' : null ) . 'col-sm-4 text-right">' . '<div class="input-group">' . '<span class="input-group-addon"><span class="fa fa-search"></span></span>' . $input['search'] . '</div>' . '</div>'; } $return .= '</div>'; } $return .= '<table class="gjGroupForumsRows table table-hover table-responsive">' . '<thead>' . '<tr>' . '<th style="width: 50%;" class="text-left">' . CBTxt::T( 'Subject' ) . '</th>' . '<th style="width: 25%;" class="text-left hidden-xs">' . CBTxt::T( 'By' ) . '</th>' . '<th style="width: 25%;" class="text-left hidden-xs">' . CBTxt::T( 'Date' ) . '</th>' . '</tr>' . '</thead>' . '<tbody>'; if ( $rows ) foreach ( $rows as $row ) { $return .= '<tr>' . '<td style="width: 50%;" class="text-left"><a href="' . $row->url() . '">' . $row->get( 'subject' ) . '</a></td>' . '<td style="width: 25%;" class="text-left hidden-xs">' . CBuser::getInstance( (int) $row->get( 'user_id' ), false )->getField( 'formatname', null, 'html', 'none', 'list', 0, true ) . '</td>' . '<td style="width: 25%;" class="text-left hidden-xs">' . cbFormatDate( $row->get( 'date' ) ) . '</td>' . '</tr>'; } else { $return .= '<tr>' . '<td colspan="3" class="text-left">'; if ( $searching ) { $return .= CBTxt::T( 'No group post search results found.' ); } else { $return .= CBTxt::T( 'This group currently has no posts.' ); } $return .= '</td>' . '</tr>'; } $return .= '</tbody>'; if ( $model->params->get( 'groups_forums_paging', 1 ) && ( $pageNav->total > $pageNav->limit ) ) { $return .= '<tfoot>' . '<tr>' . '<td colspan="3" class="gjGroupForumsPaging text-center">' . $pageNav->getListLinks() . '</td>' . '</tr>' . '</tfoot>'; } $return .= '</table>' . $pageNav->getLimitBox( false ) . '</form>' . '</div>'; $_PLUGINS->trigger( 'gj_onAfterDisplayForums', array( &$return, $rows, $group, $user ) ); return $return; }
/** * save file * * @param int $id * @param UserTable $user */ private function saveFileEdit( $id, $user ) { global $_CB_framework, $_PLUGINS; $row = CBGroupJiveFile::getFile( (int) $id ); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $groupId = $this->input( 'group', null, GetterInterface::INT ); if ( $groupId === null ) { $group = $row->group(); } else { $group = CBGroupJive::getGroup( $groupId ); } $returnUrl = $_CB_framework->pluginClassUrl( $this->_gjPlugin->element, false, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ); if ( ! CBGroupJive::canAccessGroup( $group, $user ) ) { cbRedirect( $returnUrl, CBTxt::T( 'Group does not exist.' ), 'error' ); } elseif ( ! $isModerator ) { if ( ( ! $row->get( 'id' ) ) && ( ! CBGroupJive::canCreateGroupContent( $user, $group, 'file' ) ) ) { cbRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to upload a file in this group.' ), 'error' ); } elseif ( $row->get( 'id' ) && ( $user->get( 'id' ) != $row->get( 'user_id' ) ) && ( CBGroupJive::getGroupStatus( $user, $group ) < 2 ) ) { cbRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to edit this file.' ), 'error' ); } } if ( $isModerator ) { $row->set( 'user_id', (int) $this->input( 'post/user_id', $row->get( 'user_id', $user->get( 'id' ) ), GetterInterface::INT ) ); } else { $row->set( 'user_id', (int) $row->get( 'user_id', $user->get( 'id' ) ) ); } $canModerate = ( CBGroupJive::getGroupStatus( $user, $group ) >= 2 ); $row->set( 'published', ( $isModerator || $canModerate || ( $row->get( 'id' ) && ( $row->get( 'published' ) != -1 ) ) || ( $group->params()->get( 'file', 1 ) != 2 ) ? (int) $this->input( 'post/published', $row->get( 'published', 1 ), GetterInterface::INT ) : -1 ) ); $row->set( 'group', (int) $group->get( 'id' ) ); $row->set( 'title', $this->input( 'post/title', $row->get( 'title' ), GetterInterface::STRING ) ); $row->set( 'description', $this->input( 'post/description', $row->get( 'description' ), GetterInterface::STRING ) ); if ( ( ! $isModerator ) && $this->params->get( 'groups_file_captcha', 0 ) ) { $_PLUGINS->loadPluginGroup( 'user' ); $_PLUGINS->trigger( 'onCheckCaptchaHtmlElements', array() ); if ( $_PLUGINS->is_errors() ) { $row->setError( $_PLUGINS->getErrorMSG() ); } } $new = ( $row->get( 'id' ) ? false : true ); if ( $row->getError() || ( ! $row->check() ) ) { $_CB_framework->enqueueMessage( CBTxt::T( 'GROUP_FILE_FAILED_TO_SAVE', 'File failed to save! Error: [error]', array( '[error]' => $row->getError() ) ), 'error' ); $this->showFileEdit( $id, $user ); return; } if ( $row->getError() || ( ! $row->store() ) ) { $_CB_framework->enqueueMessage( CBTxt::T( 'GROUP_FILE_FAILED_TO_SAVE', 'File failed to save! Error: [error]', array( '[error]' => $row->getError() ) ), 'error' ); $this->showFileEdit( $id, $user ); return; } if ( $new ) { $extras = array( 'file_title' => htmlspecialchars( ( $row->get( 'title' ) ? $row->get( 'title' ) : $row->name() ) ), 'file' => '<a href="' . $_CB_framework->pluginClassUrl( $this->_gjPlugin->element, false, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $row->get( 'group' ), 'tab' => 'grouptabfile' ) ) . '">' . htmlspecialchars( ( $row->get( 'title' ) ? $row->get( 'title' ) : $row->name() ) ) . '</a>' ); if ( $row->get( 'published' ) == 1 ) { CBGroupJive::sendNotifications( 'file_new', CBTxt::T( 'New group file' ), CBTxt::T( '[user] has uploaded the file [file] in the group [group]!' ), $row->group(), (int) $row->get( 'user_id' ), null, array( $user->get( 'id' ) ), 1, $extras ); } elseif ( ( $row->get( 'published' ) == -1 ) && ( $row->group()->params()->get( 'file', 1 ) == 2 ) ) { CBGroupJive::sendNotifications( 'file_approve', CBTxt::T( 'New group file awaiting approval' ), CBTxt::T( '[user] has uploaded the file [file] in the group [group] and is awaiting approval!' ), $row->group(), (int) $row->get( 'user_id' ), null, array( $user->get( 'id' ) ), 1, $extras ); } cbRedirect( $returnUrl, CBTxt::T( 'File uploaded successfully!' ) ); } else { cbRedirect( $returnUrl, CBTxt::T( 'File saved successfully!' ) ); } }
/** * integrates with kunena model * * @param string $event * @param $config * @param $params */ public function kunena( $event, &$config, &$params ) { global $_CB_database; if ( ( ! $this->_forumModel ) || ( $this->_forumModel->type != 'kunena' ) ) { return; } if ( $event == 'loadGroups' ) { $groups = CBGroupJive::getGroupOptions(); $options = array(); foreach ( $groups as $group ) { $option = new stdClass(); $option->id = ( is_array( $group->value ) ? uniqid() : (int) $group->value ); $option->parent_id = 0; $option->level = ( is_array( $group->value ) ? 0 : 1 ); $option->name = $group->text; $options[$option->id] = $option; } $params['groups'] = $options; } elseif ( $event == 'getAllowedForumsRead' ) { static $cache = array(); $mydId = Application::MyUser()->getUserId(); if ( ! $mydId ) { return; } if ( ! isset( $cache[$mydId] ) ) { $user = CBuser::getMyUserDataInstance(); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $query = 'SELECT g.*' . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_groups' ) . " AS g" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__comprofiler' ) . " AS cb" . ' ON cb.' . $_CB_database->NameQuote( 'id' ) . ' = g.' . $_CB_database->NameQuote( 'user_id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__users' ) . " AS j" . ' ON j.' . $_CB_database->NameQuote( 'id' ) . ' = cb.' . $_CB_database->NameQuote( 'id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_users' ) . " AS u" . ' ON u.' . $_CB_database->NameQuote( 'user_id' ) . ' = ' . (int) $user->get( 'id' ) . ' AND u.' . $_CB_database->NameQuote( 'group' ) . ' = g.' . $_CB_database->NameQuote( 'id' ) . "\n WHERE cb." . $_CB_database->NameQuote( 'approved' ) . " = 1" . "\n AND cb." . $_CB_database->NameQuote( 'confirmed' ) . " = 1" . "\n AND j." . $_CB_database->NameQuote( 'block' ) . " = 0"; if ( ! $isModerator ) { $query .= "\n AND ( g." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ) . ' OR ( g.' . $_CB_database->NameQuote( 'published' ) . ' = 1' . ' AND u.' . $_CB_database->NameQuote( 'status' ) . ' > 0 ) )'; } $_CB_database->setQuery( $query ); $groups = $_CB_database->loadObjectList( null, '\CB\Plugin\GroupJive\Table\GroupTable', array( $_CB_database ) ); $allowed = array(); /** @var GroupTable[] $groups */ foreach ( $groups as $group ) { if ( $group->params()->get( 'forums', 1 ) ) { $froumId = (int) $group->params()->get( 'forum_id' ); if ( $froumId && CBGroupJive::canCreateGroupContent( $user, $group, 'forums' ) ) { $allowed[] = $froumId; } } } $cache[$mydId] = $allowed; } if ( ! $cache[$mydId] ) { return; } $existingAccess = explode( ',', $params[1] ); $cleanAccess = array_diff( $cache[$mydId], $existingAccess ); $newAccess = array_merge( $existingAccess, $cleanAccess ); cbArrayToInts( $newAccess ); $params[1] = implode( ',', $newAccess ); } elseif ( $event == 'authoriseUsers' ) { /** @var KunenaForumCategory $category */ $category = $params['category']; $groupId = $category->get( 'access' ); if ( ( $category->get( 'accesstype' ) != 'communitybuilder' ) || ( ! $groupId ) ) { return; } $users = $params['userids']; if ( ! $users ) { return; } static $allowed = array(); if ( ! isset( $allowed[$groupId] ) ) { $allowed[$groupId] = array(); $group = CBGroupJive::getGroup( $groupId ); if ( $group->get( 'id' ) ) { $query = 'SELECT u.' . $_CB_database->NameQuote( 'user_id' ) . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_users' ) . " AS u" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__comprofiler' ) . " AS cb" . ' ON cb.' . $_CB_database->NameQuote( 'id' ) . ' = u.' . $_CB_database->NameQuote( 'user_id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__users' ) . " AS j" . ' ON j.' . $_CB_database->NameQuote( 'id' ) . ' = cb.' . $_CB_database->NameQuote( 'id' ) . "\n WHERE u." . $_CB_database->NameQuote( 'group' ) . " = " . (int) $group->get( 'id' ) . "\n AND cb." . $_CB_database->NameQuote( 'approved' ) . " = 1" . "\n AND cb." . $_CB_database->NameQuote( 'confirmed' ) . " = 1" . "\n AND j." . $_CB_database->NameQuote( 'block' ) . " = 0" . "\n AND u." . $_CB_database->NameQuote( 'status' ) . " >= 1"; $_CB_database->setQuery( $query ); $allowed[$groupId] = $_CB_database->loadResultArray(); } foreach ( $users as $userId ) { if ( ( ! in_array( $userId, $allowed[$groupId] ) ) && CBGroupJive::isModerator( $userId ) ) { $allowed[$groupId][] = $userId; } } cbArrayToInts( $allowed[$groupId] ); } if ( ! $allowed[$groupId] ) { return; } $params['allow'] = $allowed[$groupId]; } elseif ( $this->params->get( 'groups_forums_back', 1 ) && ( $event == 'onStart' ) && ( $this->input( 'view', null, GetterInterface::STRING ) == 'category' ) ) { $categoryId = (int) $this->input( 'catid', 0, GetterInterface::INT ); if ( ! $categoryId ) { return; } $model = CBGroupJiveForums::getModel(); if ( ! $model ) { return; } $category = $model->getCategory( $categoryId ); if ( ! $category->get( 'id' ) ) { return; } $category = $category->category(); if ( ( $category->get( 'accesstype' ) != 'communitybuilder' ) || ( ! $category->get( 'access' ) ) ) { return; } $group = CBGroupJive::getGroup( (int) $category->get( 'access' ) ); if ( ! $group->get( 'id' ) ) { return; } CBGroupJive::getTemplate( 'backlink', true, true, $this->element ); echo HTML_groupjiveForumsBacklink::showBacklink( $group, $category, $this ); } }
/** * render frontend group invites * * @param InviteTable[] $rows * @param cbPageNav $pageNav * @param bool $searching * @param array $input * @param GroupTable $group * @param UserTable $user * @param CBplug_cbgroupjive $plugin * @return string */ static function showInvites( $rows, $pageNav, $searching, $input, $group, $user, $plugin ) { global $_CB_framework, $_PLUGINS; initToolTip(); $canCreateInvite = CBGroupJive::canCreateGroupContent( $user, $group, 'invites' ); $canSearch = ( $plugin->params->get( 'groups_invites_search', 0 ) && ( $searching || $pageNav->total ) ); $return = null; $_PLUGINS->trigger( 'gj_onBeforeDisplayInvites', array( &$return, &$rows, $group, $user ) ); $return .= '<div class="gjGroupInvites">' . '<form action="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ) . '" method="post" name="gjGroupInvitesForm" id="gjGroupInvitesForm" class="gjGroupInvitesForm">'; if ( $canCreateInvite || $canSearch ) { $return .= '<div class="gjHeader gjGroupInvitesHeader row">'; if ( $canCreateInvite ) { $return .= '<div class="' . ( ! $canSearch ? 'col-sm-12' : 'col-sm-8' ) . ' text-left">' . '<button type="button" onclick="window.location.href=\'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'invites', 'func' => 'new', 'group' => (int) $group->get( 'id' ) ) ) . '\';" class="gjButton gjButtonNewInvite btn btn-success"><span class="fa fa-plus-circle"></span> ' . CBTxt::T( 'New Invite' ) . '</button>' . '</div>'; } if ( $canSearch ) { $return .= '<div class="' . ( ! $canCreateInvite ? 'col-sm-offset-8 ' : null ) . 'col-sm-4 text-right">' . '<div class="input-group">' . '<span class="input-group-addon"><span class="fa fa-search"></span></span>' . $input['search'] . '</div>' . '</div>'; } $return .= '</div>'; } $return .= '<table class="gjGroupInvitesRows table table-hover table-responsive">' . '<thead>' . '<tr>' . '<th class="text-left">' . CBTxt::T( 'To' ) . '</th>' . '<th style="width: 25%;" class="text-left hidden-xs">' . CBTxt::T( 'Date' ) . '</th>' . '<th style="width: 5%;" class="text-center">' . CBTxt::T( 'Status' ) . '</th>' . '<th style="width: 1%;"> </th>' . '</tr>' . '</thead>' . '<tbody>'; if ( $rows ) foreach ( $rows as $row ) { $menu = array(); $_PLUGINS->trigger( 'gj_onDisplayInvite', array( &$row, &$menu, $group, $user ) ); if ( $row->get( 'user' ) ) { $toUser = CBuser::getInstance( (int) $row->get( 'user' ), false )->getField( 'formatname', null, 'html', 'none', 'list', 0, true ); } else { $toUser = '******' . htmlspecialchars( $row->get( 'email' ) ) . '">' . $row->get( 'email' ) . '</a>'; } $return .= '<tr>' . '<td class="text-left">' . $toUser . '</td>' . '<td style="width: 25%;" class="text-left hidden-xs">' . ( $row->invited() ? '<div class="text-info" title="' . htmlspecialchars( CBTxt::T( 'Invited' ) ) . '">' . cbFormatDate( $row->get( 'invited' ) ) . '</div>' : '<div class="text-warning">' . CBTxt::T( 'Please Resend' ) . '</div>' ) . ( $row->accepted() ? '<div class="text-success" title="' . htmlspecialchars( CBTxt::T( 'Accepted' ) ) . '">' . cbFormatDate( $row->get( 'accepted' ) ) . '</div>' : null ) . '</td>' . '<td style="width: 5%;" class="text-center hidden-xs">'; if ( $row->accepted() ) { $return .= '<span class="gjInviteAcceptedIcon fa fa-check text-success" title="' . htmlspecialchars( CBTxt::T( 'Accepted' ) ) . '"></span>'; } elseif ( $row->invited() ) { $return .= '<span class="gjInvitePendingIcon fa fa-clock-o text-warning" title="' . htmlspecialchars( CBTxt::T( 'Pending' ) ) . '"></span>'; } else { $return .= '<span class="gjInviteResentIcon fa fa-warning text-danger" title="' . htmlspecialchars( CBTxt::T( 'Resend' ) ) . '"></span>'; } $return .= '</td>'; $menuItems = '<ul class="gjInviteMenuItems dropdown-menu" style="display: block; position: relative; margin: 0;">'; if ( $row->canResend() ) { $menuItems .= '<li class="gjInviteMenuItems"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'invites', 'func' => 'send', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-share-square-o"></span> ' . CBTxt::T( 'Resend' ) . '</a></li>'; } if ( ! $row->accepted() ) { $menuItems .= '<li class="gjInviteMenuItems"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'invites', 'func' => 'edit', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-edit"></span> ' . CBTxt::T( 'Edit' ) . '</a></li>'; } if ( $menu ) { $menuItems .= '<li class="gjInviteMenuItems">' . implode( '</li><li class="gjGroupMenuItem">', $menu ) . '</li>'; } $menuItems .= '<li class="gjInviteMenuItems"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to delete this Invite?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'invites', 'func' => 'delete', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-trash-o"></span> ' . CBTxt::T( 'Delete' ) . '</a></li>' . '</ul>'; $menuAttr = cbTooltip( 1, $menuItems, null, 'auto', null, null, null, 'class="btn btn-default btn-xs" data-cbtooltip-menu="true" data-cbtooltip-classes="qtip-nostyle"' ); $return .= '<td style="width: 1%;" class="text-right">' . '<div class="gjInviteMenu btn-group">' . '<button type="button" ' . trim( $menuAttr ) . '><span class="fa fa-cog"></span> <span class="fa fa-caret-down"></span></button>' . '</div>' . '</td>' . '</tr>'; } else { $return .= '<tr>' . '<td colspan="4" class="text-left">'; if ( $searching ) { $return .= CBTxt::T( 'No group invite search results found.' ); } else { $return .= CBTxt::T( 'You currently have no invites in this group.' ); } $return .= '</td>' . '</tr>'; } $return .= '</tbody>'; if ( $plugin->params->get( 'groups_invites_paging', 1 ) && ( $pageNav->total > $pageNav->limit ) ) { $return .= '<tfoot>' . '<tr>' . '<td colspan="4" class="gjGroupInvitesPaging text-center">' . $pageNav->getListLinks() . '</td>' . '</tr>' . '</tfoot>'; } $return .= '</table>' . $pageNav->getLimitBox( false ) . '</form>' . '</div>'; $_PLUGINS->trigger( 'gj_onAfterDisplayInvites', array( &$return, &$rows, $group, $user ) ); return $return; }
/** * render frontend files * * @param FileTable[] $rows * @param cbPageNav $pageNav * @param bool $searching * @param array $input * @param array $counters * @param GroupTable $group * @param UserTable $user * @param cbgjFilePlugin $plugin * @return string */ static function showFiles( $rows, $pageNav, $searching, $input, &$counters, $group, $user, $plugin ) { global $_CB_framework, $_PLUGINS; $counters[] = '<span class="gjGroupFileIcon fa-before fa-file-o"> ' . CBTxt::T( 'GROUP_FILES_COUNT', '%%COUNT%% File|%%COUNT%% Files', array( '%%COUNT%%' => (int) $pageNav->total ) ) . '</span>'; initToolTip(); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $isOwner = ( $user->get( 'id' ) == $group->get( 'user_id' ) ); $userStatus = CBGroupJive::getGroupStatus( $user, $group ); $canCreate = CBGroupJive::canCreateGroupContent( $user, $group, 'file' ); $canSearch = ( $plugin->params->get( 'groups_file_search', 1 ) && ( $searching || $pageNav->total ) ); $return = null; $_PLUGINS->trigger( 'gj_onBeforeDisplayFiles', array( &$return, &$rows, $group, $user ) ); $return .= '<div class="gjGroupFile">' . '<form action="' . $_CB_framework->pluginClassUrl( $plugin->_gjPlugin->element, true, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ) . '" method="post" name="gjGroupFileForm" id="gjGroupFileForm" class="gjGroupFileForm">'; if ( $canCreate || $canSearch ) { $return .= '<div class="gjHeader gjGroupFileHeader row">'; if ( $canCreate ) { $return .= '<div class="' . ( ! $canSearch ? 'col-sm-12' : 'col-sm-8' ) . ' text-left">' . '<button type="button" onclick="window.location.href=\'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'file', 'func' => 'new', 'group' => (int) $group->get( 'id' ) ) ) . '\';" class="gjButton gjButtonNewFile btn btn-success"><span class="fa fa-plus-circle"></span> ' . CBTxt::T( 'New File' ) . '</button>' . '</div>'; } if ( $canSearch ) { $return .= '<div class="' . ( ! $canCreate ? 'col-sm-offset-8 ' : null ) . 'col-sm-4 text-right">' . '<div class="input-group">' . '<span class="input-group-addon"><span class="fa fa-search"></span></span>' . $input['search'] . '</div>' . '</div>'; } $return .= '</div>'; } $return .= '<table class="gjGroupFileRows table table-hover table-responsive">' . '<thead>' . '<tr>' . '<th colspan="2"> </th>' . '<th style="width: 15%;" class="text-center">' . CBTxt::T( 'Type' ) . '</th>' . '<th style="width: 15%;" class="text-left">' . CBTxt::T( 'Size' ) . '</th>' . '<th style="width: 20%;" class="text-left hidden-xs">' . CBTxt::T( 'Date' ) . '</th>' . '<th style="width: 1%;" class="text-right"> </th>' . '</tr>' . '</thead>' . '<tbody>'; if ( $rows ) foreach ( $rows as $row ) { $extension = null; $size = 0; $title = ( $row->get( 'title' ) ? htmlspecialchars( $row->get( 'title' ) ) : $row->name() ); $item = $title; if ( $row->exists() ) { $downloadPath = $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'file', 'func' => 'download', 'id' => (int) $row->get( 'id' ) ), 'raw', 0, true ); $extension = $row->extension(); $size = $row->size(); switch ( $extension ) { case 'txt': case 'pdf': case 'jpg': case 'jpeg': case 'png': case 'gif': case 'js': case 'css': case 'mp4': case 'mp3': case 'wav': $item = '<a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'file', 'func' => 'show', 'id' => (int) $row->get( 'id' ) ), 'raw', 0, true ) . '" target="_blank">' . $item . '</a>'; break; default: $item = '<a href="' . $downloadPath . '" target="_blank">' . $item . '</a>'; break; } $download = '<a href="' . $downloadPath . '" target="_blank" title="' . htmlspecialchars( CBTxt::T( 'Click to Download' ) ) . '" class="gjGroupDownloadIcon btn btn-xs btn-default">' . '<span class="fa fa-download"></span>' . '</a>'; } else { $download = '<button type="button" class="gjButton gjButtonDownloadFile btn btn-xs btn-default disabled">' . '<span class="fa fa-download"></span>' . '</button>'; } if ( $row->get( 'description' ) ) { $item .= ' ' . cbTooltip( 1, $row->get( 'description' ), $title, 400, null, '<span class="fa fa-info-circle text-muted"></span>' ); } $menu = array(); $_PLUGINS->trigger( 'gj_onDisplayFile', array( &$row, &$menu, $group, $user ) ); $return .= '<tr>' . '<td style="width: 1%;" class="text-center">' . $download . '</td>' . '<td style="width: 45%;" class="gjGroupFileItem text-left">' . $item . '<div class="gjGroupFileUploader small">' . CBuser::getInstance( (int) $row->get( 'user_id' ), false )->getField( 'formatname', null, 'html', 'none', 'list', 0, true ) . '</div>' . '</td>' . '<td style="width: 15%;" class="text-center"><span class="gjGroupFileTypeIcon fa fa-' . $row->icon() . '" title="' . htmlspecialchars( ( $extension ? strtoupper( $extension ) : CBTxt::T( 'Unknown' ) ) ) . '"></span></td>' . '<td style="width: 15%;" class="text-left">' . $size . '</td>' . '<td style="width: 20%;" class="text-left hidden-xs">' . '<span title="' . htmlspecialchars( $row->get( 'date' ) ) . '">' . cbFormatDate( $row->get( 'date' ), true, false, CBTxt::T( 'GROUP_FILE_DATE_FORMAT', 'M j, Y' ) ) . '</span>' . '</td>'; if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) || $menu ) { $menuItems = '<ul class="gjFileMenuItems dropdown-menu" style="display: block; position: relative; margin: 0;">'; if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjFileMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'file', 'func' => 'edit', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-edit"></span> ' . CBTxt::T( 'Edit' ) . '</a></li>'; if ( ( $row->get( 'published' ) == -1 ) && ( $group->params()->get( 'file', 1 ) == 2 ) ) { if ( $isModerator || $isOwner || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjFileMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'file', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Approve' ) . '</a></li>'; } } elseif ( $row->get( 'published' ) == 1 ) { $menuItems .= '<li class="gjFileMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to unpublish this File?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'file', 'func' => 'unpublish', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-times-circle"></span> ' . CBTxt::T( 'Unpublish' ) . '</a></li>'; } else { $menuItems .= '<li class="gjFileMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'file', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Publish' ) . '</a></li>'; } } if ( $menu ) { $menuItems .= '<li class="gjFileMenuItem">' . implode( '</li><li class="gjFileMenuItem">', $menu ) . '</li>'; } if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjFileMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to delete this File?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'file', 'func' => 'delete', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-trash-o"></span> ' . CBTxt::T( 'Delete' ) . '</a></li>'; } $menuItems .= '</ul>'; $menuAttr = cbTooltip( 1, $menuItems, null, 'auto', null, null, null, 'class="btn btn-default btn-xs" data-cbtooltip-menu="true" data-cbtooltip-classes="qtip-nostyle"' ); $return .= '<td style="width: 1%;" class="text-right">' . '<div class="gjFileMenu btn-group">' . '<button type="button" ' . trim( $menuAttr ) . '><span class="fa fa-cog"></span> <span class="fa fa-caret-down"></span></button>' . '</div>' . '</td>'; } else{ $return .= '<td style="width: 1%;"></td>'; } $return .= '</tr>'; } else { $return .= '<tr>' . '<td colspan="6" class="text-left">'; if ( $searching ) { $return .= CBTxt::T( 'No group file search results found.' ); } else { $return .= CBTxt::T( 'This group currently has no files.' ); } $return .= '</td>' . '</tr>'; } $return .= '</tbody>'; if ( $plugin->params->get( 'groups_file_paging', 1 ) && ( $pageNav->total > $pageNav->limit ) ) { $return .= '<tfoot>' . '<tr>' . '<td colspan="6" class="gjGroupFilePaging text-center">' . $pageNav->getListLinks() . '</td>' . '</tr>' . '</tfoot>'; } $return .= '</table>' . $pageNav->getLimitBox( false ) . '</form>' . '</div>'; $_PLUGINS->trigger( 'gj_onAfterDisplayFiles', array( &$return, $rows, $group, $user ) ); return $return; }
/** * render frontend replies * * @param WallTable $reply * @param WallTable[] $rows * @param cbPageNav $pageNav * @param GroupTable $group * @param UserTable $user * @param cbgjWallPlugin $plugin * @return string */ static function showReplies( $reply, $rows, $pageNav, $group, $user, $plugin ) { global $_CB_framework, $_PLUGINS; $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $messageLimit = ( ! $isModerator ? (int) $plugin->params->get( 'groups_wall_character_limit', 0 ) : 0 ); $js = "$( '.gjGroupWallNewReply:not(.gjGroupWallNewReplyOpen)' ).on( 'click', function() {" . "$( this ).find( '.gjGroupWallLimit,.gjGroupWallNewReplyFooter' ).removeClass( 'hidden' );" . "$( this ).addClass( 'gjGroupWallNewReplyOpen' );" . "$( this ).find( 'textarea' ).autosize({" . "append: ''," . "resizeDelay: 0," . "placeholder: false" . "});" . "});" . "$( '.gjGroupWallReplies .cbMoreLess' ).cbmoreless();"; if ( $messageLimit ) { $js .= "$( '.gjGroupWallNewReply textarea' ).on( 'keyup input change', function() {" . "var inputLength = $( this ).val().length;" . "if ( inputLength > " . (int) $messageLimit . " ) {" . "$( this ).val( $( this ).val().substr( 0, " . (int) $messageLimit . " ) );" . "} else {" . "$( this ).siblings( '.gjGroupWallLimit' ).find( '.gjGroupWallLimitCurrent' ).html( $( this ).val().length );" . "}" . "});"; } $_CB_framework->outputCbJQuery( $js, array( 'cbmoreless', 'autosize' ) ); $isOwner = ( $user->get( 'id' ) == $group->get( 'user_id' ) ); $userStatus = CBGroupJive::getGroupStatus( $user, $group ); $canCreate = CBGroupJive::canCreateGroupContent( $user, $group, 'wall' ); $return = null; $_PLUGINS->trigger( 'gj_onBeforeDisplayWall', array( &$return, &$rows, $group, $user ) ); $return .= '<div class="gjGroupWallReplies">' . '<div class="gjGroupWallRows">'; if ( $rows ) foreach ( $rows as $row ) { $menu = array(); $integrations = $_PLUGINS->trigger( 'gj_onDisplayWall', array( &$row, &$menu, $group, $user ) ); $cbUser = CBuser::getInstance( (int) $row->get( 'user_id' ), false ); $return .= '<div class="gjGroupWallRow">' . '<div class="gjGroupWallHeader media clearfix">' . '<div class="gjGroupWallAvatar media-left">' . $cbUser->getField( 'avatar', null, 'html', 'none', 'list', 0, true ) . '</div>' . '<div class="gjGroupWallDetails media-body">' . '<div class="cbMoreLess">' . '<div class="cbMoreLessContent">' . '<strong>' . $cbUser->getField( 'formatname', null, 'html', 'none', 'list', 0, true ) . '</strong> ' . $row->post() . '</div>' . '<div class="cbMoreLessOpen fade-edge hidden">' . '<a href="javascript: void(0);" class="cbMoreLessButton">' . CBTxt::T( 'See More' ) . '</a>' . '</div>' . '</div>' . '<div class="gjGroupWallDate text-muted small">' . cbFormatDate( $row->get( 'date' ), true, 'timeago' ) . '</div>' . '</div>' . '</div>' . ( is_array( $integrations ) && $integrations ? '<div class="gjGroupWallFooter panel-footer">' . implode( '', $integrations ) . '</div>' : null ); if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) || $menu ) { $menuItems = '<ul class="gjWallMenuItems dropdown-menu" style="display: block; position: relative; margin: 0;">'; if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjWallMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'wall', 'func' => 'edit', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-edit"></span> ' . CBTxt::T( 'Edit' ) . '</a></li>'; if ( ( $row->get( 'published' ) == -1 ) && ( $group->params()->get( 'wall', 1 ) == 2 ) ) { if ( $isModerator || $isOwner || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjWallMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'wall', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Approve' ) . '</a></li>'; } } elseif ( $row->get( 'published' ) == 1 ) { $menuItems .= '<li class="gjWallMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to unpublish this Post?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'wall', 'func' => 'unpublish', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-times-circle"></span> ' . CBTxt::T( 'Unpublish' ) . '</a></li>'; } else { $menuItems .= '<li class="gjWallMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'wall', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Publish' ) . '</a></li>'; } } if ( $menu ) { $menuItems .= '<li class="gjWallMenuItem">' . implode( '</li><li class="gjWallMenuItem">', $menu ) . '</li>'; } if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjWallMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to delete this Post?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'wall', 'func' => 'delete', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-trash-o"></span> ' . CBTxt::T( 'Delete' ) . '</a></li>'; } $menuItems .= '</ul>'; $menuAttr = cbTooltip( 1, $menuItems, null, 'auto', null, null, null, 'class="btn btn-default btn-xs" data-cbtooltip-menu="true" data-cbtooltip-classes="qtip-nostyle"' ); $return .= '<div class="gjWallMenu btn-group">' . '<button type="button" ' . trim( $menuAttr ) . '><span class="fa fa-cog"></span> <span class="fa fa-caret-down"></span></button>' . '</div>'; } $return .= '</div>'; } if ( $plugin->params->get( 'groups_wall_paging', 1 ) && ( $pageNav->total > $pageNav->limit ) ) { $return .= '<div class="gjGroupWallRow gjGroupWallPaging text-center">' . '<form action="' . $_CB_framework->pluginClassUrl( $plugin->_gjPlugin->element, true, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ) . '" method="post" name="gjGroupWallFormPaging" id="gjGroupWallFormPaging" class="gjGroupWallForm">' . $pageNav->getListLinks() . $pageNav->getLimitBox( false ) . '</form>' . '</div>'; } if ( $canCreate ) { $return .= '<div class="gjGroupWallRow gjGroupWallNewReply">' . '<form action="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'wall', 'func' => 'save' ) ) . '" method="post" name="gjGroupWallFormNewReply' . (int) $reply->get( 'id' ) . '" id="gjGroupWallFormNewReply' . (int) $reply->get( 'id' ) . '" class="gjGroupWallForm cbValidation">'; if ( $messageLimit ) { $return .= '<div class="gjGroupWallLimit small hidden">' . '<div class="gjGroupWallLimitCurrent">0</div>' . ' / <div class="gjGroupWallLimitMax">' . (int) $messageLimit . '</div>' . '</div>'; } $return .= '<textarea name="post" rows="1" class="form-control required" placeholder="' . htmlspecialchars( CBTxt::T( 'Write a reply...' ) ) . '"' . ( $messageLimit ? ' maxlength="' . (int) $messageLimit . '"' : null ) . '></textarea>' . '<div class="gjGroupWallNewReplyFooter text-right hidden">' . '<button type="submit" class="gjButton gjButtonSubmit btn btn-primary btn-xs" ' . cbValidator::getSubmitBtnHtmlAttributes() . '>' . CBTxt::T( 'Reply' ) . '</button>' . '</div>' . '<input type="hidden" name="group" value="' . (int) $group->get( 'id' ) . '" />' . '<input type="hidden" name="reply" value="' . (int) $reply->get( 'id' ) . '" />' . cbGetSpoofInputTag( 'plugin' ) . '</form>' . '</div>'; } $return .= '</div>' . '</div>'; $_PLUGINS->trigger( 'gj_onAfterDisplayWall', array( &$return, $rows, $group, $user ) ); return $return; }
/** * render frontend photos * * @param PhotoTable[] $rows * @param cbPageNav $pageNav * @param bool $searching * @param array $input * @param array $counters * @param GroupTable $group * @param UserTable $user * @param cbgjPhotoPlugin $plugin * @return string */ static function showPhotos( $rows, $pageNav, $searching, $input, &$counters, $group, $user, $plugin ) { global $_CB_framework, $_PLUGINS; $js = "$( document ).on( 'click', '.gjGroupPhotoImageScrollLeftIcon', function() {" . "var previous = $( this ).data( 'previous-photo' );" . "if ( previous ) {" . "$( previous ).find( '.gjGroupPhotoItem' ).click();" . "}" . "});" . "$( document ).on( 'click', '.gjGroupPhotoImageScrollRightIcon', function() {" . "var next = $( this ).data( 'next-photo' );" . "if ( next ) {" . "$( next ).find( '.gjGroupPhotoItem' ).click();" . "}" . "});"; $_CB_framework->outputCbJQuery( $js ); $counters[] = '<span class="gjGroupPhotoIcon fa-before fa-photo"> ' . CBTxt::T( 'GROUP_PHOTOS_COUNT', '%%COUNT%% Photo|%%COUNT%% Photos', array( '%%COUNT%%' => (int) $pageNav->total ) ) . '</span>'; initToolTip(); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $isOwner = ( $user->get( 'id' ) == $group->get( 'user_id' ) ); $userStatus = CBGroupJive::getGroupStatus( $user, $group ); $canCreate = CBGroupJive::canCreateGroupContent( $user, $group, 'photo' ); $canSearch = ( $plugin->params->get( 'groups_photo_search', 1 ) && ( $searching || $pageNav->total ) ); $return = null; $_PLUGINS->trigger( 'gj_onBeforeDisplayPhotos', array( &$return, &$rows, $group, $user ) ); $return .= '<div class="gjGroupPhoto">' . '<form action="' . $_CB_framework->pluginClassUrl( $plugin->_gjPlugin->element, true, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $group->get( 'id' ) ) ) . '" method="post" name="gjGroupPhotoForm" id="gjGroupPhotoForm" class="gjGroupPhotoForm">'; if ( $canCreate || $canSearch ) { $return .= '<div class="gjHeader gjGroupPhotoHeader row">'; if ( $canCreate ) { $return .= '<div class="' . ( ! $canSearch ? 'col-sm-12' : 'col-sm-8' ) . ' text-left">' . '<button type="button" onclick="window.location.href=\'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'photo', 'func' => 'new', 'group' => (int) $group->get( 'id' ) ) ) . '\';" class="gjButton gjButtonNewPhoto btn btn-success"><span class="fa fa-plus-circle"></span> ' . CBTxt::T( 'New Photo' ) . '</button>' . '</div>'; } if ( $canSearch ) { $return .= '<div class="' . ( ! $canCreate ? 'col-sm-offset-8 ' : null ) . 'col-sm-4 text-right">' . '<div class="input-group">' . '<span class="input-group-addon"><span class="fa fa-search"></span></span>' . $input['search'] . '</div>' . '</div>'; } $return .= '</div>'; } $i = 0; $return .= '<div class="gjGroupPhotoRows">'; if ( $rows ) foreach ( $rows as $row ) { $rowCounters = array(); $content = null; $menu = array(); $_PLUGINS->trigger( 'gj_onDisplayPhoto', array( &$row, &$rowCounters, &$content, &$menu, $group, $user ) ); $title = ( $row->get( 'title' ) ? htmlspecialchars( $row->get( 'title' ) ) : $row->name() ); $item = $title; $logo = null; if ( $row->exists() ) { $showPath = $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'photo', 'func' => 'show', 'id' => (int) $row->get( 'id' ) ), 'raw', 0, true ); $image = '<div class="gjGroupPhotoImageContainer">'; if ( $pageNav->total > 1 ) { $image .= '<div class="gjGroupPhotoImageScrollLeft">' . '<table>' . '<tr>' . '<td>' . '<span class="gjGroupPhotoImageScrollLeftIcon fa fa-chevron-left" data-previous-photo=".gjGroupPhotoRow' . ( $i == 0 ? ( count( $rows ) - 1 ) : ( $i - 1 ) ) . '"></span>' . '</td>' . '</tr>' . '</table>' . '</div>'; } $image .= '<div style="background-image: url(' . $showPath . ')" class="gjGroupPhotoImage"></div>' . '<div class="gjGroupPhotoImageInfo">' . '<div class="gjGroupPhotoImageInfoRow">' . '<div class="gjGroupPhotoImageInfoTitle col-sm-8 text-left"><strong>' . $title . '</strong></div>' . '<div class="gjGroupPhotoImageInfoOriginal col-sm-4 text-right">' . '<a href="' . $showPath . '" target="_blank">' . CBTxt::T( 'Original' ) . '</a>' . '</div>' . '</div>'; if ( $row->get( 'description' ) ) { $image .= '<div class="gjGroupPhotoImageInfoRow">' . '<div class="gjGroupPhotoImageInfoDescription col-sm-8 text-left">' . htmlspecialchars( $row->get( 'description' ) ) . '</div>' . '<div class="gjGroupPhotoImageInfoDownload col-sm-4 text-right">' . '</div>' . '</div>'; } $image .= '</div>'; if ( $pageNav->total > 1 ) { $image .= '<div class="gjGroupPhotoImageScrollRight">' . '<table>' . '<tr>' . '<td>' . '<span class="gjGroupPhotoImageScrollRightIcon fa fa-chevron-right" data-next-photo=".gjGroupPhotoRow' . ( isset( $rows[$i+1] ) ? ( $i + 1 ) : 0 ) . '"></span>' . '</td>' . '</tr>' . '</table>' . '</div>'; } $image .= '</div>'; $item = cbTooltip( 1, $image, null, array( '80%', '80%' ), null, $item, 'javascript: void(0);', 'class="gjGroupPhotoItem" data-cbtooltip-modal="true" data-cbtooltip-open-solo="document" data-cbtooltip-classes="gjGroupPhotoImageModal"' ); $logo = cbTooltip( 1, $image, null, array( '80%', '80%' ), null, '<div style="background-image: url(' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'photo', 'func' => 'preview', 'id' => (int) $row->get( 'id' ) ), 'raw', 0, true ) . ')" class="gjGroupPhotoLogo"></div>', 'javascript: void(0);', 'class="gjGroupPhotoLogo" data-cbtooltip-modal="true" data-cbtooltip-open-solo="document" data-cbtooltip-classes="gjGroupPhotoImageModal"' ); } $return .= '<div class="gjGroupPhotoRow gjGroupPhotoRow' . $i . ' gjContainerBox img-thumbnail">' . '<div class="gjContainerBoxHeader">' . '<div class="gjContainerBoxCanvas">' . $logo . '</div>' . '</div>' . '<div class="gjContainerBoxBody text-left">' . '<div class="gjContainerBoxTitle">' . $item . '</div>' . '<div class="gjContainerBoxCounters text-muted small row">' . '<div class="gjGroupPhotoPublisher gjContainerBoxCounter col-sm-6">' . CBuser::getInstance( (int) $row->get( 'user_id' ), false )->getField( 'formatname', null, 'html', 'none', 'list', 0, true ) . '</div>' . '<div class="gjContainerBoxCounter col-sm-6 text-right">' . '<span title="' . htmlspecialchars( $row->get( 'date' ) ) . '">' . cbFormatDate( $row->get( 'date' ), true, false, CBTxt::T( 'GROUP_PHOTO_DATE_FORMAT', 'M j, Y' ) ) . '</span>' . '</div>' . ( $rowCounters ? '<div class="gjContainerBoxCounter col-sm-6">' . implode( '</div><div class="gjContainerBoxCounter col-sm-6">', $rowCounters ) . '</div>' : null ) . '</div>' . ( $content ? '<div class="gjContainerBoxContent">' . $content . '</div>' : null ) . ( $row->get( 'description' ) ? '<div class="gjContainerBoxDescription">' . cbTooltip( 1, $row->get( 'description' ), $row->name(), 400, null, '<span class="fa fa-info-circle text-muted"></span>' ) . '</div>' : null ); if ( ( $isModerator || $isOwner || ( $userStatus >= 2 ) ) && ( $row->get( 'published' ) == -1 ) && ( $group->params()->get( 'photo', 1 ) == 2 ) ) { $return .= '<div class="gjContainerBoxButton text-right">' . '<button type="button" onclick="window.location.href=\'' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'photo', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '\';" class="gjButton gjButtonApprove btn btn-xs btn-success">' . CBTxt::T( 'Approve' ) . '</button>' . '</div>'; } $return .= '</div>'; if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) || $menu ) { $menuItems = '<ul class="gjPhotoMenuItems dropdown-menu" style="display: block; position: relative; margin: 0;">'; if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjPhotoMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'photo', 'func' => 'edit', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-edit"></span> ' . CBTxt::T( 'Edit' ) . '</a></li>'; if ( ( $row->get( 'published' ) == -1 ) && ( $group->params()->get( 'photo', 1 ) == 2 ) ) { if ( $isModerator || $isOwner || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjPhotoMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'photo', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Approve' ) . '</a></li>'; } } elseif ( $row->get( 'published' ) == 1 ) { $menuItems .= '<li class="gjPhotoMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to unpublish this Photo?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'photo', 'func' => 'unpublish', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-times-circle"></span> ' . CBTxt::T( 'Unpublish' ) . '</a></li>'; } else { $menuItems .= '<li class="gjPhotoMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'photo', 'func' => 'publish', 'id' => (int) $row->get( 'id' ) ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Publish' ) . '</a></li>'; } } if ( $menu ) { $menuItems .= '<li class="gjPhotoMenuItem">' . implode( '</li><li class="gjPhotoMenuItem">', $menu ) . '</li>'; } if ( $isModerator || $isOwner || ( $user->get( 'id' ) == $row->get( 'user_id' ) ) || ( $userStatus >= 2 ) ) { $menuItems .= '<li class="gjPhotoMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to delete this Photo?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'photo', 'func' => 'delete', 'id' => (int) $row->get( 'id' ) ) ) . '\'; })"><span class="fa fa-trash-o"></span> ' . CBTxt::T( 'Delete' ) . '</a></li>'; } $menuItems .= '</ul>'; $menuAttr = cbTooltip( 1, $menuItems, null, 'auto', null, null, null, 'class="btn btn-default btn-xs" data-cbtooltip-menu="true" data-cbtooltip-classes="qtip-nostyle"' ); $return .= '<div class="gjContainerBoxMenu">' . '<div class="gjPhotoMenu btn-group">' . '<button type="button" ' . trim( $menuAttr ) . '><span class="fa fa-cog"></span> <span class="fa fa-caret-down"></span></button>' . '</div>' . '</div>'; } $return .= '</div>'; $i++; } else { if ( $searching ) { $return .= CBTxt::T( 'No group photo search results found.' ); } else { $return .= CBTxt::T( 'This group currently has no photos.' ); } } $return .= '</div>'; if ( $plugin->params->get( 'groups_photo_paging', 1 ) && ( $pageNav->total > $pageNav->limit ) ) { $return .= '<div class="gjGroupPhotoPaging text-center">' . $pageNav->getListLinks() . '</div>'; } $return .= $pageNav->getLimitBox( false ) . '</form>' . '</div>'; $_PLUGINS->trigger( 'gj_onAfterDisplayPhotos', array( &$return, $rows, $group, $user ) ); return $return; }