@@ -17,6 +17,8 @@ class GroupsPlugin extends Gdn_Plugin {
17
17
const GROUPS_ROUTE = '/groups ' ;
18
18
const GROUP_ROUTE = '/group/ ' ;
19
19
const GROUPS_GROUP_ADD_PERMISSION = 'Groups.Group.Add ' ;
20
+ const GROUPS_GROUP_EDIT_PERMISSION = 'Groups.Group.Edit ' ;
21
+ const GROUPS_GROUP_DELETE_PERMISSION = 'Groups.Group.Delete ' ;
20
22
const GROUPS_CATEGORY_MANAGE_PERMISSION = 'Groups.Category.Manage ' ;
21
23
const GROUPS_MODERATION_MANAGE_PERMISSION = 'Groups.Moderation.Manage ' ;
22
24
const GROUPS_EMAIL_INVITATIONS_PERMISSION = 'Groups.EmailInvitations.Add ' ;
@@ -155,25 +157,62 @@ public function onDisable() {
155
157
// nothing
156
158
}
157
159
160
+ /**
161
+ * Add challenge/Group name in discussion item
162
+ * @param $sender
163
+ * @param $args
164
+ */
165
+ public function discussionsController_beforeDiscussionMetaData_handler ($ sender , $ args ){
166
+ if ($ args ['Discussion ' ]) {
167
+ $ discussion = $ args ['Discussion ' ];
168
+ if ($ discussion ->GroupID ) {
169
+ $ result = '/group/ ' . $ discussion ->GroupID ;
170
+ $ url = url ($ result , true );
171
+ $ groupModel = new GroupModel ();
172
+ $ group = $ groupModel ->getByGroupID ($ discussion ->GroupID );
173
+ echo '<div class="Meta Meta-Discussion Group-Info"> ' .
174
+ '<span class="MItem "> ' .
175
+ '<span class="label">Challenge: </span> ' .
176
+ '<span class="value"> ' .anchor ($ group ->Name , $ url ).'</span> ' .
177
+ '</span> ' .
178
+ '</div> ' ;
179
+ }
180
+ }
181
+ }
182
+
158
183
public function base_render_before ($ sender ) {
159
184
$ sender ->addJsFile ('vendors/prettify/prettify.js ' , 'plugins/Groups ' );
160
185
$ sender ->addJsFile ('dashboard.js ' , 'plugins/Groups ' );
161
186
162
- if (inSection ('CategoryList ' )) {
163
- $ categoryTree = $ sender ->data ('CategoryTree ' );
164
- $ selectedCategory = $ sender ->data ('Category ' );
165
- if ($ categoryTree ) {
166
- $ displayedCategoryTree = $ this ->groupModel ->checkGroupCategoryPermissions ($ categoryTree );
167
- $ sender ->setData ('CategoryTree ' , $ displayedCategoryTree );
168
- }
187
+ $ categoryModel = new CategoryModel ();
188
+
189
+ self ::log ('a list of IDs of categories visible to the current user ' , ['visibleCategories ' => $ categoryModel ->getVisibleCategories ([])]);
169
190
170
- if ($ selectedCategory ) {
171
- $ displayedCategory = $ this ->groupModel ->checkGroupCategoryPermissions ($ selectedCategory );
172
- $ sender ->setData ('Category ' , $ displayedCategory );
173
- }
174
- }
175
191
}
176
192
193
+ public function base_groupOptionsDropdown_handler ($ sender , $ args ){
194
+ $ group = $ args ['Group ' ];
195
+ $ currentTopcoderProjectRoles = $ sender ->Data ['ChallengeCurrentUserProjectRoles ' ];
196
+ $ groupModel = new GroupModel ();
197
+ $ groupModel ->setCurrentUserTopcoderProjectRoles ($ currentTopcoderProjectRoles );
198
+ $ groupID = $ group ->GroupID ;
199
+ $ canEdit = $ groupModel ->canEdit ($ group ) ;
200
+ $ canDelete = $ groupModel ->canDelete ($ group ) ;
201
+ $ canLeave = $ groupModel ->canLeave ($ group );
202
+ $ canInviteMember = $ groupModel ->canInviteNewMember ($ group );
203
+ $ canManageMembers = $ groupModel ->canManageMembers ($ group );
204
+ $ canManageCategories = $ groupModel ->canManageCategories ($ group );
205
+ $ canFollow = $ groupModel ->canFollowGroup ($ group );
206
+ $ canWatch = $ groupModel ->canWatchGroup ($ group );
207
+ $ hasFollowed = $ groupModel ->hasFollowedGroup ($ group );
208
+ $ hasWatched = $ groupModel ->hasWatchedGroup ($ group );
209
+
210
+ // self::log('base_groupOptionsDropdown_handler', ['Group' => $group->GroupID,
211
+ // 'currentUserTopcoderProjectRoles' =>$currentTopcoderProjectRoles,
212
+ // 'canDelete' => $canDelete, 'canEdit' => $canEdit, 'canLeave' => $canLeave,
213
+ // 'canInviteMember' =>$canInviteMember, 'canManageMembers' => $canManageMembers, 'canManageCategories ' =>
214
+ // $canManageCategories, 'canFollow' => $canFollow ]);
215
+ }
177
216
178
217
/**
179
218
* Load CSS into head for the plugin
@@ -198,82 +237,12 @@ public function settingsController_groups_create($sender) {
198
237
$ cf ->renderAll ();
199
238
}
200
239
201
- private function discussionModelWhere ($ requestPath , $ args ){
202
- GroupsPlugin::log ('discussionModelWhere:enter ' , ['Wheres ' => $ args ['Wheres ' ]]);
203
- $ wheres = [];
204
- if (array_key_exists ('Wheres ' , $ args )) {
205
- $ wheres = &$ args ['Wheres ' ];
206
- }
207
- if (strpos ($ requestPath , 'discussions/mine ' ) === 0 ) {
208
- // show all my discussions
209
- } else if (strpos ($ requestPath , 'discussions/bookmarked ' ) === 0 ) {
210
- // show all bookmarked by default
211
- } else if (strpos ($ requestPath , 'discussions ' ) === 0 ) {
212
- $ wheres ['d.GroupID ' ] = ['is null ' ];
213
- } else if (strpos ($ requestPath , 'categories ' ) === 0 ) {
214
- //checkPermissions
215
- $ groupModel = new GroupModel ();
216
- $ userGroups = $ groupModel ->memberOf (Gdn::session ()->UserID );
217
- $ publicGroupIDs = $ groupModel ->getAllPublicGroupIDs ();
218
- $ userGroupsIDs = array ();
219
- foreach ($ userGroups as $ userGroup ) {
220
- array_push ($ userGroupsIDs , $ userGroup ->GroupID );
221
- }
222
- $ showGroupsIDs = array_merge ($ userGroupsIDs , $ publicGroupIDs );
223
- self ::log ('discussionModelWhere ' , ['userGroups ' => $ userGroups , 'publicGroupsIDs ' => $ publicGroupIDs , 'showGroupIDs ' => $ showGroupsIDs ]);
224
- $ wheres ['d.GroupID ' ] = $ showGroupsIDs ;
225
- $ wheres ['Groups ' ] = 'all ' ;
226
- }
227
-
228
- GroupsPlugin::log ('discussionModelWhere:exit ' , ['Updated Wheres ' => $ wheres ]);
229
-
230
- }
231
-
232
- public function discussionModel_beforeGet_handler ($ sender , $ args ) {
233
- GroupsPlugin::log ('discussionModel_beforeGet_handler ' , []);
234
- $ this ->discussionModelWhere (Gdn::request ()->path (), $ args );
235
- }
236
-
237
- public function discussionModel_beforeGetCount_handler ($ sender , $ args ){
238
- GroupsPlugin::log ('discussionModel_beforeGetCount_handler ' );
239
- $ this ->discussionModelWhere (Gdn::request ()->path (), $ args );
240
- }
241
-
242
- public function discussionModel_beforeGetAnnouncements_handler ($ sender , $ args ){
243
- GroupsPlugin::log ('discussionModel_beforeGetAnnouncements_handler ' );
244
- //FIX: it throws exceptions
245
- // $this->discussionModelWhere(Gdn::request()->path(), $args);
246
- }
247
-
248
- /**
249
- * Show categories based on group membership
250
- * @param $sender
251
- * @param $args
252
- */
253
- public function base_beforeCategoryDropDown_handler ($ sender , $ args ) {
254
- self ::log ('base_beforeCategoryDropDown_hander ' , ['args ' => $ args ]);
255
- $ options = &$ args ['Options ' ];
256
- $ categoryData = val ('CategoryData ' , $ options );
257
-
258
- // Grab the category data.
259
- if (!$ categoryData ) {
260
- $ categoryData = CategoryModel::getByPermission (
261
- 'Discussions.Add ' ,
262
- null ,
263
- val ('Filter ' , $ options , ['Archived ' => 0 ]),
264
- val ('PermFilter ' , $ options , [])
265
- );
266
-
267
- $ displayedCategories = $ this ->groupModel ->checkGroupCategoryPermissions ($ categoryData );
268
- $ options ['CategoryData ' ] = $ displayedCategories ;
269
- return ;
270
- }
271
- }
272
-
273
240
public function discussionController_render_before ($ sender , $ args ) {
274
241
$ Discussion = $ sender ->data ('Discussion ' );
275
242
if ($ Discussion && $ Discussion ->GroupID != null ) {
276
243
$ groupModel = new GroupModel ();
244
+ $ currentTopcoderProjectRoles = $ sender ->Data ['ChallengeCurrentUserProjectRoles ' ];
245
+ $ groupModel ->setCurrentUserTopcoderProjectRoles ($ currentTopcoderProjectRoles );
277
246
$ Group = $ groupModel ->getByGroupID ($ Discussion ->GroupID );
278
247
if (!$ groupModel ->canView ($ Group )) {
279
248
throw permissionException ();
@@ -300,11 +269,13 @@ public function base_BeforeCommentForm_handler($sender, $args) {
300
269
*/
301
270
public function base_discussionOptionsDropdown_handler ($ sender , $ args ){
302
271
$ Discussion = $ args ['Discussion ' ];
272
+ $ currentTopcoderProjectRoles = $ sender ->Data ['ChallengeCurrentUserProjectRoles ' ];
303
273
if ($ Discussion ) {
304
274
$ groupModel = new GroupModel ();
275
+ $ groupModel ->setCurrentUserTopcoderProjectRoles ($ currentTopcoderProjectRoles );
276
+ $ canView = $ groupModel ->canView ($ Discussion );
305
277
$ canEdit = $ groupModel ->canEditDiscussion ($ Discussion );
306
278
$ canDelete = $ groupModel ->canDeleteDiscussion ($ Discussion );
307
-
308
279
$ canDismiss = $ groupModel ->canDismissDiscussion ($ Discussion );
309
280
$ canAnnounce = $ groupModel ->canAnnounceDiscussion ($ Discussion );
310
281
$ canSink = $ groupModel ->canSinkDiscussion ($ Discussion );
@@ -346,8 +317,9 @@ public function base_discussionOptionsDropdown_handler($sender, $args){
346
317
}
347
318
348
319
self ::log ('discussionController_discussionOptionsDropdown_handler ' , ['Discussion ' => $ Discussion ->DiscussionID ,
349
- 'canDelete ' => $ canDelete , 'canEdit ' => $ canEdit , 'canDiscmiss ' => $ canDismiss ,
350
- 'canAnnounce ' =>$ canAnnounce , 'canSink ' => $ canSink , 'canMove ' => $ canMove , 'canFetch ' => $ canRefetch ]);
320
+ 'currentUserTopcoderProjectRoles ' =>$ currentTopcoderProjectRoles , 'canView ' => $ canView ,
321
+ 'canDelete ' => $ canDelete , 'canEdit ' => $ canEdit , 'canDismiss ' => $ canDismiss ,
322
+ 'canAnnounce ' =>$ canAnnounce , 'canSink ' => $ canSink , 'canMove ' => $ canMove , 'canReFetch ' => $ canRefetch ]);
351
323
}
352
324
}
353
325
@@ -571,9 +543,9 @@ public function base_userAnchor_handler($sender, $args){
571
543
if ($ sender instanceof DiscussionController || $ sender instanceof GroupController) {
572
544
$ user = $ args ['User ' ];
573
545
$ anchorText = &$ args ['Text ' ];
574
- $ resources = $ sender ->data ('Resources ' );
575
- $ roleResources = $ sender ->data ('RoleResources ' );
576
- $ anchorText = $ anchorText . $ this ->getTopcoderRoles ($ user , $ resources , $ roleResources );
546
+ $ resources = $ sender ->data ('ChallengeResources ' );
547
+ $ roleResources = $ sender ->data ('ChallengeRoleResources ' );
548
+ $ anchorText = $ anchorText . $ this ->topcoderProjectRolesText ($ user , $ resources , $ roleResources );
577
549
}
578
550
}
579
551
@@ -586,16 +558,29 @@ public function base_userPhoto_handler($sender, $args){
586
558
if ($ sender instanceof DiscussionController || $ sender instanceof GroupController) {
587
559
$ user = $ args ['User ' ];
588
560
$ anchorText = &$ args ['Title ' ];
589
- $ resources = $ sender ->data ('Resources ' );
590
- $ roleResources = $ sender ->data ('RoleResources ' );
591
- $ anchorText = $ anchorText . $ this ->getTopcoderRoles ($ user , $ resources , $ roleResources );
561
+ $ resources = $ sender ->data ('ChallengeResources ' );
562
+ $ roleResources = $ sender ->data ('ChallengeRoleResources ' );
563
+ $ anchorText = $ anchorText . $ this ->topcoderProjectRolesText ($ user , $ resources , $ roleResources );
592
564
}
593
565
}
594
566
595
- private function getTopcoderRoles ($ user , $ resources = null , $ roleResources = null ) {
567
+ private function topcoderProjectRolesText ($ user , $ resources = null , $ roleResources = null ) {
568
+ $ roles = $ this ->getTopcoderProjectRoles ($ user , $ resources , $ roleResources );
569
+ return count ($ roles ) > 0 ? '( ' . implode (', ' , $ roles ) . ') ' : '' ;
570
+
571
+ }
572
+
573
+ /**
574
+ * Get a list of Topcoder Project Roles for an user
575
+ * @param $user object User
576
+ * @param array $resources
577
+ * @param array $roleResources
578
+ * @return array
579
+ */
580
+ private function getTopcoderProjectRoles ($ user , $ resources = null , $ roleResources = null ) {
596
581
$ topcoderUsername = val ('Name ' , $ user , t ('Unknown ' ));
582
+ $ roles = [];
597
583
if (isset ($ resources ) && isset ($ roleResources )) {
598
- $ roles = [];
599
584
$ allResourcesByMember = array_filter ($ resources , function ($ k ) use ($ topcoderUsername ) {
600
585
return $ k ->memberHandle == $ topcoderUsername ;
601
586
});
@@ -605,11 +590,8 @@ private function getTopcoderRoles($user, $resources = null, $roleResources = nul
605
590
});
606
591
array_push ($ roles , reset ($ roleResource )->name );
607
592
}
608
- return count ($ roles ) > 0 ? '( ' . implode (', ' , $ roles ) . ') ' : '' ;
609
-
610
593
}
611
-
612
- return '' ;
594
+ return $ roles ;
613
595
}
614
596
615
597
/**
0 commit comments