function organizer_make_infobox($params, $organizer, $context, &$popups)
{
    global $PAGE;
    user_preference_allow_ajax_update('mod_organizer_showpasttimeslots', PARAM_BOOL);
    user_preference_allow_ajax_update('mod_organizer_showmyslotsonly', PARAM_BOOL);
    user_preference_allow_ajax_update('mod_organizer_showfreeslotsonly', PARAM_BOOL);
    $PAGE->requires->js_init_call('M.mod_organizer.init_infobox');
    $output = '';
    if ($organizer->alwaysshowdescription || time() > $organizer->allowregistrationsfromdate) {
        $output = organizer_make_description_section($organizer);
    }
    switch ($params['mode']) {
        case ORGANIZER_TAB_APPOINTMENTS_VIEW:
            break;
        case ORGANIZER_TAB_STUDENT_VIEW:
            $output .= organizer_make_myapp_section($params, $organizer, organizer_get_last_user_appointment($organizer), $popups);
            break;
        case ORGANIZER_TAB_REGISTRATION_STATUS_VIEW:
            $output .= organizer_make_reminder_section($params, $context);
            break;
        default:
            print_error("Wrong view mode: {$params['mode']}");
    }
    $output .= organizer_make_slotoptions_section($params);
    $output .= organizer_make_messages_section($params);
    return $output;
}
function organizer_reregister_appointment($slotid, $groupid = 0)
{
    global $DB, $USER;
    $semaphore = sem_get($slotid);
    sem_acquire($semaphore);
    $slot = new organizer_slot($slotid);
    if ($slot->is_full()) {
        return false;
    }
    $ok = true;
    if (organizer_is_group_mode()) {
        $memberids = $DB->get_fieldset_select('groups_members', 'userid', "groupid = {$groupid}");
        foreach ($memberids as $memberid) {
            $app = organizer_get_last_user_appointment($slot->organizerid, $memberid);
            $ok ^= organizer_register_single_appointment($slotid, $memberid, $USER->id, $groupid);
            if (isset($app)) {
                $ok ^= organizer_unregister_single_appointment($app->slotid, $memberid);
            }
        }
    } else {
        $app = organizer_get_last_user_appointment($slot->organizerid);
        $ok ^= organizer_register_single_appointment($slotid, $USER->id);
        if (isset($app)) {
            $ok ^= organizer_unregister_single_appointment($app->slotid, $USER->id);
        }
    }
    list($cm, $course, $organizer, $context) = organizer_get_course_module_data();
    $slot = $DB->get_record('organizer_slots', array('id' => $slotid));
    organizer_add_event_slot($cm->id, $slot);
    sem_release($semaphore);
    return $ok;
}
    $row[] = $organizer->intro;
    $cm = get_coursemodule_from_instance('organizer', $organizer->id, $course->id, false, MUST_EXIST);
    $context = context_module::instance($cm->id, MUST_EXIST);
    if (has_capability('mod/organizer:viewregistrations', $context)) {
        $a = organizer_get_counters($organizer);
        if ($organizer->isgrouporganizer) {
            $reg = get_string('mymoodle_registered_group_short', 'organizer', $a);
            $att = get_string('mymoodle_attended_group_short', 'organizer', $a);
            $str = '<p>' . $reg . '</p><p>' . $att . '</p>';
        } else {
            $reg = get_string('mymoodle_registered_short', 'organizer', $a);
            $att = get_string('mymoodle_attended_short', 'organizer', $a);
            $str = '<p>' . $reg . '</p><p>' . $att . '</p>';
        }
        $row[] = $str;
        $row[] = '-';
    } else {
        $row[] = organizer_get_overview_student($organizer, true);
        $app = organizer_get_last_user_appointment($organizer, null, false);
        if ($app) {
            $row[] = organizer_display_grade($organizer, $app->grade);
        } else {
            $row[] = '-';
        }
    }
    $table->data[] = $row;
}
echo $OUTPUT->heading(get_string('modulenameplural', 'organizer'), 2);
echo html_writer::table($table);
echo $OUTPUT->footer();
die;
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;
}
Exemple #5
0
function organizer_get_overview_student($organizer, $forindex = false)
{
    global $DB;
    if (!$forindex) {
        $str = '<div class="assignment overview">';
        $str .= organizer_get_overview_link($organizer);
        $class = "class=\"info organizerinfo\"";
        $element = "div";
    } else {
        $str = '';
        $class = "";
        $element = "p";
    }
    if ($organizer->isgrouporganizer) {
        $group = organizer_fetch_group($organizer);
        $app = organizer_get_last_user_appointment($organizer);
        if ($app && isset($app->attended) && (int) $app->attended === 1) {
            $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid));
            $a = new stdClass();
            $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer'));
            $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer'));
            $a->groupname = $group->name;
            $completedapp = get_string('mymoodle_completed_app_group', 'organizer', $a) . ($forindex ? '' : "<br />(" . get_string('grade') . ": " . organizer_display_grade($organizer, $app->grade) . ")");
            if ($app->allownewappointments) {
                $completedapp .= "<br />" . get_string('can_reregister', 'organizer');
            }
            $str .= "<{$element} {$class}>{$completedapp}</{$element}>";
        } else {
            if ($app && isset($app->attended) && (int) $app->attended === 0) {
                $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid));
                $a = new stdClass();
                $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer'));
                $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer'));
                $a->groupname = $group->name;
                $missedapp = get_string('mymoodle_missed_app_group', 'organizer', $a) . ($forindex ? '' : "<br />(" . get_string('grade') . ": " . organizer_display_grade($organizer, $app->grade) . ")");
                if ($app->allownewappointments) {
                    $missedapp .= "<br />" . get_string('can_reregister', 'organizer');
                }
                $str .= "<{$element} {$class}>{$missedapp}</{$element}>";
                if (isset($organizer->duedate)) {
                    $a = new stdClass();
                    $a->date = userdate($organizer->duedate, get_string('fulldatetemplate', 'organizer'));
                    $a->time = userdate($organizer->duedate, get_string('timetemplate', 'organizer'));
                    if ($organizer->duedate > time()) {
                        $orgexpires = get_string('mymoodle_organizer_expires', 'organizer', $a);
                    } else {
                        $orgexpires = get_string('mymoodle_organizer_expired', 'organizer', $a);
                    }
                    $str .= "<{$element} {$class}>{$orgexpires}</{$element}>";
                }
            } else {
                if ($app && !isset($app->attended)) {
                    $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid));
                    $a = new stdClass();
                    $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer'));
                    $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer'));
                    $a->groupname = $group->name;
                    if (isset($slot->locationlink) && $slot->locationlink != '') {
                        $a->location = html_writer::link($slot->locationlink, $slot->location, array('target' => '_blank'));
                    } else {
                        $a->location = $slot->location;
                    }
                    if ($slot->starttime > time()) {
                        $upcomingapp = get_string('mymoodle_upcoming_app_group', 'organizer', $a);
                        $str .= "<{$element} {$class}>{$upcomingapp}</{$element}>";
                    } else {
                        $pending = get_string('mymoodle_pending_app_group', 'organizer', $a);
                        $str .= "<{$element} {$class}>{$pending}</{$element}>";
                    }
                } else {
                    $noregslot = get_string('mymoodle_no_reg_slot', 'organizer');
                    $str .= "<{$element} {$class}>{$noregslot}</{$element}>";
                    if (isset($organizer->duedate)) {
                        $a = new stdClass();
                        $a->date = userdate($organizer->duedate, get_string('fulldatetemplate', 'organizer'));
                        $a->time = userdate($organizer->duedate, get_string('timetemplate', 'organizer'));
                        if ($organizer->duedate > time()) {
                            $orgexpires = get_string('mymoodle_organizer_expires', 'organizer', $a);
                        } else {
                            $orgexpires = get_string('mymoodle_organizer_expired', 'organizer', $a);
                        }
                        $str .= "<{$element} {$class}>{$orgexpires}</{$element}>";
                    }
                }
            }
        }
    } else {
        $app = organizer_get_last_user_appointment($organizer);
        if ($app && isset($app->attended) && (int) $app->attended === 1) {
            $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid));
            $a = new stdClass();
            $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer'));
            $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer'));
            $completedapp = get_string('mymoodle_completed_app', 'organizer', $a) . ($forindex ? '' : "<br />(" . get_string('grade') . ": " . organizer_display_grade($organizer, $app->grade) . ")");
            if ($app->allownewappointments) {
                $completedapp .= "<br />" . get_string('can_reregister', 'organizer');
            }
            $str .= "<{$element} {$class}>{$completedapp}</{$element}>";
        } else {
            if ($app && isset($app->attended) && (int) $app->attended === 0) {
                $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid));
                $a = new stdClass();
                $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer'));
                $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer'));
                $missedapp = get_string('mymoodle_missed_app', 'organizer', $a) . ($forindex ? '' : "<br />(" . get_string('grade') . ": " . organizer_display_grade($organizer, $app->grade) . ")");
                if ($app->allownewappointments) {
                    $missedapp .= "<br />" . get_string('can_reregister', 'organizer');
                }
                $str .= "<{$element} {$class}>{$missedapp}</{$element}>";
                if (isset($organizer->duedate)) {
                    $a = new stdClass();
                    $a->date = userdate($organizer->duedate, get_string('fulldatetemplate', 'organizer'));
                    $a->time = userdate($organizer->duedate, get_string('timetemplate', 'organizer'));
                    if ($organizer->duedate > time()) {
                        $orgexpires = get_string('mymoodle_organizer_expires', 'organizer', $a);
                    } else {
                        $orgexpires = get_string('mymoodle_organizer_expired', 'organizer', $a);
                    }
                    $str .= "<{$element} {$class}>{$orgexpires}</{$element}>";
                }
            } else {
                if ($app && !isset($app->attended)) {
                    $slot = $DB->get_record('organizer_slots', array('id' => $app->slotid));
                    $a = new stdClass();
                    $a->date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer'));
                    $a->time = userdate($slot->starttime, get_string('timetemplate', 'organizer'));
                    if (isset($slot->locationlink) && $slot->locationlink != '') {
                        $a->location = html_writer::link($slot->locationlink, $slot->location, array('target' => '_blank'));
                    } else {
                        $a->location = $slot->location;
                    }
                    if ($slot->starttime > time()) {
                        $upcomingapp = get_string('mymoodle_upcoming_app', 'organizer', $a);
                        $str .= "<{$element} {$class}>{$upcomingapp}</{$element}>";
                    } else {
                        $pending = get_string('mymoodle_pending_app', 'organizer', $a);
                        $str .= "<{$element} {$class}>{$pending}</{$element}>";
                    }
                } else {
                    $noregslot = get_string('mymoodle_no_reg_slot', 'organizer');
                    $str .= "<{$element} {$class}>{$noregslot}</{$element}>";
                    if (isset($organizer->duedate)) {
                        $a = new stdClass();
                        $a->date = userdate($organizer->duedate, get_string('fulldatetemplate', 'organizer'));
                        $a->time = userdate($organizer->duedate, get_string('timetemplate', 'organizer'));
                        if ($organizer->duedate > time()) {
                            $orgexpires = get_string('mymoodle_organizer_expires', 'organizer', $a);
                        } else {
                            $orgexpires = get_string('mymoodle_organizer_expired', 'organizer', $a);
                        }
                        $str .= '<' . $element . ' ' . $class . '>' . $orgexpires . '</' . $element . '>';
                    }
                }
            }
        }
    }
    if (!$forindex) {
        $str .= '</div>';
    }
    return $str;
}
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 _addevalfields()
 {
     global $DB;
     $mform = $this->_form;
     $data = $this->_customdata;
     $now = time();
     $i = 0;
     foreach ($data['slots'] as $slotid) {
         $mform->addElement('hidden', 'slots[' . $i++ . ']', $slotid);
         $slot = $DB->get_record('organizer_slots', array('id' => $slotid));
         $organizer = $DB->get_record('organizer', array('id' => $slot->organizerid));
         $appgroup = array();
         $checkboxname = "slotenable[{$slotid}]";
         $appgroup[] = $mform->createElement('static', '', '', '<p>');
         $box = $appgroup[] = $mform->createElement('checkbox', $checkboxname);
         $mform->setDefault($checkboxname, true);
         $date = userdate($slot->starttime, get_string('fulldatetemplate', 'organizer'));
         $time = userdate($slot->starttime, get_string('timetemplate', 'organizer')) . ' - ' . userdate($slot->starttime + $slot->duration, get_string('timetemplate', 'organizer'));
         $appgroup[] = $mform->createElement('static', '', '', " <strong>{$date}, {$time}</strong>");
         if ($slot->starttime > $now) {
             $appgroup[] = $mform->createElement('static', '', '', ' <em>(' . get_string('eval_not_occured', 'organizer') . ')</em>');
         }
         $appgroup[] = $mform->createElement('static', '', '', '</p>');
         $apps = $DB->get_records('organizer_slot_appointments', array('slotid' => $slotid));
         if ($organizer->isgrouporganizer && count($apps) != 0) {
             $app = reset($apps);
             $groupname = $DB->get_field('groups', 'name', array('id' => $app->groupid));
             $appgroup[] = $mform->createElement('static', '', '', "<br/><strong>{$groupname}</strong> " . get_string('eval_allow_new_appointments', 'organizer'));
             $appgroup[] = $mform->createElement('advcheckbox', "allownewappointments", '', '', array('group' => 0, 'class' => "allow{$slotid}"), array(0, 1));
             $mform->setType("allownewappointments", PARAM_INT);
             $mform->setDefault("allownewappointments", $app->allownewappointments);
         }
         $mform->insertElementBefore($mform->createElement('group', '', '', $appgroup, '', false), 'buttonar');
         $apps = $DB->get_records('organizer_slot_appointments', array('slotid' => $slotid));
         if (count($apps) == 0) {
             $appgroup = array();
             $appgroup[] = $mform->createElement('static', '', '', get_string('eval_no_participants', 'organizer'));
             $mform->insertElementBefore($mform->createElement('group', '', '', $appgroup, '', false), 'buttonar');
             $mform->setDefault($checkboxname, false);
             $box->freeze();
         }
         foreach ($apps as $app) {
             $user = $DB->get_record('user', array('id' => $app->userid));
             $name = "apps[{$app->id}]";
             $lastapp = organizer_get_last_user_appointment($slot->organizerid, $app->userid);
             if ($lastapp->id != $app->id) {
                 $link = new moodle_url('/mod/organizer/view_action.php', array('id' => $data['id'], 'mode' => $data['mode'], 'action' => 'eval', 'slots[]' => $lastapp->slotid, 'sesskey' => sesskey()));
                 $title = $this->_organizer_get_name_link($user->id) . '<br/><em>' . get_string('cannot_eval', 'organizer') . '</em> ' . html_writer::link($link, get_string('eval_link', 'organizer')) . '<br/>';
                 $appgroup = array();
                 $appgroup[] = $mform->createElement('static', '', '', $title);
             } else {
                 $title = $this->_organizer_get_name_link($user->id) . '<br/>';
                 $appgroup = array();
                 $appgroup[] = $mform->createElement('static', '', '', $title);
                 $appgroup[] = $mform->createElement('static', '', '', get_string('eval_attended', 'organizer'));
                 $appgroup[] = $mform->createElement('advcheckbox', "attended", '', '', null, array(0, 1));
                 $maxgrade = $organizer->grade;
                 if ($maxgrade != 0) {
                     $grademenu = organizer_make_grades_menu_organizer($maxgrade);
                     $appgroup[] = $mform->createElement('static', '', '', get_string('eval_grade', 'organizer'));
                     $appgroup[] = $mform->createElement('select', "grade", '', $grademenu);
                 }
                 $appgroup[] = $mform->createElement('static', '', '', '<span class="nobreak">');
                 $appgroup[] = $mform->createElement('static', '', '', get_string('eval_feedback', 'organizer'));
                 $appgroup[] = $mform->createElement('text', "feedback", '', array('size' => 24));
                 $appgroup[] = $mform->createElement('static', '', '', "</span>");
                 if ($organizer->isgrouporganizer) {
                     $appgroup[] = $mform->createElement('hidden', "allownewappointments", 0, array('class' => "allow{$slotid}"));
                 } else {
                     $appgroup[] = $mform->createElement('static', '', '', '<span class="nobreak">');
                     $appgroup[] = $mform->createElement('static', '', '', get_string('eval_allow_new_appointments', 'organizer'));
                     $appgroup[] = $mform->createElement('advcheckbox', "allownewappointments", '', '', null, array(0, 1));
                     $appgroup[] = $mform->createElement('static', '', '', "</span>");
                 }
                 $mform->disabledIf("{$name}[attended]", $checkboxname);
                 $mform->disabledIf("{$name}[grade]", $checkboxname);
                 $mform->disabledIf("{$name}[feedback]", $checkboxname);
                 $mform->disabledIf("{$name}[allownewappointments]", $checkboxname);
                 $mform->setType("{$name}[attended]", PARAM_INT);
                 $mform->setDefault("{$name}[attended]", $app->attended);
                 if ($maxgrade != 0) {
                     $mform->setType("{$name}[grade]", PARAM_INT);
                     $mform->setDefault("{$name}[grade]", $app->grade);
                 }
                 $mform->setType("{$name}[feedback]", PARAM_TEXT);
                 $mform->setDefault("{$name}[feedback]", $app->feedback);
                 $mform->setType("{$name}[allownewappointments]", PARAM_INT);
                 $mform->setDefault("{$name}[allownewappointments]", $app->allownewappointments);
             }
             $mform->insertElementBefore($mform->createElement('group', $name, '', $appgroup, ' ', true), 'buttonar');
         }
         $mform->insertElementBefore($mform->createElement('html', '<hr />'), 'buttonar');
     }
 }