@@ -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,43 @@ public function onDisable() {
155
157
// nothing
156
158
}
157
159
160
+ public function categoryModel_beforeSaveCategory_handler ($ sender , $ args ){
161
+
162
+ }
163
+
158
164
public function base_render_before ($ sender ) {
159
165
$ sender ->addJsFile ('vendors/prettify/prettify.js ' , 'plugins/Groups ' );
160
166
$ sender ->addJsFile ('dashboard.js ' , 'plugins/Groups ' );
161
167
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
- }
168
+ $ categoryModel = new CategoryModel ();
169
+
170
+ self ::log ('a list of IDs of categories visible to the current user ' , ['visibleCategories ' => $ categoryModel ->getVisibleCategories ([])]);
169
171
170
- if ($ selectedCategory ) {
171
- $ displayedCategory = $ this ->groupModel ->checkGroupCategoryPermissions ($ selectedCategory );
172
- $ sender ->setData ('Category ' , $ displayedCategory );
173
- }
174
- }
175
172
}
176
173
174
+ public function base_groupOptionsDropdown_handler ($ sender , $ args ){
175
+ $ group = $ args ['Group ' ];
176
+ $ currentTopcoderProjectRoles = $ sender ->Data ['ChallengeCurrentUserProjectRoles ' ];
177
+ $ groupModel = new GroupModel ();
178
+ $ groupModel ->setCurrentUserTopcoderProjectRoles ($ currentTopcoderProjectRoles );
179
+ $ groupID = $ group ->GroupID ;
180
+ $ canEdit = $ groupModel ->canEdit ($ group ) ;
181
+ $ canDelete = $ groupModel ->canDelete ($ group ) ;
182
+ $ canLeave = $ groupModel ->canLeave ($ group );
183
+ $ canInviteMember = $ groupModel ->canInviteNewMember ($ group );
184
+ $ canManageMembers = $ groupModel ->canManageMembers ($ group );
185
+ $ canManageCategories = $ groupModel ->canManageCategories ($ group );
186
+ $ canFollow = $ groupModel ->canFollowGroup ($ group );
187
+ $ canWatch = $ groupModel ->canWatchGroup ($ group );
188
+ $ hasFollowed = $ groupModel ->hasFollowedGroup ($ group );
189
+ $ hasWatched = $ groupModel ->hasWatchedGroup ($ group );
190
+
191
+ // self::log('base_groupOptionsDropdown_handler', ['Group' => $group->GroupID,
192
+ // 'currentUserTopcoderProjectRoles' =>$currentTopcoderProjectRoles,
193
+ // 'canDelete' => $canDelete, 'canEdit' => $canEdit, 'canLeave' => $canLeave,
194
+ // 'canInviteMember' =>$canInviteMember, 'canManageMembers' => $canManageMembers, 'canManageCategories ' =>
195
+ // $canManageCategories, 'canFollow' => $canFollow ]);
196
+ }
177
197
178
198
/**
179
199
* Load CSS into head for the plugin
@@ -198,82 +218,12 @@ public function settingsController_groups_create($sender) {
198
218
$ cf ->renderAll ();
199
219
}
200
220
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
221
public function discussionController_render_before ($ sender , $ args ) {
274
222
$ Discussion = $ sender ->data ('Discussion ' );
275
223
if ($ Discussion && $ Discussion ->GroupID != null ) {
276
224
$ groupModel = new GroupModel ();
225
+ $ currentTopcoderProjectRoles = $ sender ->Data ['ChallengeCurrentUserProjectRoles ' ];
226
+ $ groupModel ->setCurrentUserTopcoderProjectRoles ($ currentTopcoderProjectRoles );
277
227
$ Group = $ groupModel ->getByGroupID ($ Discussion ->GroupID );
278
228
if (!$ groupModel ->canView ($ Group )) {
279
229
throw permissionException ();
@@ -300,11 +250,13 @@ public function base_BeforeCommentForm_handler($sender, $args) {
300
250
*/
301
251
public function base_discussionOptionsDropdown_handler ($ sender , $ args ){
302
252
$ Discussion = $ args ['Discussion ' ];
253
+ $ currentTopcoderProjectRoles = $ sender ->Data ['ChallengeCurrentUserProjectRoles ' ];
303
254
if ($ Discussion ) {
304
255
$ groupModel = new GroupModel ();
256
+ $ groupModel ->setCurrentUserTopcoderProjectRoles ($ currentTopcoderProjectRoles );
257
+ $ canView = $ groupModel ->canView ($ Discussion );
305
258
$ canEdit = $ groupModel ->canEditDiscussion ($ Discussion );
306
259
$ canDelete = $ groupModel ->canDeleteDiscussion ($ Discussion );
307
-
308
260
$ canDismiss = $ groupModel ->canDismissDiscussion ($ Discussion );
309
261
$ canAnnounce = $ groupModel ->canAnnounceDiscussion ($ Discussion );
310
262
$ canSink = $ groupModel ->canSinkDiscussion ($ Discussion );
@@ -346,8 +298,9 @@ public function base_discussionOptionsDropdown_handler($sender, $args){
346
298
}
347
299
348
300
self ::log ('discussionController_discussionOptionsDropdown_handler ' , ['Discussion ' => $ Discussion ->DiscussionID ,
349
- 'canDelete ' => $ canDelete , 'canEdit ' => $ canEdit , 'canDiscmiss ' => $ canDismiss ,
350
- 'canAnnounce ' =>$ canAnnounce , 'canSink ' => $ canSink , 'canMove ' => $ canMove , 'canFetch ' => $ canRefetch ]);
301
+ 'currentUserTopcoderProjectRoles ' =>$ currentTopcoderProjectRoles , 'canView ' => $ canView ,
302
+ 'canDelete ' => $ canDelete , 'canEdit ' => $ canEdit , 'canDismiss ' => $ canDismiss ,
303
+ 'canAnnounce ' =>$ canAnnounce , 'canSink ' => $ canSink , 'canMove ' => $ canMove , 'canReFetch ' => $ canRefetch ]);
351
304
}
352
305
}
353
306
@@ -571,9 +524,9 @@ public function base_userAnchor_handler($sender, $args){
571
524
if ($ sender instanceof DiscussionController || $ sender instanceof GroupController) {
572
525
$ user = $ args ['User ' ];
573
526
$ anchorText = &$ args ['Text ' ];
574
- $ resources = $ sender ->data ('Resources ' );
575
- $ roleResources = $ sender ->data ('RoleResources ' );
576
- $ anchorText = $ anchorText . $ this ->getTopcoderRoles ($ user , $ resources , $ roleResources );
527
+ $ resources = $ sender ->data ('ChallengeResources ' );
528
+ $ roleResources = $ sender ->data ('ChallengeRoleResources ' );
529
+ $ anchorText = $ anchorText . $ this ->topcoderProjectRolesText ($ user , $ resources , $ roleResources );
577
530
}
578
531
}
579
532
@@ -586,16 +539,29 @@ public function base_userPhoto_handler($sender, $args){
586
539
if ($ sender instanceof DiscussionController || $ sender instanceof GroupController) {
587
540
$ user = $ args ['User ' ];
588
541
$ anchorText = &$ args ['Title ' ];
589
- $ resources = $ sender ->data ('Resources ' );
590
- $ roleResources = $ sender ->data ('RoleResources ' );
591
- $ anchorText = $ anchorText . $ this ->getTopcoderRoles ($ user , $ resources , $ roleResources );
542
+ $ resources = $ sender ->data ('ChallengeResources ' );
543
+ $ roleResources = $ sender ->data ('ChallengeRoleResources ' );
544
+ $ anchorText = $ anchorText . $ this ->topcoderProjectRolesText ($ user , $ resources , $ roleResources );
592
545
}
593
546
}
594
547
595
- private function getTopcoderRoles ($ user , $ resources = null , $ roleResources = null ) {
548
+ private function topcoderProjectRolesText ($ user , $ resources = null , $ roleResources = null ) {
549
+ $ roles = $ this ->getTopcoderProjectRoles ($ user , $ resources , $ roleResources );
550
+ return count ($ roles ) > 0 ? '( ' . implode (', ' , $ roles ) . ') ' : '' ;
551
+
552
+ }
553
+
554
+ /**
555
+ * Get a list of Topcoder Project Roles for an user
556
+ * @param $user object User
557
+ * @param array $resources
558
+ * @param array $roleResources
559
+ * @return array
560
+ */
561
+ private function getTopcoderProjectRoles ($ user , $ resources = null , $ roleResources = null ) {
596
562
$ topcoderUsername = val ('Name ' , $ user , t ('Unknown ' ));
563
+ $ roles = [];
597
564
if (isset ($ resources ) && isset ($ roleResources )) {
598
- $ roles = [];
599
565
$ allResourcesByMember = array_filter ($ resources , function ($ k ) use ($ topcoderUsername ) {
600
566
return $ k ->memberHandle == $ topcoderUsername ;
601
567
});
@@ -605,11 +571,8 @@ private function getTopcoderRoles($user, $resources = null, $roleResources = nul
605
571
});
606
572
array_push ($ roles , reset ($ roleResource )->name );
607
573
}
608
- return count ($ roles ) > 0 ? '( ' . implode (', ' , $ roles ) . ') ' : '' ;
609
-
610
574
}
611
-
612
- return '' ;
575
+ return $ roles ;
613
576
}
614
577
615
578
/**
0 commit comments