/** * save group * * @param int $id * @param UserTable $user */ private function saveGroupEdit( $id, $user ) { global $_CB_framework, $_PLUGINS; $row = CBGroupJive::getGroup( $id ); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $categoryId = $this->input( 'category', null, GetterInterface::INT ); if ( $categoryId === null ) { $category = $row->category(); } else { $category = CBGroupJive::getCategory( $categoryId ); } if ( $row->get( 'id' ) ) { $returnUrl = $_CB_framework->pluginClassUrl( $this->element, false, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $row->get( 'id' ) ) ); } else { $returnUrl = $_CB_framework->pluginClassUrl( $this->element, false, array( 'action' => 'categories', 'func' => 'show', 'id' => (int) $category->get( 'id' ) ) ); } if ( ! $isModerator ) { if ( ( ! $category->get( 'id' ) ) && ( ! $this->params->get( 'groups_uncategorized', 1 ) ) ) { CBGroupJive::returnRedirect( $returnUrl, CBTxt::T( 'Category does not exist.' ), 'error' ); } elseif ( $category->get( 'id' ) && ( ( ! $category->get( 'published' ) ) || ( ! CBGroupJive::canAccess( (int) $category->get( 'access' ), (int) $user->get( 'id' ) ) ) ) ) { CBGroupJive::returnRedirect( $returnUrl, CBTxt::T( 'You do not have access to this category.' ), 'error' ); } elseif ( $row->get( 'id' ) ) { if ( $user->get( 'id' ) != $row->get( 'user_id' ) ) { CBGroupJive::returnRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to edit this group.' ), 'error' ); } } elseif ( ! CBGroupJive::canCreateGroup( $user, $category ) ) { if ( $category->get( 'id' ) ) { CBGroupJive::returnRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to create a group in this category.' ), 'error' ); } else { CBGroupJive::returnRedirect( $returnUrl, CBTxt::T( 'You do not have sufficient permissions to create a group.' ), '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' ) ) ); } $row->set( 'published', ( $isModerator || ( $row->get( 'id' ) && ( $row->get( 'published' ) != -1 ) ) || ( ! $this->params->get( 'groups_create_approval', 0 ) ) ? (int) $this->input( 'post/published', $row->get( 'published', 1 ), GetterInterface::INT ) : -1 ) ); $row->set( 'category', (int) $category->get( 'id' ) ); $row->set( 'type', (int) $this->input( 'post/type', $row->get( 'type', 1 ), GetterInterface::INT ) ); $row->set( 'name', $this->input( 'post/name', $row->get( 'name' ), GetterInterface::STRING ) ); $row->set( 'description', $this->input( 'post/description', $row->get( 'description' ), GetterInterface::STRING ) ); $row->set( 'ordering', (int) $row->get( 'ordering', 1 ) ); 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 ( ( ! $isModerator ) && $this->params->get( 'groups_create_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_FAILED_TO_SAVE', 'Group failed to save! Error: [error]', array( '[error]' => $row->getError() ) ), 'error' ); $this->showGroupEdit( $id, $user ); return; } if ( $row->getError() || ( ! $row->store() ) ) { $_CB_framework->enqueueMessage( CBTxt::T( 'GROUP_FAILED_TO_SAVE', 'Group failed to save! Error: [error]', array( '[error]' => $row->getError() ) ), 'error' ); $this->showGroupEdit( $id, $user ); return; } if ( $row->get( 'published' ) == -1 ) { if ( $new ) { if ( $this->params->get( 'groups_create_approval_notify', 1 ) ) { CBGroupJive::sendNotification( 3, (int) $row->get( 'user_id' ), null, CBTxt::T( 'Group create request awaiting approval' ), CBTxt::T( '[user] has created the group [group] and is awaiting approval!' ), $row ); } CBGroupJive::returnRedirect( $returnUrl, CBTxt::T( 'Group created successfully and awaiting approval!' ) ); } else { CBGroupJive::returnRedirect( $returnUrl, CBTxt::T( 'Group saved successfully and awaiting approval!' ) ); } } else { if ( $new ) { CBGroupJive::returnRedirect( $returnUrl, CBTxt::T( 'Group created successfully!' ) ); } else { CBGroupJive::returnRedirect( $returnUrl, CBTxt::T( 'Group saved successfully!' ) ); } } }
/** * render frontend categories * * @param CategoryTable[] $rows * @param cbPageNav $pageNav * @param bool $searching * @param array $input * @param UserTable $user * @param CBplug_cbgroupjive $plugin * @return string */ static function showCategories( $rows, $pageNav, $searching, $input, $user, $plugin ) { global $_CB_framework, $_PLUGINS; $_CB_framework->setPageTitle( CBTxt::T( 'Categories' ) ); initToolTip(); $canCreateGroup = CBGroupJive::canCreateGroup( $user ); $canSearch = ( $plugin->params->get( 'categories_search', 1 ) && ( $searching || $pageNav->total ) ); $return = null; $_PLUGINS->trigger( 'gj_onBeforeDisplayCategories', array( &$return, &$rows, $user ) ); $return .= '<div class="gjCategories">' . '<form action="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'categories', 'func' => 'all' ) ) . '" method="post" name="gjCategoriesForm" id="gjCategoriesForm" class="gjCategoriesForm">'; if ( $canCreateGroup || $canSearch ) { $return .= '<div class="gjHeader gjCategoriesHeader row">'; if ( $canCreateGroup ) { $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' => 'groups', 'func' => 'new', 'return' => CBGroupJive::getReturn() ) ) . '\';" class="gjButton gjButtonNewGroup btn btn-success"><span class="fa fa-plus-circle"></span> ' . CBTxt::T( 'New Group' ) . '</button>' . '</div>'; } if ( $canSearch ) { $return .= '<div class="' . ( ! $canCreateGroup ? '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="gjCategoriesRows">'; if ( $rows ) foreach ( $rows as $row ) { $counters = array(); $content = null; $_PLUGINS->trigger( 'gj_onDisplayCategory', array( &$row, &$counters, &$content, $user ) ); $return .= '<div class="gjCategoriesCategory gjContainerBox img-thumbnail">' . '<div class="gjContainerBoxHeader">' . '<div class="gjContainerBoxCanvas text-left">' . $row->canvas( true, true ) . '</div>' . '<div class="gjContainerBoxLogo text-center">' . $row->logo( true, true, true ) . '</div>' . '</div>' . '<div class="gjContainerBoxBody text-left">' . '<div class="gjContainerBoxTitle">' . '<strong><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'categories', 'func' => 'show', 'id' => (int) $row->get( 'id' ) ) ) . '">' . CBTxt::T( $row->get( 'name' ) ) . '</a></strong>' . '</div>' . '<div class="gjContainerBoxCounters text-muted small row">' . '<div class="gjContainerBoxCounter ' . ( $counters ? 'col-sm-6' : 'col-sm-12' ) . '"><span class="gjCategoryGroupsIcon fa-before fa-users"> ' . CBTxt::T( 'GROUPS_COUNT', '%%COUNT%% Group|%%COUNT%% Groups', array( '%%COUNT%%' => (int) $row->get( '_groups', 0 ) ) ) . '</span></div>' . ( $counters ? '<div class="gjContainerBoxCounter col-sm-6">' . implode( '</div><div class="gjContainerBoxCounter col-sm-6">', $counters ) . '</div>' : null ) . '</div>' . ( $content ? '<div class="gjContainerBoxContent">' . $content . '</div>' : null ) . ( $row->get( 'description' ) ? '<div class="gjContainerBoxDescription">' . cbTooltip( 1, CBTxt::T( $row->get( 'description' ) ), CBTxt::T( $row->get( 'name' ) ), 400, null, '<span class="fa fa-info-circle text-muted"></span>' ) . '</div>' : null ) . '</div>' . '</div>'; } else { if ( $searching ) { $return .= CBTxt::T( 'No category search results found.' ); } else { $return .= CBTxt::T( 'There are no categories available.' ); } } $return .= '</div>'; if ( $plugin->params->get( 'categories_paging', 1 ) && ( $pageNav->total > $pageNav->limit ) ) { $return .= '<div class="gjCategoriesPaging text-center">' . $pageNav->getListLinks() . '</div>'; } $return .= $pageNav->getLimitBox( false ) . '</form>' . '</div>'; $_PLUGINS->trigger( 'gj_onAfterDisplayCategories', array( &$return, &$rows, $user ) ); $_CB_framework->setMenuMeta(); echo $return; }
/** * prepare frontend tab render * * @param TabTable $tab * @param UserTable $user * @param int $ui * @return null|string */ public function getDisplayTab( $tab, $user, $ui ) { global $_CB_framework, $_CB_database; if ( ! ( $tab->params instanceof ParamsInterface ) ) { $tab->params = new Registry( $tab->params ); } $viewer = CBuser::getMyUserDataInstance(); $isModerator = CBGroupJive::isModerator( $viewer->get( 'id' ) ); $isOwner = ( $viewer->get( 'id' ) == $user->get( 'id' ) ); CBGroupJive::getTemplate( 'tab' ); $limit = (int) $tab->params->get( 'tab_limit', 30 ); $limitstart = $_CB_framework->getUserStateFromRequest( 'gj_tab_limitstart{com_comprofiler}', 'gj_tab_limitstart' ); $search = $_CB_framework->getUserStateFromRequest( 'gj_tab_search{com_comprofiler}', 'gj_tab_search' ); $where = null; if ( $search && $tab->params->get( 'tab_search', 1 ) ) { $where .= "\n AND ( g." . $_CB_database->NameQuote( 'name' ) . " LIKE " . $_CB_database->Quote( '%' . $_CB_database->getEscaped( $search, true ) . '%', false ) . " OR g." . $_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_groups' ) . " AS g"; if ( ! $isModerator ) { $query .= "\n LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_categories' ) . " AS c" . ' ON c.' . $_CB_database->NameQuote( 'id' ) . ' = g.' . $_CB_database->NameQuote( 'category' ); } $query .= "\n LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_users' ) . " AS u" . ' ON u.' . $_CB_database->NameQuote( 'group' ) . ' = g.' . $_CB_database->NameQuote( 'id' ) . ' AND u.' . $_CB_database->NameQuote( 'user_id' ) . ' = ' . (int) $user->get( 'id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_invites' ) . " AS i" . ' ON i.' . $_CB_database->NameQuote( 'group' ) . ' = g.' . $_CB_database->NameQuote( 'id' ) . ' AND i.' . $_CB_database->NameQuote( 'accepted' ) . ' = ' . $_CB_database->Quote( '0000-00-00 00:00:00' ) . ' AND ( ( i.' . $_CB_database->NameQuote( 'email' ) . ' = ' . $_CB_database->Quote( $user->get( 'email' ) ) . ' AND i.' . $_CB_database->NameQuote( 'email' ) . ' != "" )' . ' OR ( i.' . $_CB_database->NameQuote( 'user' ) . ' = ' . (int) $user->get( 'id' ) . ' AND i.' . $_CB_database->NameQuote( 'user' ) . ' > 0 ) )'; if ( $isOwner ) { $query .= "\n WHERE ( g." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ); if ( ! $isModerator ) { $query .= ' OR ( g.' . $_CB_database->NameQuote( 'published' ) . ' = 1' . ' AND ( u.' . $_CB_database->NameQuote( 'status' ) . ' IN ( 0, 1, 2, 3 )' . ' OR i.' . $_CB_database->NameQuote( 'id' ) . ' IS NOT NULL ) ) )'; } else { $query .= ' OR u.' . $_CB_database->NameQuote( 'status' ) . ' IN ( 0, 1, 2, 3 )' . ' OR i.' . $_CB_database->NameQuote( 'id' ) . ' IS NOT NULL )'; } } else { $query .= "\n LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_users' ) . " AS mu" . ' ON mu.' . $_CB_database->NameQuote( 'group' ) . ' = g.' . $_CB_database->NameQuote( 'id' ) . ' AND mu.' . $_CB_database->NameQuote( 'user_id' ) . ' = ' . (int) $viewer->get( 'id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_invites' ) . " AS mi" . ' ON mi.' . $_CB_database->NameQuote( 'group' ) . ' = g.' . $_CB_database->NameQuote( 'id' ) . ' AND mi.' . $_CB_database->NameQuote( 'accepted' ) . ' = ' . $_CB_database->Quote( '0000-00-00 00:00:00' ) . ' AND ( ( mi.' . $_CB_database->NameQuote( 'email' ) . ' = ' . $_CB_database->Quote( $viewer->get( 'email' ) ) . ' AND mi.' . $_CB_database->NameQuote( 'email' ) . ' != "" )' . ' OR ( mi.' . $_CB_database->NameQuote( 'user' ) . ' = ' . (int) $viewer->get( 'id' ) . ' AND mi.' . $_CB_database->NameQuote( 'user' ) . ' > 0 ) )' . "\n WHERE ( g." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ); if ( ! $isModerator ) { $query .= ' OR ( g.' . $_CB_database->NameQuote( 'published' ) . ' = 1' . ' AND u.' . $_CB_database->NameQuote( 'status' ) . ' IN ( 1, 2, 3 ) ) )' . "\n AND ( g." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $viewer->get( 'id' ) . ' OR ( g.' . $_CB_database->NameQuote( 'published' ) . ' = 1' . ' AND ( g.' . $_CB_database->NameQuote( 'type' ) . ' IN ( 1, 2 )' . ' OR mu.' . $_CB_database->NameQuote( 'status' ) . ' IN ( 0, 1, 2, 3 )' . ' OR mi.' . $_CB_database->NameQuote( 'id' ) . ' IS NOT NULL ) ) )'; } else { $query .= ' OR u.' . $_CB_database->NameQuote( 'status' ) . ' IN ( 1, 2, 3 ) )'; } } if ( ! $isModerator ) { $query .= "\n AND ( ( c." . $_CB_database->NameQuote( 'published' ) . " = 1" . ' AND c.' . $_CB_database->NameQuote( 'access' ) . ' IN ' . $_CB_database->safeArrayOfIntegers( CBGroupJive::getAccess( (int) $user->get( 'id' ) ) ) . ' AND c.' . $_CB_database->NameQuote( 'access' ) . ' IN ' . $_CB_database->safeArrayOfIntegers( CBGroupJive::getAccess( (int) $viewer->get( 'id' ) ) ) . ' )' . ( $this->params->get( 'groups_uncategorized', 1 ) ? ' OR g.' . $_CB_database->NameQuote( 'category' ) . ' = 0 )' : ' )' ); } $query .= $where; $_CB_database->setQuery( $query ); $total = (int) $_CB_database->loadResult(); if ( ( ! $total ) && ( ! $searching ) && ( ( ! $isOwner ) || ( $isOwner && ( ! CBGroupJive::canCreateGroup( $user ) ) ) ) && ( ! Application::Config()->get( 'showEmptyTabs', 1 ) ) ) { return null; } $pageNav = new cbPageNav( $total, $limitstart, $limit ); $pageNav->setInputNamePrefix( 'gj_tab_' ); switch( (int) $tab->params->get( 'tab_orderby', 1 ) ) { case 2: $orderBy = 'g.' . $_CB_database->NameQuote( 'ordering' ) . ' DESC'; break; case 3: $orderBy = 'g.' . $_CB_database->NameQuote( 'date' ) . ' ASC'; break; case 4: $orderBy = 'g.' . $_CB_database->NameQuote( 'date' ) . ' DESC'; break; case 5: $orderBy = 'g.' . $_CB_database->NameQuote( 'name' ) . ' ASC'; break; case 6: $orderBy = 'g.' . $_CB_database->NameQuote( 'name' ) . ' DESC'; break; case 7: $orderBy = $_CB_database->NameQuote( '_users' ) . ' ASC'; break; case 8: $orderBy = $_CB_database->NameQuote( '_users' ) . ' DESC'; break; case 1: default: $orderBy = 'g.' . $_CB_database->NameQuote( 'ordering' ) . ' ASC'; break; } $users = 'SELECT COUNT(*)' . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_users' ) . " AS uc" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__comprofiler' ) . " AS uccb" . ' ON uccb.' . $_CB_database->NameQuote( 'id' ) . ' = uc.' . $_CB_database->NameQuote( 'user_id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__users' ) . " AS ucj" . ' ON ucj.' . $_CB_database->NameQuote( 'id' ) . ' = uccb.' . $_CB_database->NameQuote( 'id' ) . "\n WHERE uc." . $_CB_database->NameQuote( 'group' ) . " = g." . $_CB_database->NameQuote( 'id' ) . "\n AND uccb." . $_CB_database->NameQuote( 'approved' ) . " = 1" . "\n AND uccb." . $_CB_database->NameQuote( 'confirmed' ) . " = 1" . "\n AND ucj." . $_CB_database->NameQuote( 'block' ) . " = 0"; if ( ! $isModerator ) { $users .= "\n AND ( g." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $viewer->get( 'id' ) . ( ! $isOwner ? ' OR mu.' . $_CB_database->NameQuote( 'status' ) . ' >= 2' : null ) . ' OR uc.' . $_CB_database->NameQuote( 'status' ) . ' >= 1 )'; } if ( ! $this->params->get( 'groups_users_owner', 1 ) ) { $users .= "\n AND uc." . $_CB_database->NameQuote( 'status' ) . " != 4"; } $query = 'SELECT g.*' . ', c.' . $_CB_database->NameQuote( 'name' ) . ' AS _category_name'; if ( $isOwner ) { $query .= ', u.' . $_CB_database->NameQuote( 'status' ) . ' AS _user_status' . ', i.' . $_CB_database->NameQuote( 'id' ) . ' AS _invite_id'; } else { $query .= ', mu.' . $_CB_database->NameQuote( 'status' ) . ' AS _user_status' . ', mi.' . $_CB_database->NameQuote( 'id' ) . ' AS _invite_id'; } $query .= ', ( ' . $users . ' ) AS _users' . "\n FROM " . $_CB_database->NameQuote( '#__groupjive_groups' ) . " AS g" . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_categories' ) . " AS c" . ' ON c.' . $_CB_database->NameQuote( 'id' ) . ' = g.' . $_CB_database->NameQuote( 'category' ) . "\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 LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_invites' ) . " AS i" . ' ON i.' . $_CB_database->NameQuote( 'group' ) . ' = g.' . $_CB_database->NameQuote( 'id' ) . ' AND i.' . $_CB_database->NameQuote( 'accepted' ) . ' = ' . $_CB_database->Quote( '0000-00-00 00:00:00' ) . ' AND ( ( i.' . $_CB_database->NameQuote( 'email' ) . ' = ' . $_CB_database->Quote( $user->get( 'email' ) ) . ' AND i.' . $_CB_database->NameQuote( 'email' ) . ' != "" )' . ' OR ( i.' . $_CB_database->NameQuote( 'user' ) . ' = ' . (int) $user->get( 'id' ) . ' AND i.' . $_CB_database->NameQuote( 'user' ) . ' > 0 ) )'; if ( $isOwner ) { $query .= "\n WHERE ( g." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ); if ( ! $isModerator ) { $query .= ' OR ( g.' . $_CB_database->NameQuote( 'published' ) . ' = 1' . ' AND ( u.' . $_CB_database->NameQuote( 'status' ) . ' IN ( 0, 1, 2, 3 )' . ' OR i.' . $_CB_database->NameQuote( 'id' ) . ' IS NOT NULL ) ) )'; } else { $query .= ' OR u.' . $_CB_database->NameQuote( 'status' ) . ' IN ( 0, 1, 2, 3 )' . ' OR i.' . $_CB_database->NameQuote( 'id' ) . ' IS NOT NULL )'; } } else { $query .= "\n LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_users' ) . " AS mu" . ' ON mu.' . $_CB_database->NameQuote( 'user_id' ) . ' = ' . (int) $viewer->get( 'id' ) . ' AND mu.' . $_CB_database->NameQuote( 'group' ) . ' = g.' . $_CB_database->NameQuote( 'id' ) . "\n LEFT JOIN " . $_CB_database->NameQuote( '#__groupjive_invites' ) . " AS mi" . ' ON mi.' . $_CB_database->NameQuote( 'group' ) . ' = g.' . $_CB_database->NameQuote( 'id' ) . ' AND mi.' . $_CB_database->NameQuote( 'accepted' ) . ' = ' . $_CB_database->Quote( '0000-00-00 00:00:00' ) . ' AND ( ( mi.' . $_CB_database->NameQuote( 'email' ) . ' = ' . $_CB_database->Quote( $viewer->get( 'email' ) ) . ' AND mi.' . $_CB_database->NameQuote( 'email' ) . ' != "" )' . ' OR ( mi.' . $_CB_database->NameQuote( 'user' ) . ' = ' . (int) $viewer->get( 'id' ) . ' AND mi.' . $_CB_database->NameQuote( 'user' ) . ' > 0 ) )' . "\n WHERE ( g." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $user->get( 'id' ); if ( ! $isModerator ) { $query .= ' OR ( g.' . $_CB_database->NameQuote( 'published' ) . ' = 1' . ' AND u.' . $_CB_database->NameQuote( 'status' ) . ' IN ( 1, 2, 3 ) ) )' . "\n AND ( g." . $_CB_database->NameQuote( 'user_id' ) . " = " . (int) $viewer->get( 'id' ) . ' OR ( g.' . $_CB_database->NameQuote( 'published' ) . ' = 1' . ' AND ( g.' . $_CB_database->NameQuote( 'type' ) . ' IN ( 1, 2 )' . ' OR mu.' . $_CB_database->NameQuote( 'status' ) . ' IN ( 0, 1, 2, 3 )' . ' OR mi.' . $_CB_database->NameQuote( 'id' ) . ' IS NOT NULL ) ) )'; } else { $query .= ' OR u.' . $_CB_database->NameQuote( 'status' ) . ' IN ( 1, 2, 3 ) )'; } } if ( ! $isModerator ) { $query .= "\n AND ( ( c." . $_CB_database->NameQuote( 'published' ) . " = 1" . ' AND c.' . $_CB_database->NameQuote( 'access' ) . ' IN ' . $_CB_database->safeArrayOfIntegers( CBGroupJive::getAccess( (int) $user->get( 'id' ) ) ) . ' AND c.' . $_CB_database->NameQuote( 'access' ) . ' IN ' . $_CB_database->safeArrayOfIntegers( CBGroupJive::getAccess( (int) $viewer->get( 'id' ) ) ) . ' )' . ( $this->params->get( 'groups_uncategorized', 1 ) ? ' OR g.' . $_CB_database->NameQuote( 'category' ) . ' = 0 )' : ' )' ); } $query .= $where . "\n ORDER BY " . $orderBy; if ( $tab->params->get( 'tab_paging', 1 ) ) { $_CB_database->setQuery( $query, $pageNav->limitstart, $pageNav->limit ); } else { $_CB_database->setQuery( $query ); } $rows = $_CB_database->loadObjectList( null, '\CB\Plugin\GroupJive\Table\GroupTable', array( $_CB_database ) ); $input['search'] = '<input type="text" name="gj_tab_search" value="' . htmlspecialchars( $search ) . '" onchange="document.gjTabForm.submit();" placeholder="' . htmlspecialchars( CBTxt::T( 'Search Groups...' ) ) . '" class="form-control" />'; CBGroupJive::getGroup( $rows ); CBGroupJive::preFetchUsers( $rows ); $class = $this->params->get( 'general_class', null ); $return = '<div class="cbGroupJive' . ( $class ? ' ' . htmlspecialchars( $class ) : null ) . '">' . '<div class="cbGroupJiveInner">' . HTML_groupjiveTab::showTab( $rows, $pageNav, $searching, $input, $viewer, $user, $tab, $this ) . '</div>' . '</div>'; return $return; }
/** * render frontend groups * * @param int $mode 0: All, 1: My, 2: Joined, 3: Invited, 4: Approved, 5: Category (unused), 6: Profile (unused), 7: Module (unused) * @param GroupTable[] $rows * @param cbPageNav $pageNav * @param bool $searching * @param array $input * @param UserTable $user * @param CBplug_cbgroupjive $plugin * @return string */ static function showGroups( $mode, $rows, $pageNav, $searching, $input, $user, $plugin ) { global $_CB_framework, $_PLUGINS; $_CB_framework->setPageTitle( ( $mode == 4 ? CBTxt::T( 'Group Approval' ) : ( $mode == 3 ? CBTxt::T( 'Group Invites' ) : ( $mode == 2 ? CBTxt::T( 'Joined Groups' ) : ( $mode == 1 ? CBTxt::T( 'My Groups' ) : CBTxt::T( 'Groups' ) ) ) ) ) ); initToolTip(); $isModerator = CBGroupJive::isModerator( $user->get( 'id' ) ); $canCreateGroup = CBGroupJive::canCreateGroup( $user ); $canSearch = ( $plugin->params->get( 'groups_search', 1 ) && ( $searching || $pageNav->total ) ); $return = null; $_PLUGINS->trigger( 'gj_onBeforeDisplayGroups', array( &$return, &$rows, $mode, $user ) ); $return .= '<div class="gjGroups">' . '<form action="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'groups', 'func' => ( $mode == 4 ? 'approval' : ( $mode == 3 ? 'invited' : ( $mode == 2 ? 'joined' : ( $mode == 1 ? 'my' : 'all' ) ) ) ) ) ) . '" method="post" name="gjGroupsForm" id="gjGroupsForm" class="gjGroupsForm">'; if ( $canCreateGroup || $canSearch ) { $return .= '<div class="gjHeader gjGroupsHeader row">'; if ( $canCreateGroup ) { $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' => 'groups', 'func' => 'new', 'return' => CBGroupJive::getReturn() ) ) . '\';" class="gjButton gjButtonNewGroup btn btn-success"><span class="fa fa-plus-circle"></span> ' . CBTxt::T( 'New Group' ) . '</button>' . '</div>'; } if ( $canSearch ) { $return .= '<div class="' . ( ! $canCreateGroup ? '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="gjGroupsRows">'; if ( $rows ) foreach ( $rows as $row ) { $rowOwner = ( $user->get( 'id' ) == $row->get( 'user_id' ) ); $userStatus = CBGroupJive::getGroupStatus( $user, $row ); $counters = array(); $content = null; $menu = array(); $_PLUGINS->trigger( 'gj_onDisplayGroup', array( &$row, &$counters, &$content, &$menu, $mode, $user ) ); $return .= '<div class="gjGroupsGroup gjContainerBox img-thumbnail">' . '<div class="gjContainerBoxHeader">' . '<div class="gjContainerBoxCanvas text-left">' . $row->canvas( true, true ) . '</div>' . '<div class="gjContainerBoxLogo text-center">' . $row->logo( true, true, true ) . '</div>' . '</div>' . '<div class="gjContainerBoxBody text-left">' . '<div class="gjContainerBoxTitle">' . '<strong><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'groups', 'func' => 'show', 'id' => (int) $row->get( 'id' ) ) ) . '">' . htmlspecialchars( CBTxt::T( $row->get( 'name' ) ) ) . '</a></strong>' . '</div>'; if ( $row->get( 'category' ) ) { $return .= '<div class="gjContainerBoxSubTitle small">' . '<strong><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'categories', 'func' => 'show', 'id' => (int) $row->get( 'category' ) ) ) . '">' . htmlspecialchars( CBTxt::T( $row->get( '_category_name' ) ) ) . '</a></strong>' . '</div>'; } $return .= '<div class="gjContainerBoxCounters text-muted small row">' . '<div class="gjContainerBoxCounter col-sm-6"><span class="gjGroupTypeIcon fa-before fa-globe"> ' . $row->type() . '</span></div>' . '<div class="gjContainerBoxCounter col-sm-6"><span class="gjGroupUsersIcon fa-before fa-user"> ' . CBTxt::T( 'GROUP_USERS_COUNT', '%%COUNT%% User|%%COUNT%% Users', array( '%%COUNT%%' => (int) $row->get( '_users', 0 ) ) ) . '</span></div>' . ( $counters ? '<div class="gjContainerBoxCounter col-sm-6">' . implode( '</div><div class="gjContainerBoxCounter col-sm-6">', $counters ) . '</div>' : null ) . '</div>' . ( $content ? '<div class="gjContainerBoxContent">' . $content . '</div>' : null ) . ( $row->get( 'description' ) ? '<div class="gjContainerBoxDescription">' . cbTooltip( 1, CBTxt::T( $row->get( 'description' ) ), CBTxt::T( $row->get( 'name' ) ), 400, null, '<span class="fa fa-info-circle text-muted"></span>' ) . '</div>' : null ); if ( $isModerator && ( $row->get( 'published' ) == -1 ) && $plugin->params->get( 'groups_create_approval', 0 ) ) { $return .= '<div class="gjContainerBoxButton text-right">' . '<button type="button" onclick="window.location.href=\'' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'groups', 'func' => 'publish', 'id' => (int) $row->get( 'id' ), 'return' => CBGroupJive::getReturn() ) ) . '\';" class="gjButton gjButtonApprove btn btn-xs btn-success">' . CBTxt::T( 'Approve' ) . '</button>' . '</div>'; } elseif ( ! $rowOwner ) { if ( $userStatus === null ) { $return .= '<div class="gjContainerBoxButton text-right">' . ( $row->get( '_invite_id' ) ? '<button type="button" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to reject all invites to this Group?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'groups', 'func' => 'reject', 'id' => (int) $row->get( 'id' ), 'return' => CBGroupJive::getReturn() ) ) . '\'; })" class="gjButton gjButtonReject btn btn-xs btn-danger">' . CBTxt::T( 'Reject' ) . '</button> ' : null ) . '<button type="button" onclick="window.location.href=\'' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'groups', 'func' => 'join', 'id' => (int) $row->get( 'id' ), 'return' => CBGroupJive::getReturn() ) ) . '\';" class="gjButton gjButtonJoin btn btn-xs btn-success">' . ( $row->get( '_invite_id' ) ? CBTxt::T( 'Accept Invite' ) : CBTxt::T( 'Join' ) ) . '</button>' . '</div>'; } elseif ( $userStatus === 0 ) { $return .= '<div class="gjContainerBoxButton text-right">' . '<button type="button" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to cancel your pending join request to this Group?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'groups', 'func' => 'cancel', 'id' => (int) $row->get( 'id' ), 'return' => CBGroupJive::getReturn() ) ) . '\'; })" class="gjButton gjButtonCancel btn btn-xs btn-danger">' . CBTxt::T( 'Cancel' ) . '</button> ' . '<span class="gjButton gjButtonPending btn btn-xs btn-warning disabled">' . CBTxt::T( 'Pending Approval' ) . '</span>' . '</div>'; } } $return .= '</div>'; if ( $isModerator || $rowOwner || $menu ) { $menuItems = '<ul class="gjGroupMenuItems dropdown-menu" style="display: block; position: relative; margin: 0;">'; if ( $isModerator || $rowOwner ) { $menuItems .= '<li class="gjGroupMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'groups', 'func' => 'edit', 'id' => (int) $row->get( 'id' ), 'return' => CBGroupJive::getReturn() ) ) . '"><span class="fa fa-edit"></span> ' . CBTxt::T( 'Edit' ) . '</a></li>'; if ( ( $row->get( 'published' ) == -1 ) && $plugin->params->get( 'groups_create_approval', 0 ) ) { if ( $isModerator ) { $menuItems .= '<li class="gjGroupMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'groups', 'func' => 'publish', 'id' => (int) $row->get( 'id' ), 'return' => CBGroupJive::getReturn() ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Approve' ) . '</a></li>'; } } elseif ( $row->get( 'published' ) == 1 ) { $menuItems .= '<li class="gjGroupMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to unpublish this Group?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'groups', 'func' => 'unpublish', 'id' => (int) $row->get( 'id' ), 'return' => CBGroupJive::getReturn() ) ) . '\'; })"><span class="fa fa-times-circle"></span> ' . CBTxt::T( 'Unpublish' ) . '</a></li>'; } else { $menuItems .= '<li class="gjGroupMenuItem"><a href="' . $_CB_framework->pluginClassUrl( $plugin->element, true, array( 'action' => 'groups', 'func' => 'publish', 'id' => (int) $row->get( 'id' ), 'return' => CBGroupJive::getReturn() ) ) . '"><span class="fa fa-check"></span> ' . CBTxt::T( 'Publish' ) . '</a></li>'; } } if ( $menu ) { $menuItems .= '<li class="gjGroupMenuItem">' . implode( '</li><li class="gjGroupMenuItem">', $menu ) . '</li>'; } if ( $isModerator || $rowOwner ) { $menuItems .= '<li class="gjGroupMenuItem"><a href="javascript: void(0);" onclick="cbjQuery.cbconfirm( \'' . addslashes( CBTxt::T( 'Are you sure you want to delete this Group?' ) ) . '\' ).done( function() { window.location.href = \'' . $_CB_framework->pluginClassUrl( $plugin->element, false, array( 'action' => 'groups', 'func' => 'delete', 'id' => (int) $row->get( 'id' ), 'return' => CBGroupJive::getReturn() ) ) . '\'; })"><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="gjGroupMenu 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 search results found.' ); } else { $return .= CBTxt::T( 'There are no groups available.' ); } } $return .= '</div>'; if ( $plugin->params->get( 'groups_paging', 1 ) && ( $pageNav->total > $pageNav->limit ) ) { $return .= '<div class="gjGroupsPaging text-center">' . $pageNav->getListLinks() . '</div>'; } $return .= $pageNav->getLimitBox( false ) . '</form>' . '</div>'; $_PLUGINS->trigger( 'gj_onAfterDisplayGroups', array( &$return, &$rows, $mode, $user ) ); $_CB_framework->setMenuMeta(); echo $return; }