Example #1
0
 /**
  * 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;
 }
Example #2
0
 /**
  * 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);
 }
Example #5
0
// 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'));
Example #6
0
$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()) {
Example #8
0
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);
}
Example #9
0
// 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));
Example #10
0
// 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);
Example #12
0
//
// 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));
Example #13
0
 * @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);
        }
    }