forked from Hackademic/hackademic
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclass.RankingsController.php
More file actions
executable file
·102 lines (97 loc) · 3.82 KB
/
Copy pathclass.RankingsController.php
File metadata and controls
executable file
·102 lines (97 loc) · 3.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/**
*
* Hackademic-CMS/controller/class.ReadArticleController.php
*
* Hackademic Frontend Read Article Controller
* Class for creating the frontend Main Menu
*
* Copyright (c) 2012 OWASP
*
* LICENSE:
*
* This file is part of Hackademic CMS (https://www.owasp.org/index.php/OWASP_Hackademic_Challenges_Project).
*
* Hackademic CMS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any
* later version.
*
* Hackademic CMS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with Hackademic CMS. If not, see
* <http://www.gnu.org/licenses/>.
*
*
* @author Pragya Gupta <pragya18nsit[at]gmail[dot]com>
* @author Konstantinos Papapanagiotou <conpap[at]gmail[dot]com>
* @license http://www.gnu.org/licenses/gpl.html
* @copyright 2012 OWASP
*
*/
require_once(HACKADEMIC_PATH."/model/common/class.ChallengeAttempts.php");
require_once(HACKADEMIC_PATH."/model/common/class.User.php");
require_once(HACKADEMIC_PATH."/model/common/class.UserScore.php");
require_once(HACKADEMIC_PATH."/admin/model/class.ClassMemberships.php");
require_once(HACKADEMIC_PATH."/controller/class.HackademicController.php");
class RankingsController extends HackademicController {
public function go() {
$this->setViewTemplate("rankings.tpl");
if ($this->isLoggedIn()) {
$username = $this->getLoggedInUser();
if (Session::isAdmin() || Session::isTeacher()) {
$classes = Classes::getAllClasses();
} else {
$user = User::findByUserName($username);
$classes = ClassMemberships::getMembershipsOfUserObjects($user->id);
}
$this->addToView('classes', $classes);
}
if (!isset($_GET["class"]) || $_GET["class"]=="") {
$rankings = ChallengeAttempts::getUniversalRankings();
$class_id = GLOBAL_CLASS_ID;
} else {
$class_id = $_GET["class"];
$class = Classes::getClass($class_id);
if (!$class) {
$this->addErrorMessage("Not a valid class");
return $this->generateView();
} else {
$rankings = ChallengeAttempts::getClasswiseRankings($class_id);
}
}
$final=array();
$counter=1;
$rank=1;
$rankcount=1;
$prevcount=null;
foreach($rankings as $ranking){
if($ranking['user_id'] != NULL){
if ($counter !=1 && $prevcount == $ranking['tries']) {$rank=$rankcount; /*$rankcount++;*/}
if ($counter !=1 && $prevcount != $ranking['tries']) {$rankcount++; $rank=$rankcount;}
$user_points = $this->calc_user_pts($ranking['user_id'], $class_id);
$prevcount=$ranking['tries'];
$counter++;
$temp=array('user_id'=>$ranking['user_id'],'count' =>$ranking['tries'],'username'=>$ranking['username'],'rank'=>$rank,'score' => $user_points);
array_push($final,$temp);
}
}
$this->addToView('rankings', $final);
return $this->generateView();
}
private function calc_user_pts($user_id, $class_id = -1){
$points = 0;
if($class_id == -1){
$scores = UserScore::get_scores_for_user($user_id);
}else{
$scores = UserScore::get_scores_for_user_class($user_id, $class_id);
}
if( $scores != false){
foreach($scores as $score_obj){
$points += $score_obj->points;
}
}
return $points;
}
}