/** * Build the html_table object to represent details * @return html_table */ public function html_table() { global $OUTPUT, $doShowPrintableVersion; $table = new html_table(); $table->attributes['class'] .= ' attendanceregister_sessionlist table table-condensed table-bordered table-striped table-hover'; /// Header $table->head = array(get_string('count', 'attendanceregister'), get_string('start', 'attendanceregister'), get_string('end', 'attendanceregister'), get_string('online_offline', 'attendanceregister')); $table->align = array('left', 'left', 'left', 'right'); if ($this->register->offlinesessions) { $table->head[] = get_string('online_offline', 'attendanceregister'); $table->align[] = 'center'; if ($this->register->offlinespecifycourse) { $table->head[] = get_string('ref_course', 'attendanceregister'); $table->align[] = 'left'; } if ($this->register->offlinecomments) { $table->head[] = get_string('comments', 'attendanceregister'); $table->align[] = 'left'; } } /// Table rows if ($this->userSessions) { $stronline = get_string('online', 'attendanceregister'); $stroffline = get_string('offline', 'attendanceregister'); // Iterate sessions $rowcount = 0; foreach ($this->userSessions as $session) { $rowcount++; // Rowcount column $rowcountStr = (string) $rowcount; // Offline Delete button (if Session is offline and the current user may delete this user's offline sessions) if (!$session->onlinesess && $this->userCapabilites->canDeleteThisUserOfflineSession($session->userid)) { $deleteUrl = attendanceregister_makeUrl($this->register, $session->userid, null, ATTENDANCEREGISTER_ACTION_DELETE_OFFLINE_SESSION, array('session' => $session->id)); $confirmAction = new confirm_action(get_string('are_you_sure_to_delete_offline_session', 'attendanceregister')); $rowcountStr .= ' ' . $OUTPUT->action_icon($deleteUrl, new pix_icon('t/delete', get_string('delete')), $confirmAction); } // Duration $duration = attendanceregister_format_duration($session->duration); // Basic columns $tableRow = new html_table_row(array($rowcountStr, attendanceregister__formatDateTime($session->login), attendanceregister__formatDateTime($session->logout), $duration)); // Add class for zebra stripes $tableRow->attributes['class'] .= $rowcount % 2 ? ' attendanceregister_oddrow' : ' attendanceregister_evenrow'; // Optional columns if ($this->register->offlinesessions) { // Offline/Online $onlineOfflineStr = $session->onlinesess ? $stronline : $stroffline; // if saved by other if ($session->addedbyuserid) { // Retrieve the other user, if any, or unknown $a = attendanceregister__otherUserFullnameOrUnknown($session->addedbyuserid); $addedByStr = get_string('session_added_by_another_user', 'attendanceregister', $a); $onlineOfflineStr = html_writer::tag('a', $onlineOfflineStr . '*', array('title' => $addedByStr, 'class' => 'addedbyother')); } $tableCell = new html_table_cell($onlineOfflineStr); $tableCell->attributes['class'] .= $session->onlinesess ? ' online_label' : ' offline_label'; $tableRow->attributes['class'] .= $session->onlinesess ? ' success' : ''; $tableRow->cells[] = $tableCell; // Ref.Course if ($this->register->offlinespecifycourse) { if ($session->onlinesess) { $refCourseName = ''; } else { if ($session->refcourse) { $refCourse = $this->trackedCourses->courses[$session->refcourse]; // In Printable Version show fullname (shortname), otherwise only shortname if ($doShowPrintableVersion) { $refCourseName = $refCourse->fullname . ' (' . $refCourse->shortname . ')'; } else { $refCourseName = $refCourse->shortname; } } else { $refCourseName = get_string('not_specified', 'attendanceregister'); } } $tableCell = new html_table_cell($refCourseName); $tableRow->cells[] = $tableCell; } // Offline Comments if ($this->register->offlinecomments) { if (!$session->onlinesess && $session->comments) { // Shorten the comments (if !printable) if (!$doShowPrintableVersion) { $comment = attendanceregister__shorten_comment($session->comments); } else { $comment = $session->comments; } } else { $comment = ''; } $tableCell = new html_table_cell($comment); $tableRow->cells[] = $tableCell; } } $table->data[] = $tableRow; } } else { // No Session $row = new html_table_row(); $labelCell = new html_table_cell(); $labelCell->colspan = count($table->head); $labelCell->text = get_string('no_session_for_this_user', 'attendanceregister'); $row->cells[] = $labelCell; $table->data[] = $row; } return $table; }
// Show Recalc pending warning if ($register->pendingrecalc && $userCapabilities->canRecalcSessions && !$doShowPrintableVersion) { echo $OUTPUT->notification(get_string('recalc_scheduled_on_next_cron', 'attendanceregister')); } else { if (!attendanceregister__didCronRanAfterInstanceCreation($cm)) { echo $OUTPUT->notification(get_string('first_calc_at_next_cron_run', 'attendanceregister')); } } echo $OUTPUT->container_start('attendanceregister_buttonbar btn-group'); // If current user is tracked, show view-my-sessions button [feature #28] if ($userCapabilities->isTracked) { $linkUrl = attendanceregister_makeUrl($register, $USER->id); echo $OUTPUT->single_button($linkUrl, get_string('show_my_sessions', 'attendanceregister'), 'get'); } // Printable version button or Back to normal version $linkUrl = attendanceregister_makeUrl($register, null, null, $doShowPrintableVersion ? null : ATTENDANCEREGISTER_ACTION_PRINTABLE); echo $OUTPUT->single_button($linkUrl, $doShowPrintableVersion ? get_string('back_to_normal', 'attendanceregister') : get_string('show_printable', 'attendanceregister'), 'get'); echo $OUTPUT->container_end(); // Button Bar echo '<br />'; // Show list of tracked courses echo '<div class="table-responsive">'; echo html_writer::table($trackedUsers->trackedCourses->html_table()); echo '</div>'; // Show tracked Users list echo '<div class="table-responsive">'; echo html_writer::table($trackedUsers->html_table()); echo '</div>'; } } }
/** * Build the html_table object to represent details * @return html_table */ public function html_table() { global $OUTPUT, $doShowPrintableVersion; $strNotAvail = get_string('notavailable'); $table = new html_table(); $table->attributes['class'] .= ' attendanceregister_userlist table table-condensed table-bordered table-striped table-hover'; /// Header $table->head = array(get_string('count', 'attendanceregister'), get_string('fullname', 'attendanceregister'), get_string('total_time_online', 'attendanceregister')); $table->align = array('left', 'left', 'right'); if ($this->register->offlinesessions) { $table->head[] = get_string('total_time_offline', 'attendanceregister'); $table->align[] = 'right'; $table->head[] = get_string('grandtotal_time', 'attendanceregister'); $table->align[] = 'right'; } $table->head[] = get_string('last_session_logout', 'attendanceregister'); $table->align[] = 'left'; /// Table Rows if ($this->users) { $rowcount = 0; foreach ($this->users as $user) { $rowcount++; $userAggregate = null; if (isset($this->usersSummaryAggregates[$user->id])) { $userAggregate = $this->usersSummaryAggregates[$user->id]; } // Basic columns $linkUrl = attendanceregister_makeUrl($this->register, $user->id); $fullnameWithLink = '<a href="' . $linkUrl . '">' . fullname($user) . '</a>'; $onlineDuration = $userAggregate ? $userAggregate->onlineTotalDuration : null; $onlineDurationStr = attendanceregister_format_duration($onlineDuration); $tableRow = new html_table_row(array($rowcount, $fullnameWithLink, $onlineDurationStr)); // Add class for zebra stripes $tableRow->attributes['class'] .= $rowcount % 2 ? ' attendanceregister_oddrow' : ' attendanceregister_evenrow'; // Optional columns if ($this->register->offlinesessions) { $offlineDuration = $userAggregate ? $userAggregate->offlineTotalDuration : null; $offlineDurationStr = attendanceregister_format_duration($offlineDuration); $tableCell = new html_table_cell($offlineDurationStr); $tableRow->cells[] = $tableCell; $grandtotalDuration = $userAggregate ? $userAggregate->grandTotalDuration : null; $grandtotalDurationStr = attendanceregister_format_duration($grandtotalDuration); $tableCell = new html_table_cell($grandtotalDurationStr); $tableRow->cells[] = $tableCell; } $lastSessionLogoutStr = $userAggregate ? attendanceregister__formatDateTime($userAggregate->lastSassionLogout) : get_string('no_session', 'attendanceregister'); $tableCell = new html_table_cell($lastSessionLogoutStr); $tableRow->cells[] = $tableCell; $table->data[] = $tableRow; } } else { // No User $row = new html_table_row(); $labelCell = new html_table_cell(); $labelCell->colspan = count($table->head); $labelCell->text = get_string('no_tracked_user', 'attendanceregister'); $row->cells[] = $labelCell; $table->data[] = $row; } return $table; }
/** * Call add_to_log() * @param object $register * @param int $cmId course_module->id * @param string $action * @param int $userId * @param int $groupId */ function attendanceregister_add_to_log($register, $cmId, $action, $userId = null, $groupId = null) { // URL for logging $logUrl = attendanceregister_makeUrl($register, $userId, $groupId, $action, null, true); $context = context_module::instance($cmId); // Action for logging switch ($action) { case ATTENDANCEREGISTER_ACTION_RECALCULATE: $event = \mod_attendanceregister\event\session_updated::create(array('context' => $context, 'objectid' => $register->id, 'other' => array('action' => 'recalc', 'urlaction' => 'recalc'))); break; case ATTENDANCEREGISTER_ACTION_SAVE_OFFLINE_SESSION: $event = \mod_attendanceregister\event\session_updated::create(array('context' => $context, 'objectid' => $register->id, 'other' => array('action' => 'add offline', 'userid' => $userId, 'urlaction' => 'saveoffline'))); break; case ATTENDANCEREGISTER_ACTION_DELETE_OFFLINE_SESSION: $event = \mod_attendanceregister\event\session_updated::create(array('context' => $context, 'objectid' => $register->id, 'other' => array('action' => 'delete offline', 'userid' => $userId, 'urlaction' => 'deloffline'))); break; case ATTENDANCEREGISTER_ACTION_PRINTABLE: default: if ($userId) { $logAction = ATTENDANCEREGISTER_LOGACTION_VIEW; $other = array('action' => 'view', 'userid' => $userId); } else { $logAction = ATTENDANCEREGISTER_LOGACTION_VIEW_ALL; $other = array('action' => 'view all'); } $event = \mod_attendanceregister\event\course_module_viewed::create(array('objectid' => $register->id, 'context' => $context, 'other' => $other)); } // Add Log Entry $event->trigger(); }
/** * Call add_to_log() * @param object $register * @param int $cmId course_module->id * @param string $action * @param int $userId * @param int $groupId */ function attendanceregister_add_to_log($register, $cmId, $action, $userId = null, $groupId = null) { // URL for logging $logUrl = attendanceregister_makeUrl($register, $userId, $groupId, $action, null, true); // Action for logging switch ($action) { case ATTENDANCEREGISTER_ACTION_RECALCULATE: $logAction = ATTENDANCEREGISTER_LOGACTION_RECALCULTATE; break; case ATTENDANCEREGISTER_ACTION_SAVE_OFFLINE_SESSION: $logAction = ATTENDANCEREGISTER_LOGACTION_ADD_OFFLINE; break; case ATTENDANCEREGISTER_ACTION_DELETE_OFFLINE_SESSION: $logAction = ATTENDANCEREGISTER_LOGACTION_DELETE_OFFLINE; break; case ATTENDANCEREGISTER_ACTION_PRINTABLE: default: if ($userId) { $logAction = ATTENDANCEREGISTER_LOGACTION_VIEW; } else { $logAction = ATTENDANCEREGISTER_LOGACTION_VIEW_ALL; } } // Add Log Entry add_to_log($register->course, 'attendanceregister', $logAction, $logUrl, '', $cmId); }
/** * Adds module specific settings to the settings block * * @param settings_navigation $settingsnav The settings navigation object * @param navigation_node $booknode The node to add module settings to * @return void */ function attendanceregister_extend_settings_navigation(settings_navigation $settingsnav, navigation_node $attendanceregisternode) { global $PAGE, $USER; if ($PAGE->cm->modname !== 'attendanceregister') { return; } if (empty($PAGE->cm->context)) { $PAGE->cm->context = context_module::instance($PAGE->cm->instance); } $register = $PAGE->activityrecord; $params = $PAGE->url->params(); $userCapabilities = new attendanceregister_user_capablities($PAGE->cm->context); // Add Recalc menu entries to Settings Menu if ($userCapabilities->canRecalcSessions) { if (!empty($params['userid']) || !$userCapabilities->canViewOtherRegisters) { // Single User view $userId = clean_param($params['userid'], PARAM_INT); $linkUrl = attendanceregister_makeUrl($register, $userId, null, ATTENDANCEREGISTER_ACTION_RECALCULATE); $menuEntryStr = get_string('force_recalc_user_session', 'attendanceregister'); $attendanceregisternode->add($menuEntryStr, $linkUrl, navigation_node::TYPE_SETTING); } else { // All Users view $linkUrl = attendanceregister_makeUrl($register, null, null, ATTENDANCEREGISTER_ACTION_RECALCULATE); $menuEntryStr = get_string('force_recalc_all_session_now', 'attendanceregister'); if ($register->pendingrecalc) { $menuEntryStr = $menuEntryStr . ' ' . get_string('recalc_already_pending', 'attendanceregister'); $attendanceregisternode->add($menuEntryStr, $linkUrl, navigation_node::TYPE_SETTING); } else { $attendanceregisternode->add($menuEntryStr, $linkUrl, navigation_node::TYPE_SETTING); // Also adds Schedule Entry $linkUrl2 = attendanceregister_makeUrl($register, null, null, ATTENDANCEREGISTER_ACTION_SCHEDULERECALC); $menuEntryStr2 = get_string('schedule_reclalc_all_session', 'attendanceregister'); $attendanceregisternode->add($menuEntryStr2, $linkUrl2, navigation_node::TYPE_SETTING); } } } }