15
15
16
16
class GroupsPlugin extends Gdn_Plugin {
17
17
const GROUPS_ROUTE = '/groups ' ;
18
+ const ROUTE_MY_GROUPS = '/groups/mine ' ;
19
+ const ROUTE_CHALLENGE_GROUPS = '/groups?filter=challenge ' ; //'/groups/challenges';
20
+ const ROUTE_REGULAR_GROUPS = '/groups?filter=regular ' ; //'/groups/regulars';
18
21
const GROUP_ROUTE = '/group/ ' ;
19
22
const GROUPS_GROUP_ADD_PERMISSION = 'Groups.Group.Add ' ;
23
+ const GROUPS_GROUP_ARCHIVE_PERMISSION = 'Groups.Group.Archive ' ;
20
24
const GROUPS_GROUP_EDIT_PERMISSION = 'Groups.Group.Edit ' ;
21
25
const GROUPS_GROUP_DELETE_PERMISSION = 'Groups.Group.Delete ' ;
22
26
const GROUPS_CATEGORY_MANAGE_PERMISSION = 'Groups.Category.Manage ' ;
@@ -79,7 +83,8 @@ private function initDefaultTopcoderRoles() {
79
83
self ::GROUPS_MODERATION_MANAGE_PERMISSION => 1 ,
80
84
self ::GROUPS_CATEGORY_MANAGE_PERMISSION => 1 ,
81
85
self ::GROUPS_GROUP_ADD_PERMISSION => 1 ,
82
- self ::GROUPS_EMAIL_INVITATIONS_PERMISSION => 1
86
+ self ::GROUPS_EMAIL_INVITATIONS_PERMISSION => 1 ,
87
+ self ::GROUPS_GROUP_ARCHIVE_PERMISSION => 1
83
88
], true );
84
89
85
90
$ permissionModel ->save ( [
@@ -88,7 +93,8 @@ private function initDefaultTopcoderRoles() {
88
93
self ::GROUPS_MODERATION_MANAGE_PERMISSION => 1 ,
89
94
self ::GROUPS_CATEGORY_MANAGE_PERMISSION => 1 ,
90
95
self ::GROUPS_GROUP_ADD_PERMISSION => 1 ,
91
- self ::GROUPS_EMAIL_INVITATIONS_PERMISSION => 1
96
+ self ::GROUPS_EMAIL_INVITATIONS_PERMISSION => 1 ,
97
+ self ::GROUPS_GROUP_ARCHIVE_PERMISSION => 1
92
98
], true );
93
99
94
100
$ permissionModel ->save ( [
@@ -165,11 +171,15 @@ public function onDisable() {
165
171
public function discussionsController_beforeDiscussionMetaData_handler ($ sender , $ args ){
166
172
if ($ args ['Discussion ' ]) {
167
173
$ discussion = $ args ['Discussion ' ];
168
- if ($ discussion ->GroupID ) {
169
- $ result = '/group/ ' . $ discussion ->GroupID ;
174
+ $ groupModel = new GroupModel ();
175
+ $ groupID = $ groupModel ->findGroupIDFromDiscussion ($ discussion );
176
+ GroupsPlugin::log ('discussionsController_beforeDiscussionMetaData_handler ' , [
177
+ 'GroupID ' => $ groupID ]);
178
+ if ($ groupID ) {
179
+ $ result = '/group/ ' . $ groupID ;
170
180
$ url = url ($ result , true );
171
- $ groupModel = new GroupModel ();
172
- $ group = $ groupModel ->getByGroupID ($ discussion -> GroupID );
181
+
182
+ $ group = $ groupModel ->getByGroupID ($ groupID );
173
183
echo '<div class="Meta Meta-Discussion Group-Info"> ' .
174
184
'<span class="MItem "> ' .
175
185
'<span class="label">Challenge: </span> ' .
@@ -234,11 +244,13 @@ public function settingsController_groups_create($sender) {
234
244
235
245
public function discussionController_render_before ($ sender , $ args ) {
236
246
$ Discussion = $ sender ->data ('Discussion ' );
237
- if ($ Discussion && $ Discussion -> GroupID != null ) {
247
+ if ($ Discussion ) {
238
248
$ groupModel = new GroupModel ();
239
249
$ currentTopcoderProjectRoles = $ sender ->Data ['ChallengeCurrentUserProjectRoles ' ];
240
250
$ groupModel ->setCurrentUserTopcoderProjectRoles ($ currentTopcoderProjectRoles );
241
- $ Group = $ groupModel ->getByGroupID ($ Discussion ->GroupID );
251
+ $ groupID = $ groupModel ->findGroupIDFromDiscussion ($ Discussion );
252
+ self ::log ('discussionController_render_before:GroupID= ' .$ groupID , []);
253
+ $ Group = $ groupModel ->getByGroupID ($ groupID );
242
254
if (!$ groupModel ->canView ($ Group )) {
243
255
throw permissionException ();
244
256
}
@@ -318,16 +330,8 @@ public function base_discussionOptionsDropdown_handler($sender, $args){
318
330
}
319
331
}
320
332
321
- public function discussionsController_afterDiscussionFilters_handler ($ sender ){
322
- $ this ->addGroupLinkToMenu ();
323
- }
324
-
325
- public function discussionController_afterDiscussionFilters_handler ($ sender ){
326
- $ this ->addGroupLinkToMenu ();
327
- }
328
-
329
- public function categoriesController_afterDiscussionFilters_handler ($ sender ){
330
- $ this ->addGroupLinkToMenu ();
333
+ public function base_afterDiscussionFilters_handler ($ sender ){
334
+ $ this ->addGroupLinkToMenu ($ sender );
331
335
}
332
336
333
337
public function base_categoryOptionsDropdown_handler ($ sender , $ args ) {
@@ -355,9 +359,9 @@ public function base_categoryOptionsDropdown_handler($sender, $args) {
355
359
*/
356
360
public function discussionController_discussionInfo_handler ($ sender , $ args ) {
357
361
if ($ sender ->Data ['Discussion ' ]) {
358
- $ groupID = $ sender ->Data ['Discussion ' ]->GroupID ;
362
+ $ groupModel = new GroupModel ();
363
+ $ groupID = $ groupModel ->findGroupIDFromDiscussion ($ sender ->Data ['Discussion ' ]);
359
364
if ($ groupID ) {
360
- $ groupModel = new GroupModel ();
361
365
$ group = $ groupModel ->getByGroupID ($ groupID );
362
366
if ($ group ->ChallengeUrl ) {
363
367
echo anchor ($ group ->Name , $ group ->ChallengeUrl );
@@ -374,10 +378,12 @@ public function postController_afterDiscussionSave_handler($sender, $args) {
374
378
return ;
375
379
}
376
380
$ discussion = $ args ['Discussion ' ];
381
+ $ groupModel = new GroupModel ();
382
+ $ groupID = $ groupModel ->findGroupIDFromDiscussion ($ discussion );
377
383
if ($ sender ->deliveryType () == DELIVERY_TYPE_ALL ) {
378
- redirectTo (GroupsPlugin::GROUP_ROUTE .$ discussion -> GroupID );
384
+ redirectTo (GroupsPlugin::GROUP_ROUTE .$ groupID );
379
385
} else {
380
- $ sender ->setRedirectTo (GroupsPlugin::GROUP_ROUTE .$ discussion -> GroupID );
386
+ $ sender ->setRedirectTo (GroupsPlugin::GROUP_ROUTE .$ groupID );
381
387
}
382
388
}
383
389
@@ -679,12 +685,23 @@ private function getTopcoderProjectRoles($user, $resources = null, $roleResource
679
685
/**
680
686
* Display a groups link in the menu
681
687
*/
682
- private function addGroupLinkToMenu () {
688
+ private function addGroupLinkToMenu ($ sender ) {
683
689
if (Gdn::session ()->isValid ()) {
684
- echo '<li> ' . anchor ('Challenges ' , GroupsPlugin::GROUPS_ROUTE ).'</li> ' ;
690
+
691
+ echo '<li class=" ' .$ this ->getMenuItemCssClassFromQuery ($ sender , 'challenge ' ).'"> ' . anchor ('Challenges ' , GroupsPlugin::ROUTE_CHALLENGE_GROUPS ).'</li> ' ;
692
+ echo '<li class=" ' .$ this ->getMenuItemCssClassFromQuery ($ sender , 'regular ' ).'"> ' . anchor ('Groups ' , GroupsPlugin::ROUTE_REGULAR_GROUPS ).'</li> ' ;
693
+ // echo '<li class="'.$this->getMenuItemCssClassFromRequestMethod($sender, 'mine').'">'. anchor('My Challenges & Groups', GroupsPlugin::ROUTE_MY_GROUPS).'</li>';
685
694
}
686
695
}
687
696
697
+ private function getMenuItemCssClassFromRequestMethod ($ sender , $ requestMethod ){
698
+ return $ sender ->ControllerName == 'groupscontroller ' && $ sender ->RequestMethod == $ requestMethod ? ' Active ' : '' ;
699
+ }
700
+
701
+ private function getMenuItemCssClassFromQuery ($ sender , $ requestMethod ){
702
+ return $ sender ->ControllerName == 'groupscontroller ' && Gdn::request ()->get ('filter ' ) == $ requestMethod ? ' Active ' : '' ;
703
+ }
704
+
688
705
public static function log ($ message , $ data = []) {
689
706
// if (c('Debug')) {
690
707
Logger::event (
0 commit comments