/** * Function to be run periodically according to the moodle cron * This function searches for things that need to be done, such * as sending out mail, toggling flags etc ... * @uses $CFG * */ function flashcard_cron() { global $CFG, $DB, $SITE; // get all flashcards $flashcards = $DB->get_records('flashcard'); foreach ($flashcards as $flashcard) { if ($flashcard->starttime != 0 && time() < $flashcard->starttime) { continue; } if ($flashcard->endtime != 0 && time() > $flashcard->endtime) { continue; } if ($flashcard->autodowngrade) { $cards = $DB->get_records_select('flashcard_card', 'flashcardid = ? AND deck > 1', array($flashcard->id)); foreach ($cards as $card) { // downgrades to deck 3 (middle low) if ($flashcard->decks > 3) { if ($card->deck == 4 && time() > $card->lastaccessed + ($flashcard->deck4_delay * HOURSECS + $flashcard->deck4_release * HOURSECS)) { $DB->set_field('flashcard_card', 'deck', 3, array('id' => $card->id)); } } // downgrades to deck 2 (middle) if ($flashcard->decks > 2) { if ($card->deck == 3 && time() > $card->lastaccessed + ($flashcard->deck3_delay * HOURSECS + $flashcard->deck3_release * HOURSECS)) { $DB->set_field('flashcard_card', 'deck', 2, array('id' => $card->id)); } } // downgrades to deck 1 (difficult) if ($card->deck == 2 && time() > $card->lastaccessed + ($flashcard->deck2_delay * HOURSECS + $flashcard->deck2_release * HOURSECS)) { $DB->set_field('flashcard_card', 'deck', 1, array('id' => $card->id)); } } } if ($flashcard->remindusers) { if ($users = flashcard_get_participants($flashcard->id)) { // restrict to real participants $participants = count($users); mtrace("Participants : {$participants} users "); $voiduser = new StdClass(); $voiduser->email = $CFG->noreplyaddress; $voiduser->firstname = ''; $voiduser->lastname = ''; $voiduser->id = 1; $coursename = $DB->get_field('course', 'fullname', array('id' => $flashcard->course)); $notified = 0; foreach ($users as $u) { $decks = flashcard_get_deck_status($flashcard, $u->id); foreach ($decks->decks as $deck) { $sendnotif = 0; if (@$deck->reactivate) { if ($state = $DB->get_record('flashcard_userdeck_state', array('userid' => $u->id, 'flashcardid' => $flashcard->id, 'deck' => $deck->deckid))) { if ($state->state) { continue; } } else { $state = new StdClass(); $state->flashcardid = $flashcard->id; $state->userid = $u->id; $state->deck = $deck->deckid; $DB->insert_record('flashcard_userdeck_state', $state); } $vars = array('FULLNAME' => fullname($u), 'COURSE' => format_string($coursename), 'URL' => $CFG->wwwroot . '/mod/flashcard/view.php?f=' . $flashcard->id); $notification = flashcard_compile_mail_template('notifyreview', $vars, $u->lang); $notification_html = flashcard_compile_mail_template('notifyreview_html', $vars, $u->lang); if ($CFG->debugsmtp) { echo "Sending Review Notification Mail Notification to " . fullname($u) . '<br/>' . $notification_html; } email_to_user($u, $voiduser, get_string('flashcardneedsreview', 'flashcard', $SITE->shortname . ':' . format_string($flashcard->name)), $notification, $notification_html); // Mark it has been sent $DB->set_field('flashcard_userdeck_state', 'state', 1, array('userid' => $u->id, 'flashcardid' => $flashcard->id, 'deck' => $deck->deckid)); $notified++; } } } mtrace("Notified : {$notified} users "); } } } return true; }
require_once $CFG->dirroot . '/enrol/locallib.php'; $course_context = get_context_instance(CONTEXT_COURSE, $COURSE->id); $course = $DB->get_record('course', array('id' => $COURSE->id), '*', MUST_EXIST); $manager = new course_enrolment_manager($PAGE, $course); $courseusers = $manager->get_users('lastname', 'ASC', 0, 250); $struser = get_string('username'); $strdeckstates = get_string('deckstates', 'flashcard'); $strcounts = get_string('counters', 'flashcard'); $table = new html_table(); $table->head = array("<b>{$struser}</b>", "<b>{$strdeckstates}</b>", "<b>{$strcounts}</b>"); $table->size = array('30%', '50%', '20%'); $table->width = '90%'; echo $out; if (!empty($courseusers)) { foreach ($courseusers as $auser) { $status = flashcard_get_deck_status($flashcard, $auser->id); $userbox = $OUTPUT->user_picture($auser); $userbox .= fullname($auser); if ($status) { $flashcard->cm =& $cm; $deckbox = flashcard_print_deck_status($flashcard, $auser->id, $status, true); $countbox = flashcard_print_deckcounts($flashcard, true, $auser->id); } else { $deckbox = get_string('notinitialized', 'flashcard'); $countbox = ''; } $table->data[] = array($userbox, $deckbox, $countbox); } echo html_writer::table($table); } else { echo '<center>';
* @contributors Valery Fremaux * @version Moodle 2.0 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License */ // Security. if (!defined('MOODLE_INTERNAL')) { die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page. } // Print deferred header. echo $out; // Get available decks for user and calculate deck state. if (!($decks = flashcard_get_deck_status($flashcard))) { // If deck status have bever been initialized initialized them. if (flashcard_initialize($flashcard, $USER->id)) { $decks = flashcard_get_deck_status($flashcard); } else { if (has_capability('mod/flashcard:manage', $context)) { $url = new moodle_url('/mod/flashcard/view.php', array('id' => $cm->id, 'view' => 'edit')); } else { $url = new moodle_url('/course/view.php', array('id' => $course->id)); } echo $OUTPUT->notification(get_string('nocards', 'flashcard'), $url); } } ?> <center> <table width="90%" cellspacing="10"> <tr> <th>