Skip to content

Commit d7f39c3

Browse files
authored
Merge pull request #45 from topcoder-platform/issues-178
Fixed issues with permissions
2 parents dc64f42 + 58038ce commit d7f39c3

File tree

1 file changed

+92
-15
lines changed

1 file changed

+92
-15
lines changed

Topcoder/class.topcoder.plugin.php

Lines changed: 92 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -854,28 +854,56 @@ public function userController_UserCell_handler($sender, $args) {
854854
</td>
855855
<?php
856856
}
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+
858900
/**
859901
* Add scripts. Add script to hide iPhone browser bar on pageload.
860902
*/
861903
public function base_render_before($sender) {
862904
if (is_object($sender->Head)) {
863905
$sender->Head->addString($this->getJS());
864906
}
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-
}
879907
}
880908

881909
/**
@@ -1564,6 +1592,55 @@ public static function getUserPhotoUrl($user) {
15641592
}
15651593

15661594

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+
15671644
// TODO: Debugging issues-108
15681645
public function base_beforeNewDiscussionButton_handler($sender, $args) {
15691646
$newDiscussionModule = $args['NewDiscussionModule'];

0 commit comments

Comments
 (0)