| Línea 299... | Línea 299... | 
          
            | 299 |     // enrolment.
 | 299 |     // enrolment.
 | 
          
            | 300 |     $onecourse = $courseid ? "AND e.courseid = :courseid" : "";
 | 300 |     $onecourse = $courseid ? "AND e.courseid = :courseid" : "";
 | 
          
            | 301 |     list($enabled, $params) = $DB->get_in_or_equal(explode(',', $CFG->enrol_plugins_enabled), SQL_PARAMS_NAMED, 'e');
 | 301 |     list($enabled, $params) = $DB->get_in_or_equal(explode(',', $CFG->enrol_plugins_enabled), SQL_PARAMS_NAMED, 'e');
 | 
          
            | 302 |     $params['courseid'] = $courseid;
 | 302 |     $params['courseid'] = $courseid;
 | 
          
            | 303 |     $sql = "SELECT pue.userid, e.id AS enrolid, MIN(pue.status + pe.status) AS status,
 | 303 |     $sql = "SELECT pue.userid, e.id AS enrolid, MIN(pue.status + pe.status) AS status,
 | 
          
            | 304 |                       MIN(CASE WHEN (pue.status + pe.status = 0) THEN pue.timestart ELSE 9999999999 END) AS timestart,
 | 304 |                       MIN(CASE WHEN (pue.status + pe.status = 0) THEN pue.timestart ELSE " . SQL_INT_MAX . " END) AS timestart,
 | 
          
            | 305 |                       MAX(CASE WHEN (pue.status + pe.status = 0) THEN
 | 305 |                       MAX(CASE WHEN (pue.status + pe.status = 0) THEN
 | 
          
            | 306 |                                 (CASE WHEN pue.timeend = 0 THEN 9999999999 ELSE pue.timeend END)
 | 306 |                                 (CASE WHEN pue.timeend = 0 THEN " . SQL_INT_MAX . " ELSE pue.timeend END)
 | 
          
            | 307 |                                 ELSE 0 END) AS timeend
 | 307 |                                 ELSE 0 END) AS timeend
 | 
          
            | 308 |               FROM {user_enrolments} pue
 | 308 |               FROM {user_enrolments} pue
 | 
          
            | 309 |               JOIN {enrol} pe ON (pe.id = pue.enrolid AND pe.enrol <> 'meta' AND pe.enrol $enabled)
 | 309 |               JOIN {enrol} pe ON (pe.id = pue.enrolid AND pe.enrol <> 'meta' AND pe.enrol $enabled)
 | 
          
            | 310 |               JOIN {enrol} e ON (e.customint1 = pe.courseid AND e.enrol = 'meta' AND e.status = :enrolstatus $onecourse)
 | 310 |               JOIN {enrol} e ON (e.customint1 = pe.courseid AND e.enrol = 'meta' AND e.status = :enrolstatus $onecourse)
 | 
          
            | 311 |               JOIN {user} u ON (u.id = pue.userid AND u.deleted = 0)
 | 311 |               JOIN {user} u ON (u.id = pue.userid AND u.deleted = 0)
 | 
          
            | Línea 339... | Línea 339... | 
          
            | 339 |  
 | 339 |  
 | 
          
            | 340 |         // So now we have aggregated values that we will use for the meta enrolment status, timeend and timestart.
 | 340 |         // So now we have aggregated values that we will use for the meta enrolment status, timeend and timestart.
 | 
          
            | 341 |         // Again, we use the fact that active=0 and disabled/suspended=1. Only when MIN(pue.status + pe.status)=0 the enrolment is active:
 | 341 |         // Again, we use the fact that active=0 and disabled/suspended=1. Only when MIN(pue.status + pe.status)=0 the enrolment is active:
 | 
          
            | 342 |         $ue->status = ($ue->status == ENROL_USER_ACTIVE + ENROL_INSTANCE_ENABLED) ? ENROL_USER_ACTIVE : ENROL_USER_SUSPENDED;
 | 342 |         $ue->status = ($ue->status == ENROL_USER_ACTIVE + ENROL_INSTANCE_ENABLED) ? ENROL_USER_ACTIVE : ENROL_USER_SUSPENDED;
 | 
          
            | 343 |         // Timeend 9999999999 was used instead of 0 in the "MAX()" function:
 | 343 |         // Timeend 9999999999 was used instead of 0 in the "MAX()" function:
 | 
          
            | 344 |         $ue->timeend = ($ue->timeend == 9999999999) ? 0 : (int)$ue->timeend;
 | 344 |         $ue->timeend = ($ue->timeend == SQL_INT_MAX) ? 0 : (int)$ue->timeend;
 | 
          
            | 345 |         // Timestart 9999999999 is only possible when there are no active enrolments:
 | 345 |         // Timestart 9999999999 is only possible when there are no active enrolments:
 | 
          
            | Línea 346... | Línea 346... | 
          
            | 346 |         $ue->timestart = ($ue->timestart == 9999999999) ? 0 : (int)$ue->timestart;
 | 346 |         $ue->timestart = ($ue->timestart == SQL_INT_MAX) ? 0 : (int)$ue->timestart;
 | 
          
            | 347 |  
 | 347 |  
 | 
          
            | 348 |         $meta->enrol_user($instance, $ue->userid, null, $ue->timestart, $ue->timeend, $ue->status);
 | 348 |         $meta->enrol_user($instance, $ue->userid, null, $ue->timestart, $ue->timeend, $ue->status);
 | 
          
            | 349 |         if ($instance->customint2 && $group = $DB->get_record('groups', ['id' => $instance->customint2])) {
 | 349 |         if ($instance->customint2 && $group = $DB->get_record('groups', ['id' => $instance->customint2])) {
 | 
          
            | Línea 416... | Línea 416... | 
          
            | 416 |     //
 | 416 |     //
 | 
          
            | 417 |     // The last two case statements in the HAVING clause are designed to ignore any inactive child records when calculating
 | 417 |     // The last two case statements in the HAVING clause are designed to ignore any inactive child records when calculating
 | 
          
            | 418 |     // the start and end time.
 | 418 |     // the start and end time.
 | 
          
            | 419 |     $sql = "SELECT ue.userid, ue.enrolid,
 | 419 |     $sql = "SELECT ue.userid, ue.enrolid,
 | 
          
            | 420 |                    MIN(xpue.status + xpe.status) AS pstatus,
 | 420 |                    MIN(xpue.status + xpe.status) AS pstatus,
 | 
          
            | 421 |                    MIN(CASE WHEN (xpue.status + xpe.status = 0) THEN xpue.timestart ELSE 9999999999 END) AS ptimestart,
 | 421 |                    MIN(CASE WHEN (xpue.status + xpe.status = 0) THEN xpue.timestart ELSE " . SQL_INT_MAX . " END) AS ptimestart,
 | 
          
            | 422 |                    MAX(CASE WHEN (xpue.status + xpe.status = 0) THEN
 | 422 |                    MAX(CASE WHEN (xpue.status + xpe.status = 0) THEN
 | 
          
            | 423 |                                  (CASE WHEN xpue.timeend = 0 THEN 9999999999 ELSE xpue.timeend END)
 | 423 |                                  (CASE WHEN xpue.timeend = 0 THEN " . SQL_INT_MAX . " ELSE xpue.timeend END)
 | 
          
            | 424 |                             ELSE 0 END) AS ptimeend
 | 424 |                             ELSE 0 END) AS ptimeend
 | 
          
            | 425 |               FROM {user_enrolments} ue
 | 425 |               FROM {user_enrolments} ue
 | 
          
            | 426 |               JOIN {enrol} e ON (e.id = ue.enrolid AND e.enrol = 'meta' $onecourse)
 | 426 |               JOIN {enrol} e ON (e.id = ue.enrolid AND e.enrol = 'meta' $onecourse)
 | 
          
            | 427 |               JOIN {user_enrolments} xpue ON (xpue.userid = ue.userid)
 | 427 |               JOIN {user_enrolments} xpue ON (xpue.userid = ue.userid)
 | 
          
            | 428 |               JOIN {enrol} xpe ON (xpe.id = xpue.enrolid AND xpe.enrol <> 'meta'
 | 428 |               JOIN {enrol} xpe ON (xpe.id = xpue.enrolid AND xpe.enrol <> 'meta'
 | 
          
            | 429 |                    AND xpe.enrol $enabled AND xpe.courseid = e.customint1)
 | 429 |                    AND xpe.enrol $enabled AND xpe.courseid = e.customint1)
 | 
          
            | 430 |           GROUP BY ue.userid, ue.enrolid
 | 430 |           GROUP BY ue.userid, ue.enrolid
 | 
          
            | 431 |             HAVING (MIN(xpue.status + xpe.status) = 0 AND MIN(ue.status) > 0)
 | 431 |             HAVING (MIN(xpue.status + xpe.status) = 0 AND MIN(ue.status) > 0)
 | 
          
            | 432 |                    OR (MIN(xpue.status + xpe.status) > 0 AND MIN(ue.status) = 0)
 | 432 |                    OR (MIN(xpue.status + xpe.status) > 0 AND MIN(ue.status) = 0)
 | 
          
            | 433 |                    OR ((CASE WHEN
 | 433 |                    OR ((CASE WHEN
 | 
          
            | 434 |                                   MIN(CASE WHEN (xpue.status + xpe.status = 0) THEN xpue.timestart ELSE 9999999999 END) = 9999999999
 | 434 |                             MIN(CASE WHEN (xpue.status + xpe.status = 0) THEN xpue.timestart ELSE " . SQL_INT_MAX . " END) = " .
 | 
          
            | - |   | 435 |                                 SQL_INT_MAX . "
 | 
          
            | 435 |                              THEN 0
 | 436 |                         THEN 0
 | 
          
            | 436 |                              ELSE
 | 437 |                         ELSE
 | 
          
            | 437 |                                   MIN(CASE WHEN (xpue.status + xpe.status = 0) THEN xpue.timestart ELSE 9999999999 END)
 | 438 |                             MIN(CASE WHEN (xpue.status + xpe.status = 0) THEN xpue.timestart ELSE " . SQL_INT_MAX . " END)
 | 
          
            | 438 |                               END) <> MIN(ue.timestart))
 | 439 |                         END) <> MIN(ue.timestart))
 | 
          
            | 439 |                    OR ((CASE
 | 440 |                    OR ((CASE
 | 
          
            | 440 |                          WHEN MAX(CASE WHEN (xpue.status + xpe.status = 0)
 | 441 |                          WHEN MAX(CASE WHEN (xpue.status + xpe.status = 0)
 | 
          
            | 441 |                                        THEN (CASE WHEN xpue.timeend = 0 THEN 9999999999 ELSE xpue.timeend END)
 | 442 |                                        THEN (CASE WHEN xpue.timeend = 0 THEN " . SQL_INT_MAX . " ELSE xpue.timeend END)
 | 
          
            | 442 |                                        ELSE 0 END) = 9999999999
 | 443 |                                        ELSE 0 END) = " . SQL_INT_MAX . "
 | 
          
            | 443 |                          THEN 0 ELSE MAX(CASE WHEN (xpue.status + xpe.status = 0)
 | 444 |                          THEN 0 ELSE MAX(CASE WHEN (xpue.status + xpe.status = 0)
 | 
          
            | 444 |                                               THEN (CASE WHEN xpue.timeend = 0 THEN 9999999999 ELSE xpue.timeend END)
 | 445 |                                               THEN (CASE WHEN xpue.timeend = 0 THEN " . SQL_INT_MAX . " ELSE xpue.timeend END)
 | 
          
            | 445 |                                               ELSE 0 END)
 | 446 |                                               ELSE 0 END)
 | 
          
            | 446 |                           END) <> MAX(ue.timeend))";
 | 447 |                           END) <> MAX(ue.timeend))";
 | 
          
            | 447 |     $rs = $DB->get_recordset_sql($sql, $params);
 | 448 |     $rs = $DB->get_recordset_sql($sql, $params);
 | 
          
            | 448 |     foreach($rs as $ue) {
 | 449 |     foreach($rs as $ue) {
 | 
          
            | 449 |         if (!isset($instances[$ue->enrolid])) {
 | 450 |         if (!isset($instances[$ue->enrolid])) {
 | 
          
            | 450 |             $instances[$ue->enrolid] = $DB->get_record('enrol', array('id'=>$ue->enrolid));
 | 451 |             $instances[$ue->enrolid] = $DB->get_record('enrol', array('id'=>$ue->enrolid));
 | 
          
            | 451 |         }
 | 452 |         }
 | 
          
            | 452 |         $instance = $instances[$ue->enrolid];
 | 453 |         $instance = $instances[$ue->enrolid];
 | 
          
            | 453 |         $ue->pstatus = ($ue->pstatus == ENROL_USER_ACTIVE + ENROL_INSTANCE_ENABLED) ? ENROL_USER_ACTIVE : ENROL_USER_SUSPENDED;
 | 454 |         $ue->pstatus = ($ue->pstatus == ENROL_USER_ACTIVE + ENROL_INSTANCE_ENABLED) ? ENROL_USER_ACTIVE : ENROL_USER_SUSPENDED;
 | 
          
            | 454 |         $ue->ptimeend = ($ue->ptimeend == 9999999999) ? 0 : (int)$ue->ptimeend;
 | 455 |         $ue->ptimeend = ($ue->ptimeend == SQL_INT_MAX) ? 0 : (int)$ue->ptimeend;
 | 
          
            | 455 |         $ue->ptimestart = ($ue->ptimestart == 9999999999) ? 0 : (int)$ue->ptimestart;
 | 456 |         $ue->ptimestart = ($ue->ptimestart == SQL_INT_MAX) ? 0 : (int)$ue->ptimestart;
 | 
          
            | Línea 456... | Línea 457... | 
          
            | 456 |  
 | 457 |  
 | 
          
            | 457 |         if ($ue->pstatus == ENROL_USER_ACTIVE and (!$ue->ptimeend || $ue->ptimeend > time())
 | 458 |         if ($ue->pstatus == ENROL_USER_ACTIVE and (!$ue->ptimeend || $ue->ptimeend > time())
 | 
          
            | 458 |                 and !$syncall and $unenrolaction != ENROL_EXT_REMOVED_UNENROL) {
 | 459 |                 and !$syncall and $unenrolaction != ENROL_EXT_REMOVED_UNENROL) {
 | 
          
            | 459 |             // this may be slow if very many users are ignored in sync
 | 460 |             // this may be slow if very many users are ignored in sync
 |