@@ -854,28 +854,56 @@ public function userController_UserCell_handler($sender, $args) {
854
854
</td>
855
855
<?php
856
856
}
857
- /** **/
857
+
858
+ function gdn_dispatcher_beforeControllerMethod_handler ($ sender , $ args ){
859
+ if (!Gdn::session ()->isValid ()) {
860
+ return ;
861
+ }
862
+ $ controllerArgs = json_decode (json_encode ($ args ['Controller ' ]->ReflectArgs ), TRUE );
863
+ $ methodArgs = array_change_key_case ($ controllerArgs ,CASE_LOWER );
864
+ self ::log ('gdn_dispatcher_beforeControllerMethod_handler ' , ['controller ' => $ args ['Controller ' ]->ControllerName ,
865
+ 'reflectArgs ' => $ args ['Controller ' ]->ReflectArgs , 'args ' => $ args ['Controller ' ]->Data ['test ' ]
866
+ ]);
867
+
868
+ $ groupID = false ;
869
+ if ($ args ['Controller ' ] instanceof DiscussionController) {
870
+ if (array_key_exists ('discussionid ' , $ methodArgs )) {
871
+ $ discussionID = $ methodArgs ['discussionid ' ];
872
+ $ discussionModel = new DiscussionModel ();
873
+ $ discussion = $ discussionModel ->getID ((int )$ discussionID );
874
+ if ($ discussion ->CategoryID ){
875
+ $ categoryModel = new CategoryModel ();
876
+ $ category = $ categoryModel ->getID ($ discussion ->CategoryID );
877
+ $ groupID = $ category ->GroupID ;
878
+ }
879
+ }
880
+ } else if ($ args ['Controller ' ] instanceof Groupcontroller) {
881
+ if (array_key_exists ('groupid ' , $ methodArgs )) {
882
+ $ groupID = (int ) $ methodArgs ['groupid ' ];
883
+ }
884
+ }
885
+ //} else if($args instanceof CategoriesController) {
886
+ //TODO
887
+ //} else if ( $args instanceof CategoryController) {
888
+ //TODO
889
+ //}
890
+ self ::log ('gdn_dispatcher_beforeControllerMethod_handler:groupID ' , ['GroupID ' => $ groupID ]);
891
+ if ($ groupID && $ groupID > 0 ) {
892
+ $ groupModel = new GroupModel ();
893
+ $ group = $ groupModel ->getByGroupID ($ groupID );
894
+ if ($ group ->ChallengeID ) {
895
+ $ this ->setTopcoderProjectData ($ args ['Controller ' ], $ group ->ChallengeID );
896
+ }
897
+ }
898
+ }
899
+
858
900
/**
859
901
* Add scripts. Add script to hide iPhone browser bar on pageload.
860
902
*/
861
903
public function base_render_before ($ sender ) {
862
904
if (is_object ($ sender ->Head )) {
863
905
$ sender ->Head ->addString ($ this ->getJS ());
864
906
}
865
-
866
- if ($ sender instanceof DiscussionController || $ sender instanceof GroupController) {
867
- if ($ sender ->data ('Group ' )) {
868
- $ Group = $ sender ->data ('Group ' );
869
- $ challengeID = $ Group ->ChallengeID ;
870
- if ($ challengeID ) {
871
- $ resources = $ this ->getChallengeResources ($ challengeID );
872
- $ roleResources = $ this ->getRoleResources ();
873
- $ sender ->setData ('Resources ' , $ resources );
874
- $ sender ->setData ('RoleResources ' , $ roleResources );
875
-
876
- }
877
- }
878
- }
879
907
}
880
908
881
909
/**
@@ -1564,6 +1592,55 @@ public static function getUserPhotoUrl($user) {
1564
1592
}
1565
1593
1566
1594
1595
+ // Set Topcoder Project Roles Data for a challenge
1596
+ private function setTopcoderProjectData ($ sender , $ challengeID ) {
1597
+ if ($ challengeID ) {
1598
+ $ resources = $ this ->getChallengeResources ($ challengeID );
1599
+ $ roleResources = $ this ->getRoleResources ();
1600
+ $ currentProjectRoles = $ this ->getTopcoderProjectRoles (Gdn::session ()->User , $ resources , $ roleResources );
1601
+ if ($ currentProjectRoles ) {
1602
+ $ currentProjectRoles = array_map ('strtolower ' ,$ currentProjectRoles );
1603
+ } else {
1604
+
1605
+ }
1606
+
1607
+ $ sender ->Data ['ChallengeResources ' ] = $ resources ;
1608
+ $ sender ->Data ['ChallengeRoleResources ' ] = $ roleResources ;
1609
+ $ sender ->Data ['ChallengeCurrentUserProjectRoles ' ] = $ currentProjectRoles ;
1610
+ $ sender ->Data ['ChallengeChallengeID ' ] = $ challengeID ;
1611
+ if ($ sender ->GroupModel ) {
1612
+ $ sender ->GroupModel ->setCurrentUserTopcoderProjectRoles ($ currentProjectRoles );
1613
+ }
1614
+ self ::log ('setTopcoderProjectData ' , ['ChallengeID ' => $ challengeID , 'currentUser ' => $ currentProjectRoles ,
1615
+ 'Topcoder Resources ' => $ resources , 'Topcoder RoleResources '
1616
+ => $ roleResources ,]);
1617
+ }
1618
+ }
1619
+
1620
+ /**
1621
+ * Get a list of Topcoder Project Roles for an user
1622
+ * @param $user object User
1623
+ * @param array $resources
1624
+ * @param array $roleResources
1625
+ * @return array
1626
+ */
1627
+ private function getTopcoderProjectRoles ($ user , $ resources = null , $ roleResources = null ) {
1628
+ $ topcoderUsername = val ('Name ' , $ user , t ('Unknown ' ));
1629
+ $ roles = [];
1630
+ if (isset ($ resources ) && isset ($ roleResources )) {
1631
+ $ allResourcesByMember = array_filter ($ resources , function ($ k ) use ($ topcoderUsername ) {
1632
+ return $ k ->memberHandle == $ topcoderUsername ;
1633
+ });
1634
+ foreach ($ allResourcesByMember as $ resource ) {
1635
+ $ roleResource = array_filter ($ roleResources , function ($ k ) use ($ resource ) {
1636
+ return $ k ->id == $ resource ->roleId ;
1637
+ });
1638
+ array_push ($ roles , reset ($ roleResource )->name );
1639
+ }
1640
+ }
1641
+ return $ roles ;
1642
+ }
1643
+
1567
1644
// TODO: Debugging issues-108
1568
1645
public function base_beforeNewDiscussionButton_handler ($ sender , $ args ) {
1569
1646
$ newDiscussionModule = $ args ['NewDiscussionModule ' ];
0 commit comments