function organizer_remind_all($recipient = null, $custommessage = "") { global $DB; list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); if ($recipient != null) { $entries = $DB->get_records_list('user', 'id', array($recipient)); } else { if ($cm->groupingid == 0) { $entries = get_enrolled_users($context, 'mod/organizer:register'); } else { $query = "SELECT u.* FROM {user} u\n INNER JOIN {groups_members} gm ON u.id = gm.userid\n INNER JOIN {groups} g ON gm.groupid = g.id\n INNER JOIN {groupings_groups} gg ON g.id = gg.groupid\n WHERE gg.groupingid = :grouping"; $par = array('grouping' => $cm->groupingid); $entries = $DB->get_records_sql($query, $par); } } $query = "SELECT DISTINCT u.id FROM {organizer} o\n INNER JOIN {organizer_slots} s ON o.id = s.organizerid\n INNER JOIN {organizer_slot_appointments} a ON s.id = a.slotid\n INNER JOIN {user} u ON a.userid = u.id\n WHERE o.id = :id AND (a.attended = 1 OR a.attended IS NULL)"; $par = array('id' => $organizer->id); $nonrecepients = $DB->get_fieldset_sql($query, $par); $count = 0; foreach ($entries as $entry) { if (!in_array($entry->id, $nonrecepients)) { organizer_prepare_and_send_message(array('user' => $entry->id, 'organizer' => $organizer, 'custommessage' => $custommessage), 'register_reminder:student'); // ---------------------------------------- MESSAGE!!! $count++; } } return $count; }
function organizer_display_printable_table($allowsubmissionsfromdate, $timedue, $columns, $slots, $entriesperpage = false, $textsize = '10', $orientation = 'L', $headerfooter = true, $filename = '') { global $USER; list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $columnwitdh = array(); $titles = array(); $columnformats = array(); $tsort = isset($_SESSION['organizer_tsort']) ? $_SESSION['organizer_tsort'] : ""; if ($tsort != "") { $order = "ASC"; if (substr($tsort, strlen($tsort) - strlen("DESC")) == "DESC") { $tsort = substr($tsort, 0, strlen($tsort) - strlen("DESC")); $order = "DESC"; } } $colorder = array(); $dosort = false; $i = 0; foreach ($columns as $column) { if ($column != "") { $titles[] = get_string("th_{$column}", 'organizer'); if ($tsort == $column) { $dosort = true; } $colorder[$column] = $i++; switch ($column) { case 'datetime': $columnwitdh[] = array('value' => 64, 'mode' => 'Relativ'); $columnformats[] = array('fill' => 0, 'align' => 'C'); break; case 'location': $columnwitdh[] = array('value' => 48, 'mode' => 'Relativ'); $columnformats[] = array('fill' => 0, 'align' => 'C'); break; case 'teacher': $columnwitdh[] = array('value' => 32, 'mode' => 'Relativ'); $columnformats[] = array('fill' => 0, 'align' => 'C'); break; case 'groupname': $columnwitdh[] = array('value' => 32, 'mode' => 'Relativ'); $columnformats[] = array('fill' => 0, 'align' => 'C'); break; case 'participant': $columnwitdh[] = array('value' => 32, 'mode' => 'Relativ'); $columnformats[] = array('fill' => 0, 'align' => 'C'); break; case 'idnumber': $columnwitdh[] = array('value' => 24, 'mode' => 'Relativ'); $columnformats[] = array('fill' => 0, 'align' => 'C'); break; case 'attended': $columnwitdh[] = array('value' => 12, 'mode' => 'Relativ'); $columnformats[] = array('fill' => 0, 'align' => 'C'); break; case 'grade': $columnwitdh[] = array('value' => 18, 'mode' => 'Relativ'); $columnformats[] = array('fill' => 0, 'align' => 'C'); break; case 'feedback': $columnwitdh[] = array('value' => 64, 'mode' => 'Relativ'); $columnformats[] = array('fill' => 1, 'align' => 'L'); break; } } } switch ($tsort) { case "datetime": $sort = "starttime"; break; case "location": $sort = "s.location"; break; case "teacher": $sort = "teacherfirstname"; break; case "participant": $sort = "u.lastname"; break; case "idnumber": $sort = "u.idnumber"; break; case "attended": $sort = "a.attended"; break; case "grade": $sort = "a.grade"; break; case "feedback": $sort = "a.feedback"; break; default: $sort = NULL; } if (!isset($order)) { $order = ""; } else { if ($order != "DESC" && $order != "ASC") { $order = ""; } } if ($dosort) { $dosort = $sort . ' ' . $order; } else { $dosort = ""; } $allowsubmissionsfromdate = $allowsubmissionsfromdate ? userdate($allowsubmissionsfromdate) : get_string('pdf_notactive', 'organizer'); $timedue = $timedue ? userdate($timedue) : get_string('pdf_notactive', 'organizer'); $mpdftable = new MTablePDF($orientation, $columnwitdh); $mpdftable->SetTitle(get_string('modulename', 'organizer') . " " . $organizer->name . " - " . get_string('printout', 'organizer')); $mpdftable->setRowsperPage($entriesperpage); $mpdftable->ShowHeaderFooter($headerfooter); $mpdftable->SetFontSize($textsize); $mpdftable->setHeaderText(get_string('course') . ':', "{$course->idnumber} {$course->fullname}", get_string('availablefrom', 'organizer') . ':', $allowsubmissionsfromdate, get_string('date') . ':', userdate(time()), get_string('modulename', 'organizer') . ':', $organizer->name, get_string('duedate', 'organizer') . ':', $timedue, '', ''); $mpdftable->setTitles($titles); $mpdftable->setColumnFormat($columnformats); $entries = fetch_table_entries($slots, $dosort); $rowspan = 0; foreach ($entries as $entry) { $row = array(); if ($rowspan == 0) { $rowspan = $entry->rowspan; } foreach ($columns as $column) { switch ($column) { // these columns may have rowspan case 'datetime': if ($rowspan != $entry->rowspan) { $row[] = null; } else { $datetime = userdate($entry->starttime, get_string('fulldatetimetemplate', 'organizer')) . ' - ' . userdate($entry->starttime + $entry->duration, get_string('timetemplate', 'organizer')); $row[] = array('data' => $datetime, 'rowspan' => $rowspan - 1); } break; case 'location': if ($rowspan != $entry->rowspan) { $row[] = null; } else { $row[] = array('data' => $entry->location, 'rowspan' => $rowspan - 1); } break; case 'teacher': if ($rowspan != $entry->rowspan) { $row[] = null; } else { $a = new stdClass(); $a->firstname = $entry->teacherfirstname; $a->lastname = $entry->teacherlastname; $name = get_string('fullname_template', 'organizer', $a); $row[] = array('data' => $name, 'rowspan' => $rowspan - 1); } break; case 'groupname': if ($rowspan != $entry->rowspan) { $row[] = null; } else { $groupname = isset($entry->groupname) ? $entry->groupname : ''; $row[] = array('data' => $groupname, 'rowspan' => $rowspan - 1); } break; // these columns cannot have rowspan // these columns cannot have rowspan case 'participant': $a = new stdClass(); $a->firstname = $entry->firstname; $a->lastname = $entry->lastname; $name = get_string('fullname_template', 'organizer', $a); $row[] = array('data' => $name, 'rowspan' => 0); break; case 'idnumber': $idnumber = isset($entry->idnumber) && $entry->idnumber !== '' ? $entry->idnumber : ''; $row[] = array('data' => $idnumber, 'rowspan' => 0); break; case 'attended': $attended = isset($entry->attended) ? $entry->attended == 1 ? get_string('yes') : get_string('no') : ''; $row[] = array('data' => $attended, 'rowspan' => 0); break; case 'grade': $grade = isset($entry->grade) ? sprintf("%01.2f", $entry->grade) : ''; $row[] = array('data' => $grade, 'rowspan' => 0); break; case 'feedback': $feedback = isset($entry->feedback) && $entry->feedback !== '' ? $entry->feedback : ''; $row[] = array('data' => $feedback, 'rowspan' => 0); break; } } $mpdftable->addRow($row); $rowspan--; } $format = optional_param('format', 'pdf', PARAM_TEXT); switch ($format) { case 'xlsx': $mpdftable->setOutputFormat(MTablePDF::OUTPUT_FORMAT_XLSX); break; case 'xls': $mpdftable->setOutputFormat(MTablePDF::OUTPUT_FORMAT_XLS); break; case 'ods': $mpdftable->setOutputFormat(MTablePDF::OUTPUT_FORMAT_ODS); break; case 'csv_comma': $mpdftable->setOutputFormat(MTablePDF::OUTPUT_FORMAT_CSV_COMMA); break; case 'csv_tab': $mpdftable->setOutputFormat(MTablePDF::OUTPUT_FORMAT_CSV_TAB); break; default: $mpdftable->setOutputFormat(MTablePDF::OUTPUT_FORMAT_PDF); break; } $mpdftable->generate($filename); die; }
// If not, see <http://www.gnu.org/licenses/>. /** * addslot.php * * @package mod_organizer * @author Andreas Windbichler * @author Andreas Hruska (andreas.hruska@tuwien.ac.at) * @author Katarzyna Potocka (katarzyna.potocka@tuwien.ac.at) * @copyright 2014 Academic Moodle Cooperation {@link http://www.academic-moodle-cooperation.org} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; require_once dirname(__FILE__) . '/view_action_form_add.php'; require_once dirname(__FILE__) . '/view_lib.php'; //-------------------------------------------------------------------------------------------------- list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); require_login($course, false, $cm); $mode = optional_param('mode', null, PARAM_INT); $action = optional_param('action', null, PARAM_ACTION); $user = optional_param('user', null, PARAM_INT); $slot = optional_param('slot', null, PARAM_INT); $slots = optional_param_array('slots', array(), PARAM_INT); $app = optional_param('app', null, PARAM_INT); $tsort = optional_param('tsort', null, PARAM_ALPHA); $url = new moodle_url('/mod/organizer/view_action.php'); $url->param('id', $cm->id); $url->param('mode', $mode); $url->param('action', $action); $url->param('sesskey', sesskey()); $PAGE->set_url($url); $PAGE->set_pagelayout('standard');
function organizer_evaluate_slots($data) { global $DB; list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $slotids = array(); if (isset($data->apps) && count($data->apps) > 0 && isset($data->slotenable)) { foreach ($data->apps as $appid => $app) { $newapp = $DB->get_record('organizer_slot_appointments', array('id' => $appid)); if (array_search($newapp->slotid, array_keys($data->slotenable)) === false) { continue; } $newapp->attended = $app['attended']; if ($organizer->grade > 0) { $newapp->grade = isset($app['grade']) ? $app['grade'] : -1; } else { $newapp->grade = isset($app['grade']) ? $app['grade'] : 0; } $newapp->feedback = isset($app['feedback']) ? $app['feedback'] : ""; $newapp->allownewappointments = $app['allownewappointments']; $DB->update_record('organizer_slot_appointments', $newapp); organizer_update_grades($organizer, $newapp->userid); $slotids[] = $newapp->slotid; } } return $slotids; }
protected function definition() { global $DB; $mform = $this->_form; $data = $this->_customdata; $mform->addElement('hidden', 'id', $data['id']); $mform->setType('id', PARAM_INT); $mform->addElement('hidden', 'mode', $data['mode']); $mform->setType('mode', PARAM_INT); $mform->addElement('hidden', 'action', 'remindall'); $mform->setType('action', PARAM_ACTION); list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $entries = organizer_organizer_get_status_table_entries(array('sort' => '')); $recipient = optional_param('user', null, PARAM_INT); if ($recipient != null) { $recepients = array(); $recepients = $DB->get_records_list('user', 'id', array($recipient)); $counter = count($recepients); $mform->addElement('hidden', 'recipient', $recipient); $mform->setType('recipient', PARAM_INT); } else { $counter = 0; $recepients = array(); foreach ($entries as $entry) { if ($entry->status == ORGANIZER_APP_STATUS_NOT_REGISTERED || $entry->status == ORGANIZER_APP_STATUS_NOT_ATTENDED_REAPP) { $counter++; $recepients[] = $entry; } } } $buttonarray = array(); if ($counter > 0) { $a = new stdClass(); $a->count = $counter; if ($counter == 1) { $mform->addElement('static', '', '', get_string('organizer_remind_all_recepients_sg', 'organizer', $a)); } else { $mform->addElement('static', '', '', get_string('organizer_remind_all_recepients_pl', 'organizer', $a)); } foreach ($recepients as $recepient) { $mform->addElement('static', '', '', organizer_get_name_link($recepient->id) . ($recepient->idnumber ? " ({$recepient->idnumber})" : '')); } $buttonarray[] =& $mform->createElement('submit', 'confirm', get_string('confirm_organizer_remind_all', 'organizer')); } else { $mform->addElement('static', '', '', get_string('organizer_remind_all_no_recepients', 'organizer')); $buttonarray[] =& $mform->createElement('submit', 'confirm', get_string('confirm_organizer_remind_all', 'organizer'), array('disabled')); } $buttonarray[] =& $mform->createElement('cancel'); $str_automessage = "register_reminder:"; $str_automessage .= $organizer->isgrouporganizer == 0 ? "student" : "group"; $str_automessage .= ":fullmessage"; $a = new stdClass(); $a->receivername = get_string('recipientname', 'organizer'); $a->courseid = $course->idnumber == "" ? "" : $course->idnumber . ' '; $a->coursefullname = $course->fullname; $a->custommessage = ""; $mform->addElement('static', 'message_autogenerated', get_string('message_autogenerated', 'organizer'), nl2br(str_replace("\n\n\n", "\n", get_string($str_automessage, 'organizer', $a)))); $mform->addElement('editor', 'message_custommessage', get_string('message_custommessage', 'organizer')); $mform->addHelpButton('message_custommessage', 'message_custommessage', 'organizer'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); $mform->closeHeaderBefore('buttonar'); }
function organizer_organizer_student_action_allowed($action, $slot) { global $DB; if (!$DB->record_exists('organizer_slots', array('id' => $slot))) { return false; } $slotx = new organizer_slot($slot); list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $canregister = has_capability('mod/organizer:register', $context, null, false); $canunregister = has_capability('mod/organizer:unregister', $context, null, false); $canreregister = $canregister && $canunregister; $myapp = organizer_get_last_user_appointment($organizer); if ($myapp) { $regslot = $DB->get_record('organizer_slots', array('id' => $myapp->slotid)); if (isset($regslot)) { $regslotx = new organizer_slot($regslot); } } $myslotexists = isset($regslot); $organizerdisabled = $slotx->organizer_unavailable() || $slotx->organizer_expired(); $slotdisabled = $slotx->is_past_due() || $slotx->is_past_deadline(); $myslotpending = $myslotexists && $regslotx->is_past_deadline() && !$regslotx->is_evaluated(); $ismyslot = $myslotexists && $slotx->id == $regslot->id; $slotfull = $slotx->is_full(); $disabled = $myslotpending || $organizerdisabled || $slotdisabled || !$slotx->organizer_user_has_access() || $slotx->is_evaluated(); if ($myslotexists) { if (!$slotdisabled) { if ($ismyslot) { $disabled |= !$canunregister || isset($regslotx) && $regslotx->is_evaluated() && !$myapp->allownewappointments; } else { $disabled |= $slotfull || !$canreregister || isset($regslotx) && $regslotx->is_evaluated() && !$myapp->allownewappointments; } } $allowedaction = $ismyslot ? ORGANIZER_ACTION_UNREGISTER : ORGANIZER_ACTION_REREGISTER; } else { $disabled |= $slotfull || !$canregister || $ismyslot; $allowedaction = $ismyslot ? ORGANIZER_ACTION_UNREGISTER : ORGANIZER_ACTION_REGISTER; } return !$disabled && $action == $allowedaction; }
function organizer_student_action($params, $slot) { global $DB, $OUTPUT; $slotx = new organizer_slot($slot); list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $canregister = has_capability('mod/organizer:register', $context, null, false); $canunregister = has_capability('mod/organizer:unregister', $context, null, false); $canreregister = $canregister && $canunregister; $myapp = organizer_get_last_user_appointment($organizer); if ($myapp) { $regslot = $DB->get_record('organizer_slots', array('id' => $myapp->slotid)); if (isset($regslot)) { $regslotx = new organizer_slot($regslot); } } $myslotexists = isset($regslot); $organizerdisabled = $slotx->organizer_unavailable() || $slotx->organizer_expired(); $slotdisabled = $slotx->is_past_due() || $slotx->is_past_deadline(); $myslotpending = $myslotexists && $regslotx->is_past_deadline() && !$regslotx->is_evaluated(); $ismyslot = $myslotexists && $slotx->id == $regslot->id; $slotfull = $slotx->is_full(); $disabled = $myslotpending || $organizerdisabled || $slotdisabled || !$slotx->organizer_user_has_access() || $slotx->is_evaluated(); if ($myslotexists) { if (!$slotdisabled) { if ($ismyslot) { $disabled |= !$canunregister || isset($regslotx) && $regslotx->is_evaluated() && !$myapp->allownewappointments; } else { $disabled |= $slotfull || !$canreregister || isset($regslotx) && $regslotx->is_evaluated() && !$myapp->allownewappointments; } } $action = $ismyslot ? 'unregister' : 'reregister'; } else { $disabled |= $slotfull || !$canregister || $ismyslot; $action = $ismyslot ? 'unregister' : 'register'; } if ($ismyslot || organizer_is_my_slot($slotx)) { $comment_url = new moodle_url('/mod/organizer/comment_edit.php', array('id' => $params['id'], 'slot' => $slotx->id)); $comment_btn_disabled = $organizerdisabled || !$slotx->organizer_user_has_access(); $comment_btn = $OUTPUT->single_button($comment_url, get_string("btn_comment", 'organizer'), 'post', array('disabled' => $comment_btn_disabled)); return organizer_get_reg_button($action, $slotx->id, $params, $disabled) . '<br/>' . $comment_btn; } else { return organizer_get_reg_button($action, $slotx->id, $params, $disabled); } }
private function _load_teachers() { list($cm, $course, $organizer, $context) = organizer_get_course_module_data(); $teachersraw = get_users_by_capability($context, 'mod/organizer:addslots'); $teachers = array(); foreach ($teachersraw as $teacher) { $a = new stdClass(); $a->firstname = $teacher->firstname; $a->lastname = $teacher->lastname; $name = get_string('fullname_template', 'organizer', $a) . " ({$teacher->email})"; $teachers[$teacher->id] = $name; } return $teachers; }