/** * Update completion status for the current user in an activity, only for activities with manual tracking. * @param int $cmid Course module id * @param bool $completed Activity completed or not * @return array Result and possible warnings * @since Moodle 2.9 * @throws moodle_exception */ public static function update_activity_completion_status_manually($cmid, $completed) { // Validate and normalize parameters. $params = self::validate_parameters(self::update_activity_completion_status_manually_parameters(), array('cmid' => $cmid, 'completed' => $completed)); $cmid = $params['cmid']; $completed = $params['completed']; $warnings = array(); $context = context_module::instance($cmid); self::validate_context($context); list($course, $cm) = get_course_and_cm_from_cmid($cmid); // Set up completion object and check it is enabled. $completion = new completion_info($course); if (!$completion->is_enabled()) { throw new moodle_exception('completionnotenabled', 'completion'); } // Check completion state is manual. if ($cm->completion != COMPLETION_TRACKING_MANUAL) { throw new moodle_exception('cannotmanualctrack', 'error'); } $targetstate = $completed ? COMPLETION_COMPLETE : COMPLETION_INCOMPLETE; $completion->update_state($cm, $targetstate); $result = array(); $result['status'] = true; $result['warnings'] = $warnings; return $result; }
/** * Updates course module name * * @param int $itemid course module id * @param string $newvalue new name * @return static */ public static function update($itemid, $newvalue) { list($course, $cm) = get_course_and_cm_from_cmid($itemid); $context = context_module::instance($cm->id); // Check access. require_login($course, false, $cm, true, true); require_capability('moodle/course:manageactivities', $context); // Update value. set_coursemodule_name($cm->id, $newvalue); // Return instance. $cm = get_fast_modinfo($course)->get_cm($cm->id); return new static($cm, true); }
// Part ID. $user = optional_param('user', 0, PARAM_INT); // User ID. $do = optional_param('do', "submissions", PARAM_ALPHAEXT); $action = optional_param('action', "", PARAM_ALPHA); $viewcontext = optional_param('view_context', "window", PARAM_ALPHAEXT); $notice = null; if (isset($_SESSION["notice"])) { $notice = $_SESSION["notice"]; $notice["type"] = empty($_SESSION["notice"]["type"]) ? "general" : $_SESSION["notice"]["type"]; unset($_SESSION["notice"]); } if ($id) { //Pre 2.8 does not have the function get_course_and_cm_from_cmid. if ($CFG->branch >= 28) { list($course, $cm) = get_course_and_cm_from_cmid($id, 'turnitintooltwo'); } else { $cm = get_coursemodule_from_id('turnitintooltwo', $id, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); } if (!$cm) { turnitintooltwo_print_error('coursemodidincorrect', 'turnitintooltwo'); } if (!($course = $DB->get_record("course", array("id" => $cm->course)))) { turnitintooltwo_print_error('coursemisconfigured', 'turnitintooltwo'); } if (!($turnitintooltwo = $DB->get_record("turnitintooltwo", array("id" => $cm->instance)))) { turnitintooltwo_print_error('coursemodincorrect', 'turnitintooltwo'); } } else { if (!($turnitintooltwo = $DB->get_record("turnitintooltwo", array("id" => $a)))) {
/** * Tests function for getting $course and $cm at once quickly from modinfo * based on instance id or record. */ public function test_get_course_and_cm_from_instance() { global $CFG, $DB; $this->resetAfterTest(); // Create a course and an activity. $generator = $this->getDataGenerator(); $course = $generator->create_course(array('shortname' => 'Halls')); $page = $generator->create_module('page', array('course' => $course->id, 'name' => 'Annie')); // Successful usage. list($course, $cm) = get_course_and_cm_from_instance($page->id, 'page'); $this->assertEquals('Halls', $course->shortname); $this->assertInstanceOf('cm_info', $cm); $this->assertEquals('Annie', $cm->name); // With id in object. $fakeinstance = (object) array('id' => $page->id); list($course, $cm) = get_course_and_cm_from_instance($fakeinstance, 'page'); $this->assertEquals('Halls', $course->shortname); $this->assertEquals('Annie', $cm->name); // With both id and course in object. $fakeinstance->course = $course->id; list($course, $cm) = get_course_and_cm_from_instance($fakeinstance, 'page'); $this->assertEquals('Halls', $course->shortname); $this->assertEquals('Annie', $cm->name); // With supplied course id. list($course, $cm) = get_course_and_cm_from_instance($page->id, 'page', $course->id); $this->assertEquals('Annie', $cm->name); // With supplied course object (modified just so we can check it is // indeed reusing the supplied object). $course->silly = true; list($course, $cm) = get_course_and_cm_from_instance($page->id, 'page', $course); $this->assertEquals('Annie', $cm->name); $this->assertTrue($course->silly); // Doesn't exist (or is wrong type). try { get_course_and_cm_from_instance($page->id, 'forum'); $this->fail(); } catch (moodle_exception $e) { $this->assertInstanceOf('dml_exception', $e); } // Invalid module name. try { get_course_and_cm_from_cmid($page->cmid, '1337 h4x0ring'); $this->fail(); } catch (coding_exception $e) { $this->assertContains('Invalid modulename parameter', $e->getMessage()); } // Create a second hidden activity. $hiddenpage = $generator->create_module('page', array('course' => $course->id, 'name' => 'Annie', 'visible' => 0)); // Create 2 user accounts, one is a manager who can see everything. $user = $generator->create_user(); $generator->enrol_user($user->id, $course->id); $manager = $generator->create_user(); $generator->enrol_user($manager->id, $course->id, $DB->get_field('role', 'id', array('shortname' => 'manager'), MUST_EXIST)); // User can see the normal page but not the hidden one. list($course, $cm) = get_course_and_cm_from_cmid($page->cmid, 'page', 0, $user->id); $this->assertTrue($cm->uservisible); list($course, $cm) = get_course_and_cm_from_cmid($hiddenpage->cmid, 'page', 0, $user->id); $this->assertFalse($cm->uservisible); // Manager can see the hidden one too. list($course, $cm) = get_course_and_cm_from_cmid($hiddenpage->cmid, 'page', 0, $manager->id); $this->assertTrue($cm->uservisible); }
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * deletes a template * * @author Andreas Grabs * @license http://www.gnu.org/copyleft/gpl.html GNU Public License * @package mod_feedback */ require_once "../../config.php"; require_once "lib.php"; $current_tab = 'templates'; $id = required_param('id', PARAM_INT); $deletetempl = optional_param('deletetempl', false, PARAM_INT); $baseurl = new moodle_url('/mod/feedback/delete_template.php', array('id' => $id)); $PAGE->set_url($baseurl); list($course, $cm) = get_course_and_cm_from_cmid($id, 'feedback'); $context = context_module::instance($cm->id); require_login($course, true, $cm); require_capability('mod/feedback:deletetemplate', $context); $feedback = $PAGE->activityrecord; $systemcontext = context_system::instance(); // Process template deletion. if ($deletetempl) { require_sesskey(); $template = $DB->get_record('feedback_template', array('id' => $deletetempl), '*', MUST_EXIST); if ($template->ispublic) { require_capability('mod/feedback:createpublictemplate', $systemcontext); require_capability('mod/feedback:deletetemplate', $systemcontext); } feedback_delete_template($template); redirect($baseurl, get_string('template_deleted', 'feedback'));
$cmid = optional_param('cmid', 0, PARAM_INT); $overrideid = optional_param('id', 0, PARAM_INT); $action = optional_param('action', null, PARAM_ALPHA); $reset = optional_param('reset', false, PARAM_BOOL); $override = null; if ($overrideid) { if (!($override = $DB->get_record('quiz_overrides', array('id' => $overrideid)))) { print_error('invalidoverrideid', 'quiz'); } if (!($quiz = $DB->get_record('quiz', array('id' => $override->quiz)))) { print_error('invalidcoursemodule'); } list($course, $cm) = get_course_and_cm_from_instance($quiz, 'quiz'); } else { if ($cmid) { list($course, $cm) = get_course_and_cm_from_cmid($cmid, 'quiz'); $quiz = $DB->get_record('quiz', array('id' => $cm->instance), '*', MUST_EXIST); } else { print_error('invalidcoursemodule'); } } $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $url = new moodle_url('/mod/quiz/overrideedit.php'); if ($action) { $url->param('action', $action); } if ($overrideid) { $url->param('id', $overrideid); } else { $url->param('cmid', $cmid); }
* @copyright 2014 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ /// (Replace stopwatch with the name of your module and remove this line) require_once dirname(dirname(__DIR__)) . '/config.php'; require_once $CFG->dirroot . '/mod/stopwatch/lib.php'; require_once $CFG->dirroot . '/mod/stopwatch/locallib.php'; require_once $CFG->libdir . '/completionlib.php'; $cmid = optional_param('id', 0, PARAM_INT); // course_module ID, or $stopwatchid = optional_param('s', 0, PARAM_INT); // stopwatch instance ID - it should be named as the first character of the module $cmd = optional_param('cmd', null, PARAM_ALPHA); $durationstr = optional_param('durationstr', null, PARAM_NOTAGS); if ($cmid) { list($course, $cm) = get_course_and_cm_from_cmid($cmid, 'stopwatch'); } elseif ($stopwatchid) { list($course, $cm) = get_course_and_cm_from_instance($stopwatchid, 'stopwatch'); } else { print_error('You must specify a course_module ID or an instance ID'); } require_login($course, true, $cm); $stopwatch = $PAGE->activityrecord; $cmcontext = context_module::instance($cm->id); $cansubmit = has_capability('mod/stopwatch:submit', $cmcontext, null, false); $cangrade = has_capability('mod/stopwatch:grade', $cmcontext); if ($cmd === 'updateduration' && $cansubmit && $durationstr && confirm_sesskey()) { mod_stopwatch_update_timer($cm, $stopwatch, mod_stopwatch_string_to_duration($durationstr)); redirect($cm->url); } if ($cmd === 'updategrades' && $cangrade && confirm_sesskey()) {
require_once $CFG->dirroot . '/mod/lesson/locallib.php'; require_once $CFG->dirroot . '/mod/lesson/override_form.php'; $cmid = optional_param('cmid', 0, PARAM_INT); $overrideid = optional_param('id', 0, PARAM_INT); $action = optional_param('action', null, PARAM_ALPHA); $reset = optional_param('reset', false, PARAM_BOOL); $override = null; if ($overrideid) { if (!($override = $DB->get_record('lesson_overrides', array('id' => $overrideid)))) { print_error('invalidoverrideid', 'lesson'); } $lesson = new lesson($DB->get_record('lesson', array('id' => $override->lessonid), '*', MUST_EXIST)); list($course, $cm) = get_course_and_cm_from_instance($lesson, 'lesson'); } else { if ($cmid) { list($course, $cm) = get_course_and_cm_from_cmid($cmid, 'lesson'); $lesson = new lesson($DB->get_record('lesson', array('id' => $cm->instance), '*', MUST_EXIST)); } else { print_error('invalidcoursemodule'); } } $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $url = new moodle_url('/mod/lesson/overrideedit.php'); if ($action) { $url->param('action', $action); } if ($overrideid) { $url->param('id', $overrideid); } else { $url->param('cmid', $cmid); }
// but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * This file is the entry point to the assign module. All pages are rendered from here * * @package mod_assign * @copyright 2012 NetSpot {@link http://www.netspot.com.au} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once '../../config.php'; require_once $CFG->dirroot . '/mod/assign/locallib.php'; $id = required_param('id', PARAM_INT); list($course, $cm) = get_course_and_cm_from_cmid($id, 'assign'); require_login($course, true, $cm); $context = context_module::instance($cm->id); require_capability('mod/assign:view', $context); $assign = new assign($context, $cm, $course); $urlparams = array('id' => $id, 'action' => optional_param('action', '', PARAM_TEXT), 'rownum' => optional_param('rownum', 0, PARAM_INT), 'useridlistid' => optional_param('useridlistid', $assign->get_useridlist_key_id(), PARAM_ALPHANUM)); $url = new moodle_url('/mod/assign/view.php', $urlparams); $PAGE->set_url($url); // Update module completion status. $assign->set_module_viewed(); // Apply overrides. $assign->update_effective_access($USER->id); // Get the assign class to // render the page. echo $assign->view(optional_param('action', '', PARAM_TEXT));
// GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * @package mod_treasurehunt * @copyright 2016 onwards Adrian Rodriguez Fernandez <*****@*****.**> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ // Replace treasurehunt with the name of your module and remove this line. require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; require_once "{$CFG->dirroot}/mod/treasurehunt/locallib.php"; require_once $CFG->libdir . '/formslib.php'; global $USER; $id = required_param('id', PARAM_INT); list($course, $cm) = get_course_and_cm_from_cmid($id, 'treasurehunt'); $treasurehunt = $DB->get_record('treasurehunt', array('id' => $cm->instance), '*', MUST_EXIST); require_login($course, true, $cm); $context = context_module::instance($cm->id); require_capability('mod/treasurehunt:play', $context, null, false); //Poner evento de edicion o algo asi /* $event = \mod_treasurehunt\event\course_module_viewed::create(array( 'objectid' => $PAGE->cm->instance, 'context' => $PAGE->context, )); $event->add_record_snapshot('course', $PAGE->course); $event->add_record_snapshot($PAGE->cm->modname, $treasurehunt); $event->trigger(); */ // Print the page header. $PAGE->set_url('/mod/treasurehunt/play.php', array('id' => $cm->id)); $PAGE->set_title(format_string($treasurehunt->name));
// You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Availability password - Ajax file * * @package availability_password * @copyright 2016 Davo Smith, Synergy Learning UK on behalf of Alexander Bias, University of Ulm <*****@*****.**> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ define('AJAX_SCRIPT', true); require_once dirname(__FILE__) . '/../../../config.php'; global $PAGE; $cmid = required_param('id', PARAM_INT); $password = required_param('password', PARAM_RAW); /** @var cm_info $cm */ list($course, $cm) = get_course_and_cm_from_cmid($cmid); $url = new moodle_url('/availability/condition/password/ajax.php', array('id' => $cm->id)); $PAGE->set_url($url); require_login($course, false); require_sesskey(); $ret = (object) ['error' => 0, 'success' => 0]; if (\availability_password\condition::submit_password_for_cm($cm, $password)) { $ret->success = 1; // Check if the activity can now be accessed. $modinfo = get_fast_modinfo($course); $cminfo = $modinfo->get_cm($cm->id); if ($cminfo->available) { $ret->redirect = $cm->url->out(false); } } echo json_encode($ret);
// // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * This file is the entry point to the sepl module. All pages are rendered from here * * @package mod_sepl * @copyright 2012 NetSpot {@link http://www.netspot.com.au} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once '../../config.php'; require_once $CFG->dirroot . '/mod/sepl/locallib.php'; $id = required_param('id', PARAM_INT); $urlparams = array('id' => $id, 'action' => optional_param('action', '', PARAM_TEXT), 'rownum' => optional_param('rownum', 0, PARAM_INT), 'useridlistid' => optional_param('action', 0, PARAM_INT)); $url = new moodle_url('/mod/sepl/view.php', $urlparams); list($course, $cm) = get_course_and_cm_from_cmid($id, 'sepl'); require_login($course, true, $cm); $PAGE->set_url($url); $context = context_module::instance($cm->id); require_capability('mod/sepl:view', $context); $sepl = new sepl($context, $cm, $course); $completion = new completion_info($course); $completion->set_module_viewed($cm); // Get the sepl class to // render the page. echo $sepl->view(optional_param('action', '', PARAM_TEXT));
* @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__) . '/locallib.php'; require_once $CFG->libdir . '/completionlib.php'; require_once $CFG->libdir . '/filelib.php'; require_once $CFG->libdir . '/rsslib.php'; require_once dirname(__FILE__) . '/imageclass.php'; global $DB; $id = optional_param('id', 0, PARAM_INT); $l = optional_param('l', 0, PARAM_INT); $page = optional_param('page', 0, PARAM_INT); $search = optional_param('search', '', PARAM_TEXT); $editing = optional_param('editing', 0, PARAM_BOOL); if ($id) { list($course, $cm) = get_course_and_cm_from_cmid($id, 'lightboxgallery'); if (!($gallery = $DB->get_record('lightboxgallery', array('id' => $cm->instance)))) { print_error('invalidcoursemodule'); } } else { if (!($gallery = $DB->get_record('lightboxgallery', array('id' => $l)))) { print_error('invalidlightboxgalleryid', 'lightboxgallery'); } list($course, $cm) = get_course_and_cm_from_instance($gallery, 'lightboxgallery'); } require_login($course, true, $cm); if ($gallery->ispublic) { $userid = isloggedin() ? $USER->id : 0; } else { require_login($course, true, $cm); $userid = $USER->id;
public static function observer(\core\event\base $event) { global $DB; $unlocked_content = false; if (!block_game_content_unlock_helper::is_student($event->userid)) { return; } $uss = $DB->get_records_sql("SELECT * FROM {content_unlock_system} WHERE deleted = ? AND " . $DB->sql_compare_text('conditions') . " = " . $DB->sql_compare_text('?'), array('deleted' => 0, 'conditions' => $event->eventname)); foreach ($uss as $unlocksystem) { $ccm = get_course_and_cm_from_cmid($unlocksystem->coursemoduleid); if ($event->courseid != $ccm[0]->id) { continue; } if (!(content_unlock_satisfies_conditions($unlocksystem->restrictions, $event->courseid, $event->userid) && content_unlock_satisfies_advanced_conditions($unlocksystem, $event) && content_unlock_satisfies_block_conditions($unlocksystem, $event->courseid, $event->userid))) { continue; } $blockcontextid = $DB->get_field('block_instances', 'parentcontextid', array('id' => $unlocksystem->blockinstanceid)); if (!$blockcontextid) { continue; } $blockcontext = context::instance_by_id($blockcontextid); $context = context::instance_by_id($event->contextid); if (strpos($context->path, $blockcontext->path) !== 0 && $blockcontext->instanceid != SITEID) { continue; } $sql = "SELECT count(c.id)\n\t\t\t\tFROM {content_unlock_log} c\n\t\t\t\t\tINNER JOIN {logstore_standard_log} l ON c.logid = l.id\n\t\t\t\tWHERE l.userid = :userid\n\t\t\t\t\tAND c.unlocksystemid = :unlocksystemid"; $params['userid'] = $event->userid; $params['unlocksystemid'] = $unlocksystem->id; if ($DB->count_records_sql($sql, $params) > 0) { continue; } $manager = get_log_manager(); $selectreaders = $manager->get_readers('\\core\\log\\sql_reader'); if ($selectreaders) { $reader = reset($selectreaders); } $selectwhere = "eventname = :eventname\n\t\t\t\tAND component = :component\n\t\t\t\tAND action = :action\n\t\t\t\tAND target = :target\n\t\t\t\tAND crud = :crud\n\t\t\t\tAND edulevel = :edulevel\n\t\t\t\tAND contextid = :contextid\n\t\t\t\tAND contextlevel = :contextlevel\n\t\t\t\tAND contextinstanceid = :contextinstanceid\n\t\t\t\tAND userid = :userid \n\t\t\t\tAND anonymous = :anonymous\n\t\t\t\tAND timecreated = :timecreated"; $params['eventname'] = $event->eventname; $params['component'] = $event->component; $params['action'] = $event->action; $params['target'] = $event->target; $params['crud'] = $event->crud; $params['edulevel'] = $event->edulevel; $params['contextid'] = $event->contextid; $params['contextlevel'] = $event->contextlevel; $params['contextinstanceid'] = $event->contextinstanceid; $params['userid'] = $event->userid; $params['anonymous'] = $event->anonymous; $params['timecreated'] = $event->timecreated; $logid = $reader->get_events_select($selectwhere, $params, '', 0, 0); $logid = array_keys($logid)[0]; $record = new stdClass(); $record->logid = $logid; $record->unlocksystemid = $unlocksystem->id; $DB->insert_record('content_unlock_log', $record); $unlocked_content = true; if ($unlocksystem->mode == 0) { if ($unlocksystem->coursemodulevisibility == 1) { set_section_visible($event->courseid, $ccm[1]->sectionnum, 1); } set_coursemodule_visible($unlocksystem->coursemoduleid, $unlocksystem->coursemodulevisibility); } else { groups_add_member($unlocksystem->groupid, $event->userid); } } if ($unlocked_content) { $params = array('context' => $context); $event = \block_game_content_unlock\event\content_unlocked::create($params); $event->trigger(); } }
public function get_content() { global $DB, $USER; $this->content = new stdClass(); $this->content->text = ''; $this->content->footer = ''; if (user_has_role_assignment($USER->id, 5)) { $eventsarray = content_unlock_generate_events_list(); $us = $DB->get_records('content_unlock_system', array('deleted' => 0, 'blockinstanceid' => $this->instance->id)); if (!empty($us)) { $unlocklist = ''; $course = $DB->get_record('course', array('id' => $this->page->course->id)); $info = get_fast_modinfo($course); foreach ($us as $unlocksystem) { $sql = "SELECT *\n\t\t\t\t\t\t\tFROM {content_unlock_log} c\n\t\t\t\t\t\t\t\tINNER JOIN {logstore_standard_log} l ON c.logid = l.id\n\t\t\t\t\t\t\tWHERE l.userid = :userid\n\t\t\t\t\t\t\t\tAND c.unlocksystemid = :unlocksystemid"; $params['userid'] = $USER->id; $params['unlocksystemid'] = $unlocksystem->id; $unlocked_content = $DB->record_exists_sql($sql, $params); if ($unlocked_content) { continue; } $ccm = get_course_and_cm_from_cmid($unlocksystem->coursemoduleid); if ($this->page->course->id != $ccm[0]->id) { continue; } if (!(content_unlock_satisfies_conditions($unlocksystem->restrictions, $this->page->course->id, $USER->id) && (in_array($unlocksystem->conditions, self::$resource_events) || content_unlock_satisfies_block_conditions($unlocksystem, $this->page->course->id, $USER->id)))) { continue; } $cm = $info->get_cm($unlocksystem->coursemoduleid); $eventdescription = is_null($unlocksystem->eventdescription) ? $eventsarray[$unlocksystem->conditions] : $unlocksystem->eventdescription; $unlocklist = $unlocklist . '<li>' . $cm->name . ' (' . get_string('modulename', $cm->modname) . ') por ' . (in_array($unlocksystem->conditions, self::$resource_events) ? content_unlock_get_block_conditions_text($unlocksystem) : $eventdescription) . '</li>'; } if (strlen($unlocklist) > 0) { $this->content->text = '<p>Você pode desbloquear:<ul>' . $unlocklist . '</ul></p>'; } } if (isset($this->config)) { $lastunlocksnumber = isset($this->config->lastunlocksnumber) ? $this->config->lastunlocksnumber : 1; } else { $lastunlocksnumber = 0; } if ($lastunlocksnumber > 0) { $sql = "SELECT c.id as id, s.coursemoduleid as coursemoduleid, s.eventdescription as eventdescription, s.conditions as conditions, s.connective as connective\n\t\t\t\t\tFROM\n\t\t\t\t\t\t{content_unlock_log} c\n\t\t\t\t\tINNER JOIN {logstore_standard_log} l ON c.logid = l.id\n\t\t\t\t\tINNER JOIN {content_unlock_system} s ON c.unlocksystemid = s.id\n\t\t\t\t\tWHERE l.userid = :userid\n\t\t\t\t\t\tAND l.courseid = :courseid\n\t\t\t\t\t\tAND s.blockinstanceid = :blockinstanceid\n\t\t\t\t\tORDER BY c.id DESC"; $params['userid'] = $USER->id; $params['courseid'] = $this->page->course->id; $params['blockinstanceid'] = $this->instance->id; $lastunlocks = $DB->get_records_sql($sql, $params, 0, $lastunlocksnumber); if (!empty($lastunlocks)) { $lastunlockslist = ''; foreach ($lastunlocks as $lu) { $ccm = get_course_and_cm_from_cmid($lu->coursemoduleid); $course = $DB->get_record('course', array('id' => $ccm[0]->id)); $info = get_fast_modinfo($course); $cm = $info->get_cm($lu->coursemoduleid); $eventdescription = is_null($lu->eventdescription) ? $eventsarray[$lu->conditions] : $lu->eventdescription; $lastunlockslist = $lastunlockslist . '<li>' . $cm->name . ' (' . get_string('modulename', $cm->modname) . ') por ' . (in_array($lu->conditions, self::$resource_events) ? content_unlock_get_block_conditions_text($lu) : $eventdescription) . '</li>'; } $this->content->text = $this->content->text . '<p>Você desbloqueou recentemente:<ul>' . $lastunlockslist . '</ul></p>'; } } } return $this->content; }
protected function specific_definition($mform) { global $COURSE, $DB, $USER; $context = context_course::instance($COURSE->id); if (has_capability('block/game_content_unlock:addunlocksystem', $context)) { $mform->addElement('header', 'configheader', get_string('unlocksystemeditpage', 'block_game_content_unlock')); $mform->addElement('text', 'config_title', 'Título do bloco'); $mform->setType('config_title', PARAM_TEXT); $mform->addElement('select', 'config_lastunlocksnumber', 'Número de últimos desbloqueios exibidos', array(0, 1, 2, 3, 4, 5, 6), null); $mform->addRule('config_lastunlocksnumber', null, 'required', null, 'client'); $mform->setDefault('config_lastunlocksnumber', 1); $mform->setType('config_lastunlocksnumber', PARAM_TEXT); $eventslist = report_eventlist_list_generator::get_non_core_event_list(); $eventsarray = array(); foreach ($eventslist as $value) { $description = explode("\\", explode(".", strip_tags($value['fulleventname']))[0]); $eventsarray[$value['eventname']] = $description[0] . " (" . $value['eventname'] . ")"; } $course = $DB->get_record('course', array('id' => $COURSE->id)); $info = get_fast_modinfo($course); $sql = "SELECT *\n\t\t\t\tFROM {content_unlock_system} s\n\t\t\t\t\tINNER JOIN {content_unlock_processor} p ON s.id = p.unlocksystemid\n\t\t\t\tWHERE p.processorid = :processorid\n\t\t\t\t\tAND s.blockinstanceid = :blockinstanceid\n\t\t\t\t\tAND s.deleted = 0"; $params['processorid'] = $USER->id; $params['blockinstanceid'] = $this->block->instance->id; $unlock_systems = $DB->get_records_sql($sql, $params); $html = '<table> <tr> <th>ID</th> <th>Condições</th> <th>Módulo</th> <th>Visibilidade</th> <th>Descrição</th> <th>Gerenciar condições</th> <th>Editar</th> <th>Remover</th> </tr>'; foreach ($unlock_systems as $value) { $condition_manage_url = new moodle_url('/blocks/game_content_unlock/conditionmanage.php', array('courseid' => $COURSE->id, 'unlocksystemid' => $value->id)); $urledit = new moodle_url('/blocks/game_content_unlock/unlocksystemedit.php', array('courseid' => $COURSE->id, 'unlocksystemid' => $value->id)); $urlremove = new moodle_url('/blocks/game_content_unlock/unlocksystemdelete.php', array('courseid' => $COURSE->id, 'unlocksystemid' => $value->id)); // Evitar que sistemas de outros cursos sejam exibidos - mudar? $ccm = get_course_and_cm_from_cmid($value->coursemoduleid); if ($COURSE->id != $ccm[0]->id) { continue; } $cm = $info->get_cm($value->coursemoduleid); $html = $html . '<tr> <td>' . $value->id . '</td> <td>' . $eventsarray[$value->conditions] . '</td> <td>' . $cm->name . '</td> <td>' . $value->coursemodulevisibility . '</td> <td>' . $value->eventdescription . '</td> <td>' . html_writer::link($condition_manage_url, 'Gerenciar condições') . '</td> <td>' . html_writer::link($urledit, 'Editar') . '</td> <td>' . html_writer::link($urlremove, 'Remover') . '</td> </tr>'; } $url = new moodle_url('/blocks/game_content_unlock/unlocksystemadd.php', array('blockid' => $this->block->instance->id, 'courseid' => $COURSE->id)); $html = $html . '</table>' . html_writer::link($url, get_string('unlocksystemaddpage', 'block_game_content_unlock')); $mform->addElement('html', $html); } }