diff --git a/edit.php b/edit.php
index 78d8391..6a46222 100644
--- a/edit.php
+++ b/edit.php
@@ -102,6 +102,7 @@ if ($mform->is_cancelled()) {
$instance->customint6 = $data->customint6;
$instance->customint7 = $data->customint7;
$instance->customint8 = $data->customint8;
+ $instance->customdec1 = $data->customdec1;
$instance->customtext1 = $data->customtext1;
$instance->customtext2 = serialize($data->customtext2);
$instance->roleid = $data->roleid;
@@ -131,6 +132,7 @@ if ($mform->is_cancelled()) {
'customint6' => $data->customint6,
'customint7' => $data->customint7,
'customint8' => $data->customint8,
+ 'customdec1' => $data->customdec1;
'customtext1' => $data->customtext1,
'customtext2' => serialize($data->customtext2),
'roleid' => $data->roleid,
diff --git a/edit_form.php b/edit_form.php
index 85f3da8..f7f619d 100644
--- a/edit_form.php
+++ b/edit_form.php
@@ -112,6 +112,10 @@ class enrol_ilbeadtutorado_edit_form extends moodleform {
$mform->addHelpButton('customint8', 'abandonpunishment', 'enrol_ilbeadtutorado');
$mform->setType('customint8', PARAM_INT);
+ $mform->addElement('text', 'customdec1', get_string('reprovalpunishment', 'enrol_ilbeadtutorado'));
+ $mform->addHelpButton('customdec1', 'reprovalpunishment', 'enrol_ilbeadtutorado');
+ $mform->setType('customdec1', PARAM_INT);
+
$cohorts = array(0 => get_string('no'));
list($sqlparents, $params) = $DB->get_in_or_equal($context->get_parent_context_ids(), SQL_PARAMS_NAMED);
$params['current'] = $instance->customint5;
diff --git a/lang/en/enrol_ilbeadtutorado.php b/lang/en/enrol_ilbeadtutorado.php
index 18d4459..c0cb93f 100644
--- a/lang/en/enrol_ilbeadtutorado.php
+++ b/lang/en/enrol_ilbeadtutorado.php
@@ -113,9 +113,12 @@ $string['maxongoing_help'] = 'Maximum simultaneos EAD courses that the user can
$string['ongoingcourses'] = 'List of ongoing courses';
$string['abandonedcourses'] = 'Abandoned courses';
$string['enrolledat'] = 'enrolled at';
-$string['abandonalert'] = 'You have abandoned courses and cannot enroll in new courses.';
-$string['abandonpunishment'] = 'Days of punishment for abandon';
-$string['abandonpunishment_help'] = 'Number of days that the user cannot enroll in another ILB EAD course after abandon any ILB EAD course.';
+$string['abandonalert'] = 'You have abandoned the {$a} course and cannot enroll in new courses.';
+$string['abandonpunishment'] = 'Offers of punishment for abandon';
+$string['abandonpunishment_help'] = 'Number of offers that the user cannot enroll in another ILB EAD course after abandon any ILB EAD course.';
+$string['reprovalalert'] = 'You have reproved on {$a} course and cannot enroll in new courses.';
+$string['reprovalpunishment'] = 'Offers of punishment for reproval';
+$string['reprovalpunishment_help'] = 'Number of offers that the user cannot enroll in another ILB EAD course after abandon any ILB EAD course.';
$string['coursename'] = 'Course name';
$string['startdate'] = 'Start date';
$string['timeend'] = 'Expected time end';
diff --git a/lang/pt_br/enrol_ilbeadtutorado.php b/lang/pt_br/enrol_ilbeadtutorado.php
index ef3faf4..a479dc7 100644
--- a/lang/pt_br/enrol_ilbeadtutorado.php
+++ b/lang/pt_br/enrol_ilbeadtutorado.php
@@ -113,9 +113,12 @@ $string['maxongoing_help'] = 'Máximo de cursos simultâneos de EAD que o usuár
$string['ongoingcourses'] = 'Lista de cursos que você não concluiu';
$string['abandonedcourses'] = 'Cursos abandonados';
$string['enrolledat'] = 'inscrito em';
-$string['abandonalert'] = 'Você abandonou curso(s) e não pode se inscrever em novos cursos.';
-$string['abandonpunishment'] = 'Dias de suspensão por abandono/reprovação';
-$string['abandonpunishment_help'] = 'Número de dias que o aluno não poderá se inscrever em outro curso EAD do ILB depois de ter abandonado um curso.';
+$string['abandonalert'] = 'Você abandonou o curso {$a} e não pode se inscrever nesta oferta. Aguarde ofertas futuras.';
+$string['abandonpunishment'] = 'Ofertas de suspensão por abandono';
+$string['abandonpunishment_help'] = 'Número de ofertas que o aluno não poderá se inscrever em outro curso EAD do ILB depois de ter abandonado um curso.';
+$string['reprovalalert'] = 'Você foi reprovado no curso {$a} e não pode repetí-lo nesta oferta. Aguarde ofertas futuras.';
+$string['reprovalpunishment'] = 'Ofertas de suspensão por reprovação';
+$string['reprovalpunishment_help'] = 'Número de ofertas que o aluno não poderá se inscrever em outro curso EAD do ILB depois de ter sido reprovado em um curso.';
$string['coursename'] = 'Nome do curso';
$string['startdate'] = 'Data de início';
$string['timeend'] = 'Data prevista de término';
diff --git a/lib.php b/lib.php
index f871611..9f57366 100644
--- a/lib.php
+++ b/lib.php
@@ -247,18 +247,29 @@ class enrol_ilbeadtutorado_plugin extends enrol_plugin {
$course = $DB->get_record('course', array('id'=>$instance->courseid), '*', MUST_EXIST);
$course_prefix = explode('.', $course->idnumber);
$course_prefix = $course_prefix[0];
-
- foreach ($ongoing as $course) {
- $ongoing_prefix = explode('.', $course->idnumber);
- $ongoing_prefix = $ongoing_prefix[0];
- if ($course_prefix == $ongoing_prefix) {
- $error = $OUTPUT->error_text(get_string('samecoursealert', 'enrol_ilbeadtutorado'));
- $link = ''.$course->fullname.'';
- $error .= '
'.get_string('samecoursemessage', 'enrol_ilbeadtutorado', $link).'
'; - $error = $OUTPUT->box($error).$OUTPUT->continue_button("$CFG->wwwroot/index.php"); - return $error; + $same_courses = $this->get_same_courses($instance, $course_prefix); + + // Search for abandon/reproval facts + $count = 0; + + foreach ($same_courses as $course) { + $count++; + $link = ''.$course->fullname.''; + if ($course->user_enroled) { + if (($count <= $instance->customint8) and ($course->finalgrade === NULL)) { + // Punish for abandon + $error = $OUTPUT->error_text(get_string('abandonalert', 'enrol_ilbeadtutorado', $link)); + $error = $OUTPUT->box($error).$OUTPUT->continue_button("$CFG->wwwroot/index.php"); + return $error; + } + if (($count <= $instance->customdec1) and ($course->finalgrade < $course->gradepass)) { + // Punish for reproval + $error = $OUTPUT->error_text(get_string('reprovalalert', 'enrol_ilbeadtutorado', $link)); + $error = $OUTPUT->box($error).$OUTPUT->continue_button("$CFG->wwwroot/index.php"); + return $error; + } } - } + } if ($instance->customint5) { require_once("$CFG->dirroot/cohort/lib.php"); @@ -666,4 +677,41 @@ class enrol_ilbeadtutorado_plugin extends enrol_plugin { return false; // Default max not reached } + + /** + * Get all same courses tried by the user ordered by startdate descending + * + * @param stdClass $instance + * @param str $course_prefix + */ + + public function get_same_courses($instance, $course_prefix) { + global $DB; + global $USER; + + if ($instance->customint8 >= $instance->customdec1) { + $limitnum = $instance->customint8; + } else { + $limitnum = int($instance->customdec1); + } + + if ($limitnum <= 0) { + return array(); // No validations + } + + $idnumberlike = $DB->sql_like('c.idnumber', "'$course_prefix%'"); + + $sql = "select c.*, cc.gradepass, gg.finalgrade, ue.userid as user_enroled + from {course} c + inner join {enrol} e on e.courseid = c.id and e.enrol = 'ilbeadtutorado' + inner join {grade_items} gi on gi.courseid = c.id and gi.itemtype = 'course' + left outer join {user_enrolments} ue on ue.enrolid = e.id and ue.userid = ? + left outer join {course_completion_criteria} cc on cc.course = c.id and cc.module is null and cc.gradepass > 0 + left outer join {grade_grades} gg on gg.itemid = gi.id and gg.userid = ue.userid + where $idnumberlike + and e.id <> ? + order by startdate desc"; + + return $DB->get_records_sql($sql, array($USER->id, $instance->id), 0, $limitnum); + } }