Skip to content
This repository has been archived by the owner on Jun 15, 2020. It is now read-only.

Commit

Permalink
Implemented report.php with enhancements of displaying user enrolment…
Browse files Browse the repository at this point in the history
… status
  • Loading branch information
andreev-artem committed Jul 2, 2011
1 parent 1debc80 commit 9d8c2e8
Show file tree
Hide file tree
Showing 5 changed files with 397 additions and 43 deletions.
87 changes: 75 additions & 12 deletions locallib.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
define('VIEW_ALLTAKEN', 4);
define('VIEW_ALL', 5);

define('SORT_LASTNAME', 1);
define('SORT_FIRSTNAME', 2);

class attforblock_permissions {
private $canview;
private $canviewreports;
Expand Down Expand Up @@ -46,6 +49,10 @@ public function can_view_reports() {
return $this->canviewreports;
}

public function require_view_reports_capability() {
require_capability('mod/attforblock:viewreports', $this->context);
}

public function can_take() {
if (is_null($this->cantake))
$this->cantake = has_capability('mod/attforblock:takeattendances', $this->context);
Expand Down Expand Up @@ -239,9 +246,6 @@ class att_take_page_params {

const DEFAULT_VIEW_MODE = self::SORTED_LIST;

const SORT_LASTNAME = 1;
const SORT_FIRSTNAME = 2;

public $sessionid;
public $grouptype;
public $group;
Expand All @@ -255,7 +259,7 @@ class att_take_page_params {

public function init() {
if (!isset($this->group)) $this->group = 0;
if (!isset($this->sort)) $this->sort = self::SORT_LASTNAME;
if (!isset($this->sort)) $this->sort = SORT_LASTNAME;
$this->init_view_mode();
$this->init_gridcols();
}
Expand Down Expand Up @@ -284,13 +288,39 @@ public function get_significant_params() {
$params['sessionid'] = $this->sessionid;
$params['grouptype'] = $this->grouptype;
if ($this->group) $params['group'] = $this->group;
if ($this->sort != self::SORT_LASTNAME) $params['sort'] = $this->sort;
if ($this->sort != SORT_LASTNAME) $params['sort'] = $this->sort;
if (isset($this->copyfrom)) $params['copyfrom'] = $this->copyfrom;

return $params;
}
}

class att_report_page_params extends att_page_with_filter_controls {
public $group;
public $sort;

public function __construct() {
$this->selectortype = self::SELECTOR_GROUP;
}

public function init($courseid) {
parent::init($courseid);

if (!isset($this->group)) $this->group = 0;
if (!isset($this->sort)) $this->sort = SORT_LASTNAME;
}

public function get_significant_params() {
$params = array();

//if ($this->group) $params['group'] = $this->group;
if ($this->sort != SORT_LASTNAME) $params['sort'] = $this->sort;

return $params;
}
}


class attforblock {
const SESSION_COMMON = 0;
const SESSION_GROUP = 1;
Expand Down Expand Up @@ -516,8 +546,8 @@ public function url_sessions($params=array()) {
/**
* @return moodle_url of report.php for attendance instance
*/
public function url_report() {
$params = array('id' => $this->cm->id);
public function url_report($params=array()) {
$params = array_merge(array('id' => $this->cm->id), $params);
return new moodle_url('/mod/attforblock/report.php', $params);
}

Expand All @@ -540,8 +570,8 @@ public function url_settings() {
/**
* @return moodle_url of attendances.php for attendance instance
*/
public function url_take() {
$params = array('id' => $this->cm->id);
public function url_take($params=array()) {
$params = array_merge(array('id' => $this->cm->id), $params);
return new moodle_url('/mod/attforblock/take.php', $params);
}

Expand Down Expand Up @@ -745,7 +775,7 @@ public function get_users($groupid = 0) {
//fields we need from the user table
$userfields = user_picture::fields('u');

if (isset($this->pageparams->sort) and ($this->pageparams->sort == att_take_page_params::SORT_FIRSTNAME)) {
if (isset($this->pageparams->sort) and ($this->pageparams->sort == SORT_FIRSTNAME)) {
$orderby = "u.firstname ASC, u.lastname ASC";
}
else {
Expand Down Expand Up @@ -924,10 +954,42 @@ public function get_user_filtered_sessions_log($userid) {
global $DB;

if ($this->pageparams->startdate && $this->pageparams->enddate) {
$where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate AND
$where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate AND
ats.sessdate >= :sdate AND ats.sessdate < :edate";
} else {
$where = "AND ats.attendanceid = :aid AND ats.sessdate >= :csdate";
$where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate";
}

$sql = "SELECT ats.id, ats.sessdate, ats.groupid, al.statusid
FROM {attendance_sessions} ats
JOIN {attendance_log} al
ON ats.id = al.sessionid AND al.studentid = :uid
WHERE $where
ORDER BY ats.sessdate ASC";

$params = array(
'uid' => $userid,
'aid' => $this->id,
'csdate' => $this->course->startdate,
'sdate' => $this->pageparams->startdate,
'edate' => $this->pageparams->enddate);
$sessions = $DB->get_records_sql($sql, $params);

return $sessions;
}

public function get_user_filtered_sessions_log_extended($userid) {
global $DB;

$groups = array_keys(groups_get_all_groups($this->course->id, $userid));
$groups[] = 0;
list($gsql, $gparams) = $DB->get_in_or_equal($groups, SQL_PARAMS_NAMED, 'gid0');

if ($this->pageparams->startdate && $this->pageparams->enddate) {
$where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate AND
ats.sessdate >= :sdate AND ats.sessdate < :edate AND ats.groupid $gsql";
} else {
$where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate AND ats.groupid $gsql";
}

$sql = "SELECT ats.id, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks
Expand All @@ -943,6 +1005,7 @@ public function get_user_filtered_sessions_log($userid) {
'csdate' => $this->course->startdate,
'sdate' => $this->pageparams->startdate,
'edate' => $this->pageparams->enddate);
$params = array_merge($params, $gparams);
$sessions = $DB->get_records_sql($sql, $params);
foreach ($sessions as $sess) {
if (empty($sess->description)) {
Expand Down
6 changes: 3 additions & 3 deletions manage.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

$id = required_param('id', PARAM_INT);
$from = optional_param('from', NULL, PARAM_ACTION);
$pageparams ->view = optional_param('view', NULL, PARAM_INT);
$pageparams ->curdate = optional_param('curdate', NULL, PARAM_INT);
$pageparams->view = optional_param('view', NULL, PARAM_INT);
$pageparams->curdate = optional_param('curdate', NULL, PARAM_INT);

$cm = get_coursemodule_from_id('attforblock', $id, 0, false, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
Expand Down Expand Up @@ -57,7 +57,7 @@
$output = $PAGE->get_renderer('mod_attforblock');
$tabs = new attforblock_tabs($att, attforblock_tabs::TAB_SESSIONS);
$filtercontrols = new attforblock_filter_controls($att);
$sesstable = new attforblock_sessions_manage_data($att);
$sesstable = new attforblock_manage_data($att);

/// Output starts here

Expand Down
134 changes: 119 additions & 15 deletions renderables.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ class attforblock_filter_controls implements renderable {
/** @var int current view mode */
public $pageparams;

public $cm;

public $curdate;

public $prevcur;
Expand All @@ -100,6 +102,8 @@ public function __construct(attforblock $att) {

$this->pageparams = $att->pageparams;

$this->cm = $att->cm;

$this->curdate = $att->pageparams->curdate;

$date = usergetdate($att->pageparams->curdate);
Expand Down Expand Up @@ -170,7 +174,7 @@ public function get_current_group() {
* Represents info about attendance sessions taking into account view parameters.
*
*/
class attforblock_sessions_manage_data implements renderable {
class attforblock_manage_data implements renderable {
/** @var array of sessions*/
public $sessions;

Expand Down Expand Up @@ -205,24 +209,15 @@ public function __construct(attforblock $att) {
$this->att = $att;
}

public function url_take($sessionid, $grouptype=NULL) {
$params = array('sessionid' => $sessionid);
$url = new moodle_url($this->att->url_take(), $params);
if (isset($grouptype))
$url->param('grouptype', $grouptype);

return $url;
public function url_take($sessionid, $grouptype) {
return url_helpers::url_take($this->att, $sessionid, $grouptype);
}

/**
* Must be called without or with both parameters
*/
public function url_sessions($sessionid=NULL, $action=NULL) {
$url = new moodle_url($this->att->url_sessions());
if (isset($sessionid) && isset($action))
$url->params(array('sessionid' => $sessionid, 'action' => $action));

return $url;
return url_helpers::url_sessions($this->att, $sessionid, $action);
}
}

Expand Down Expand Up @@ -295,7 +290,7 @@ public function url($params=array(), $excludeparams=array()) {
}

public function url_view($params=array()) {
return new moodle_url($this->att->url_view($params), $params);
return url_helpers::url_view($this->att, $params);
}

public function url_path() {
Expand Down Expand Up @@ -354,7 +349,7 @@ public function __construct(attforblock $att, $userid) {

$this->filtercontrols = new attforblock_filter_controls($att);

$this->sessionslog = $att->get_user_filtered_sessions_log($userid);
$this->sessionslog = $att->get_user_filtered_sessions_log_extended($userid);
}
else {
$this->coursesatts = get_user_courses_attendances($userid);
Expand Down Expand Up @@ -404,4 +399,113 @@ public function url() {
}
}

class attforblock_report_data implements renderable {
public $perm;
public $pageparams;

public $users;

public $groups;

public $sessions;

public $statuses;
// includes disablrd/deleted statuses
public $allstatuses;

public $gradable;

public $decimalpoints;

public $usersgroups = array();

public $sessionslog = array();

public $usersstats = array();

public $grades = array();

public $maxgrades = array();

private $att;

public function __construct(attforblock $att) {
global $CFG;

$this->perm = $att->perm;
$this->pageparams = $att->pageparams;

$this->users = $att->get_users($att->pageparams->group);

$this->groups = groups_get_all_groups($att->course->id);

$this->sessions = $att->get_filtered_sessions();

$this->statuses = $att->get_statuses();
$this->allstatuses = $att->get_statuses(false);

$this->gradable = $att->grade > 0;

if (!$this->decimalpoints = grade_get_setting($att->course->id, 'decimalpoints')) {
$this->decimalpoints = $CFG->grade_decimalpoints;
}

foreach ($this->users as $user) {
$this->usersgroups[$user->id] = groups_get_all_groups($att->course->id, $user->id);

$this->sessionslog[$user->id] = $att->get_user_filtered_sessions_log($user->id);

$this->usersstats[$user->id] = $att->get_user_statuses_stat($user->id);

if ($this->gradable) {
$this->grades[$user->id] = $att->get_user_grade($user->id);
$this->maxgrades[$user->id] = $att->get_user_max_grade($user->id);
}
}

$this->att = $att;
}

public function url_take($sessionid, $grouptype) {
return url_helpers::url_take($this->att, $sessionid, $grouptype);
}

public function url_view($params=array()) {
return url_helpers::url_view($this->att, $params);
}

public function url($params=array()) {
$params = array_merge($params, $this->pageparams->get_significant_params());

return $this->att->url_report($params);
}

}

class url_helpers {
public static function url_take($att, $sessionid, $grouptype) {
$params = array('sessionid' => $sessionid);
if (isset($grouptype))
$params['grouptype'] = $grouptype;

return $att->url_take($params);
}

/**
* Must be called without or with both parameters
*/
public static function url_sessions($att, $sessionid=NULL, $action=NULL) {
if (isset($sessionid) && isset($action))
$params = array('sessionid' => $sessionid, 'action' => $action);
else
$params = array();

return $att->url_sessions($params);
}

public static function url_view($att, $params=array()) {
return $att->url_view($params);
}
}

?>
Loading

0 comments on commit 9d8c2e8

Please sign in to comment.