Skip to content

Issues-563: Updated Group Page, Issues-593 #86

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions class.groups.plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -929,8 +929,9 @@ public function base_beforeRenderDiscussionFilters_handler($sender, $args){
if ($sender instanceof CategoriesController || $sender instanceof PostController) {
$category = $sender->data('Category');
if($category) {
$groupID = val('GroupID', $category);
if($groupID) {
$categoryID = val('CategoryID', $category);
$isChallengeForums = $sender->checkChallengeForums($categoryID);
if($isChallengeForums) {
$menu['AllCategories']['IsActive'] = false;
return;
}
Expand Down Expand Up @@ -960,8 +961,9 @@ private function getMenuItemCssClassFromQuery($sender, $requestMethod){
if ($sender instanceof CategoriesController || $sender instanceof PostController) {
$category = $sender->data('Category');
if($category) {
$groupID = val('GroupID', $category);
if($groupID) {
$categoryID = val('CategoryID', $category);
$isChallengeForums = $sender->checkChallengeForums($categoryID);
if($isChallengeForums) {
$cssClass = ' Active';
}
}
Expand Down
67 changes: 58 additions & 9 deletions controllers/class.groupcontroller.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,47 +86,96 @@ public function index($GroupID = '') {
$this->setData('Group', $Group, true);

$this->title($Group->Name);
$category = $this->CategoryModel->getByCode($Group->ChallengeID);
$categoryID= val('CategoryID', $category);
$this->setData('GroupCategoryID', $categoryID);
$this->setData('Breadcrumbs', $this->buildBreadcrumbs($categoryID));

$this->setData('Breadcrumbs', $this->buildBreadcrumb($Group));
$roleResources = $this->data('ChallengeRoleResources');
$resources = $this->data('ChallengeResources');
$copilots = $this->getCopilots($resources, $roleResources);
$this->setData('Copilots', $copilots);
$groupDiscussions = $this->GroupModel->getGroupDiscussionCategories($Group);
$defaultDiscussionUrl = '/post/discussion/';
$defaultDiscussionUrl= $defaultAnnouncementUrl = '/post/discussion/';
if($Group->Type == GroupModel::TYPE_REGULAR) {
if(count($groupDiscussions) > 0) {
$defaultDiscussionUrl .= $groupDiscussions[0]['UrlCode'];
}
} else if($Group->Type == GroupModel::TYPE_CHALLENGE) {
if(count($groupDiscussions) == 1) {
$defaultDiscussionUrl .= $groupDiscussions[0]['UrlCode'];
$defaultAnnouncementUrl .= $groupDiscussions[0]['UrlCode'];
} else {
foreach ($groupDiscussions as $groupDiscussion) {
if ($groupDiscussion['Name'] == 'Code Questions') {
$defaultDiscussionUrl .= $groupDiscussion['UrlCode'];
$defaultAnnouncementUrl .= $groupDiscussion['UrlCode'];
break;
}
}
}
}

$this->setData('DefaultAnnouncementUrl', $defaultDiscussionUrl.'?announce=1');
$CategoryIDs = $this->GroupModel->getAllGroupCategoryIDs($Group->GroupID);
$Categories = $this->CategoryModel->getFull($CategoryIDs)->resultArray();
$this->setData('Categories', $Categories);

// Get category data and discussions

$this->DiscussionsPerCategory = c('Vanilla.Discussions.PerCategory', 5);
$DiscussionModel = new DiscussionModel();
$DiscussionModel->setSort(Gdn::request()->get());
$DiscussionModel->setFilters(Gdn::request()->get());
$this->setData('Sort', $DiscussionModel->getSort());
$this->setData('Filters', $DiscussionModel->getFilters());

$this->CategoryDiscussionData = [];
$Discussions = [];

foreach ($this->CategoryData->result() as $Category) {
if ($Category->CategoryID > 0) {
$this->CategoryDiscussionData[$Category->CategoryID] = $DiscussionModel->get(0, $this->DiscussionsPerCategory,
['d.CategoryID' => $Category->CategoryID, 'Announce' => '0']);
$Discussions = array_merge(
$Discussions,
$this->CategoryDiscussionData[$Category->CategoryID]->resultObject()
);
}
}
$this->setData('Discussions', $Discussions);


$this->setData('DefaultAnnouncementUrl', $defaultAnnouncementUrl.'?announce=1');
$this->setData('DefaultDiscussionUrl', $defaultDiscussionUrl);

// Find all discussions with content from after DateMarkedRead.
$discussionModel = new DiscussionModel();
$categoryIDs = $this->GroupModel->getAllGroupCategoryIDs($Group->GroupID);
$wheres = ['d.CategoryID' => $categoryIDs];
$announcementsWheres = ['d.CategoryID' => $categoryIDs, 'd.Announce > '=> 0];
//Don't use WhereRecent due to load all data including announce.
$discussions = $discussionModel->getWhere($wheres,'DateInserted', 'asc');
$announcements = $discussionModel->getAnnouncements($announcementsWheres );
$this->setData('Announcements', $announcements);
$this->setData('Discussions', $discussions);

$Path = $this->fetchViewLocation('helper_functions', 'discussions', 'vanilla', false);
if ($Path) {
include_once $Path;
}

// For GetOptions function
$Path2 = $this->fetchViewLocation('helper_functions', 'categories', 'vanilla', false);
if ($Path2) {
include_once $Path2;
}
$this->render();
}

public function __get($name) {
switch ($name) {
case 'CategoryData':
// deprecated('CategoriesController->CategoryData', "CategoriesController->data('Categories')");
$this->CategoryData = new Gdn_DataSet($this->data('Categories'), DATASET_TYPE_ARRAY);
$this->CategoryData->datasetType(DATASET_TYPE_OBJECT);
return $this->CategoryData;
}
}

private function getCopilots($resources = null, $roleResources = null) {
$copilots = [];
$roleName = 'copilot';
Expand Down
77 changes: 51 additions & 26 deletions views/group/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

$Session = Gdn::session();
$Group = $this->data('Group');
$GroupCategoryID = $this->data('GroupCategoryID');
$Owner = Gdn::userModel()->getID($Group->OwnerID);
// $Leaders = $this->data('Leaders');
// $Members = $this->data('Members');
Expand All @@ -20,6 +21,7 @@
$currentTopcoderProjectRoles = Gdn::controller()->data('ChallengeCurrentUserProjectRoles');
//$groupModel->setCurrentUserTopcoderProjectRoles($currentTopcoderProjectRoles);

$ViewLocation = $this->fetchViewLocation('discussions', 'discussions', 'vanilla');
?>
<?php echo writeGroupHeader($Group, true, $Owner);?>

Expand Down Expand Up @@ -48,32 +50,6 @@
<div class="EmptyMessage">No announcements were found.</div>
<?php } ?>
</div>
<div class="Group-Box Group-Discussions Section-DiscussionList">
<h1 class="H">Discussions</h1>
<div class="PageControls">
<div class="Button-Controls">
<?php
if($groupModel->canAddDiscussion($Group)) {
// The group category is selected automatically
echo anchor('New Discussion', $this->data('DefaultDiscussionUrl'), 'Button Primary', '');
}
?>
</div>
</div>
<?php
if (is_object($Discussions) && count($Discussions->result()) > 0) {
echo '<ul class="DataList Discussions">';
foreach ($Discussions->result() as $Discussion) {
writeDiscussion($Discussion, $this, $Session);
}
echo '</ul>'; ?>
<?php
} else {
?>
<div class="EmptyMessage">No discussions were found.</div>
<?php } ?>

</div>
<?php
// echo '<div class="Group-Info ClearFix clearfix"><div class="Group-Box Group-MembersPreview"> <div class="PageControls">'.
// '<h1 class="Groups H">Members</h1></div>';
Expand All @@ -87,6 +63,55 @@
// }
// echo '</div></div>';
?>

<?php if ($this->CategoryData->numRows() > 0): ?>
<?php foreach ($this->CategoryData->result() as $Category) :
if ($Category->CategoryID <= 0) {
continue;
}

$this->Category = $Category;
$this->DiscussionData = $this->CategoryDiscussionData[$Category->CategoryID];
$showCategory = $this->Category->DisplayAs == 'Discussions';

if(!$showCategory) {
continue;
}
?>
<div class="Group-Box Group-Discussions Section-DiscussionList">
<?php if ($this->DiscussionData->numRows() >= 0) { ?>

<h1 class="H"><?php
echo $Category->CategoryID == $GroupCategoryID? 'Discussions': htmlspecialchars($Category->Name);
?></h1>
<div class="PageControls">
<div class="Button-Controls">
<?php
if($groupModel->canAddDiscussion($Group)) {
// The group category is selected automatically
echo anchor('New Discussion', $this->data('DefaultDiscussionUrl').$Category->UrlCode, 'Button Primary', '');
}
?>
</div>
</div>
<?php if ($this->DiscussionData->numRows() > 0) {?>
<ul class="DataList Discussions">
<?php include($this->fetchViewLocation('discussions', 'discussions', 'vanilla')); ?>
</ul>

<?php } else { ?>
<div class="EmptyMessage">No discussions were found.</div>
<?php } ?>
<?php if ($this->DiscussionData->numRows() == $this->DiscussionsPerCategory) : ?>
<div class="MorePager">
<?php echo anchor(t('More Discussions'), '/categories/'.$Category->UrlCode); ?>
</div>
<?php endif; ?>

<?php } ?>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
<?php echo writeGroupMetaData($Group, $Owner, $Copilots);?>