/**
  * 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;
 }
Exemplo n.º 4
0
/**
 * 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);
}
Exemplo n.º 6
0
/**
 * 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);
            }
        }
    }
}