本文整理汇总了PHP中moodle_page::set_course方法的典型用法代码示例。如果您正苦于以下问题:PHP moodle_page::set_course方法的具体用法?PHP moodle_page::set_course怎么用?PHP moodle_page::set_course使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类moodle_page
的用法示例。
在下文中一共展示了moodle_page::set_course方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: cron_setup_user
/**
* Sets up current user and course environment (lang, etc.) in cron.
* Do not use outside of cron script!
*
* @param stdClass $user full user object, null means default cron user (admin)
* @param $course full course record, null means $SITE
* @return void
*/
function cron_setup_user($user = NULL, $course = NULL)
{
global $CFG, $SITE, $PAGE;
static $cronuser = NULL;
static $cronsession = NULL;
if (empty($cronuser)) {
/// ignore admins timezone, language and locale - use site default instead!
$cronuser = get_admin();
$cronuser->timezone = $CFG->timezone;
$cronuser->lang = '';
$cronuser->theme = '';
unset($cronuser->description);
$cronsession = new stdClass();
}
if (!$user) {
// cached default cron user (==modified admin for now)
session_set_user($cronuser);
$_SESSION['SESSION'] = $cronsession;
} else {
// emulate real user session - needed for caps in cron
if ($_SESSION['USER']->id != $user->id) {
session_set_user($user);
$_SESSION['SESSION'] = new stdClass();
}
}
// TODO MDL-19774 relying on global $PAGE in cron is a bad idea.
// Temporary hack so that cron does not give fatal errors.
$PAGE = new moodle_page();
if ($course) {
$PAGE->set_course($course);
} else {
$PAGE->set_course($SITE);
}
// TODO: it should be possible to improve perf by caching some limited number of users here ;-)
}
示例2: process_url_edit
/**
* Handle showing/processing the submission from the block editing form.
* @return boolean true if the form was submitted and the new config saved. Does not
* return if the editing form was displayed. False otherwise.
*/
public function process_url_edit()
{
global $CFG, $DB, $PAGE, $OUTPUT;
$blockid = optional_param('bui_editid', null, PARAM_INT);
if (!$blockid) {
return false;
}
require_sesskey();
require_once $CFG->dirroot . '/blocks/edit_form.php';
$block = $this->find_instance($blockid);
if (!$block->user_can_edit() && !$this->page->user_can_edit_blocks()) {
throw new moodle_exception('nopermissions', '', $this->page->url->out(), get_string('editblock'));
}
$editpage = new moodle_page();
$editpage->set_pagelayout('admin');
$editpage->set_course($this->page->course);
//$editpage->set_context($block->context);
$editpage->set_context($this->page->context);
if ($this->page->cm) {
$editpage->set_cm($this->page->cm);
}
$editurlbase = str_replace($CFG->wwwroot . '/', '/', $this->page->url->out_omit_querystring());
$editurlparams = $this->page->url->params();
$editurlparams['bui_editid'] = $blockid;
$editpage->set_url($editurlbase, $editurlparams);
$editpage->set_block_actions_done();
// At this point we are either going to redirect, or display the form, so
// overwrite global $PAGE ready for this. (Formslib refers to it.)
$PAGE = $editpage;
//some functions like MoodleQuickForm::addHelpButton use $OUTPUT so we need to replace that to
$output = $editpage->get_renderer('core');
$OUTPUT = $output;
$formfile = $CFG->dirroot . '/blocks/' . $block->name() . '/edit_form.php';
if (is_readable($formfile)) {
require_once $formfile;
$classname = 'block_' . $block->name() . '_edit_form';
if (!class_exists($classname)) {
$classname = 'block_edit_form';
}
} else {
$classname = 'block_edit_form';
}
$mform = new $classname($editpage->url, $block, $this->page);
$mform->set_data($block->instance);
if ($mform->is_cancelled()) {
redirect($this->page->url);
} else {
if ($data = $mform->get_data()) {
$bi = new stdClass();
$bi->id = $block->instance->id;
// This may get overwritten by the special case handling below.
$bi->pagetypepattern = $data->bui_pagetypepattern;
$bi->showinsubcontexts = (bool) $data->bui_contexts;
if (empty($data->bui_subpagepattern) || $data->bui_subpagepattern == '%@NULL@%') {
$bi->subpagepattern = null;
} else {
$bi->subpagepattern = $data->bui_subpagepattern;
}
$systemcontext = context_system::instance();
$frontpagecontext = context_course::instance(SITEID);
$parentcontext = context::instance_by_id($data->bui_parentcontextid);
// Updating stickiness and contexts. See MDL-21375 for details.
if (has_capability('moodle/site:manageblocks', $parentcontext)) {
// Check permissions in destination
// Explicitly set the default context
$bi->parentcontextid = $parentcontext->id;
if ($data->bui_editingatfrontpage) {
// The block is being edited on the front page
// The interface here is a special case because the pagetype pattern is
// totally derived from the context menu. Here are the excpetions. MDL-30340
switch ($data->bui_contexts) {
case BUI_CONTEXTS_ENTIRE_SITE:
// The user wants to show the block across the entire site
$bi->parentcontextid = $systemcontext->id;
$bi->showinsubcontexts = true;
$bi->pagetypepattern = '*';
break;
case BUI_CONTEXTS_FRONTPAGE_SUBS:
// The user wants the block shown on the front page and all subcontexts
$bi->parentcontextid = $frontpagecontext->id;
$bi->showinsubcontexts = true;
$bi->pagetypepattern = '*';
break;
case BUI_CONTEXTS_FRONTPAGE_ONLY:
// The user want to show the front page on the frontpage only
$bi->parentcontextid = $frontpagecontext->id;
$bi->showinsubcontexts = false;
$bi->pagetypepattern = 'site-index';
// This is the only relevant page type anyway but we'll set it explicitly just
// in case the front page grows site-index-* subpages of its own later
break;
}
}
}
$bits = explode('-', $bi->pagetypepattern);
//.........这里部分代码省略.........
示例3: test_navbar_prepend_and_add
public function test_navbar_prepend_and_add()
{
global $PAGE;
// Unfortunate hack needed because people use global $PAGE around the place.
$PAGE->set_url('/');
// We need to reset after this test because we using the generator.
$this->resetAfterTest();
$generator = self::getDataGenerator();
$cat1 = $generator->create_category();
$cat2 = $generator->create_category(array('parent' => $cat1->id));
$course = $generator->create_course(array('category' => $cat2->id));
$page = new moodle_page();
$page->set_course($course);
$page->set_url(new moodle_url('/course/view.php', array('id' => $course->id)));
$page->navbar->prepend('test 1');
$page->navbar->prepend('test 2');
$page->navbar->add('test 3');
$page->navbar->add('test 4');
$items = $page->navbar->get_items();
foreach ($items as $item) {
$this->assertInstanceOf('navigation_node', $item);
}
$i = 0;
$this->assertSame('test 1', $items[$i++]->text);
$this->assertSame('test 2', $items[$i++]->text);
$this->assertSame('home', $items[$i++]->key);
$this->assertSame('courses', $items[$i++]->key);
$this->assertSame($cat1->id, $items[$i++]->key);
$this->assertSame($cat2->id, $items[$i++]->key);
$this->assertSame($course->id, $items[$i++]->key);
$this->assertSame('test 3', $items[$i++]->text);
$this->assertSame('test 4', $items[$i++]->text);
return $page;
}
示例4: cron_setup_user
/**
* Sets up current user and course environment (lang, etc.) in cron.
* Do not use outside of cron script!
*
* @param stdClass $user full user object, null means default cron user (admin),
* value 'reset' means reset internal static caches.
* @param stdClass $course full course record, null means $SITE
* @return void
*/
function cron_setup_user($user = NULL, $course = NULL)
{
global $CFG, $SITE, $PAGE;
if (!CLI_SCRIPT) {
throw new coding_exception('Function cron_setup_user() cannot be used in normal requests!');
}
static $cronuser = NULL;
static $cronsession = NULL;
if ($user === 'reset') {
$cronuser = null;
$cronsession = null;
\core\session\manager::init_empty_session();
return;
}
if (empty($cronuser)) {
/// ignore admins timezone, language and locale - use site default instead!
$cronuser = get_admin();
$cronuser->timezone = $CFG->timezone;
$cronuser->lang = '';
$cronuser->theme = '';
unset($cronuser->description);
$cronsession = new stdClass();
}
if (!$user) {
// Cached default cron user (==modified admin for now).
\core\session\manager::init_empty_session();
\core\session\manager::set_user($cronuser);
$GLOBALS['SESSION'] = $cronsession;
} else {
// Emulate real user session - needed for caps in cron.
if ($GLOBALS['USER']->id != $user->id) {
\core\session\manager::init_empty_session();
\core\session\manager::set_user($user);
}
}
// TODO MDL-19774 relying on global $PAGE in cron is a bad idea.
// Temporary hack so that cron does not give fatal errors.
$PAGE = new moodle_page();
if ($course) {
$PAGE->set_course($course);
} else {
$PAGE->set_course($SITE);
}
// TODO: it should be possible to improve perf by caching some limited number of users here ;-)
}
示例5: email_digest
public static function email_digest()
{
global $CFG, $PERF;
// Build current digest.
mtrace("Beginning forum digest processing...");
if (!empty($PERF->dbqueries)) {
$beforequeries = $PERF->dbqueries;
}
$before = microtime(true);
mtrace('Initial query: ', '');
$list = new mod_forumng_digest_list(true);
mtrace(round(microtime(true) - $before, 1) . 's');
$userdigests = array();
$oldcourse = null;
// Forum loop.
while ($list->next_forum($forum, $cm, $context, $course)) {
self::debug("DEBUG: Forum " . $forum->get_name() . " on course {$course->shortname} " . "(cmid {$cm->id} contextid {$context->id})");
if (!$oldcourse || $course->id != $oldcourse->id) {
// Finish off and clear users.
if ($oldcourse) {
self::digest_finish_course($oldcourse, $userdigests);
}
// Set up new course details.
// Note: This code is a bit sketchy; borrowed from cron_setup_user.
$PAGE = new moodle_page();
$PAGE->set_course($course);
$oldcourse = clone $course;
}
// Count posts just for logging.
$postcount = 0;
// Get subscribers to forum.
$subscribers = $forum->get_subscribers();
self::debug("DEBUG: Subscribers before filter " . count($subscribers), '');
self::email_filter_subscribers($course, $cm, $forum, $subscribers, true);
self::debug(", after " . count($subscribers));
if (count($subscribers) == 0) {
continue;
}
while ($list->next_discussion($discussion)) {
self::debug("DEBUG: Discussion " . $discussion->get_subject() . ' (' . $discussion->get_id() . ')');
// Evaluate list of users based on this discussion (which holds
// group info). Organise list by language, timezone and email
// type.
$discussionusers = array();
foreach ($subscribers as $subscriber) {
if (self::subscriber_receives_discussion($forum, $discussion, $subscriber)) {
$discussionusers[$subscriber->id] = $subscriber;
}
}
while ($list->next_post($post, $inreplyto)) {
// Loop through all digest users.
foreach ($discussionusers as $user) {
// Add to digest. (This will set up the user's
// digest if they don't already have one).
self::digest_add_post_for_user($user, $userdigests, $post, $inreplyto, $discussion, $forum, $cm, $course, $context);
}
$postcount++;
}
}
}
if ($oldcourse) {
self::digest_finish_course($oldcourse, $userdigests);
}
$queryinfo = '';
if (!empty($PERF->dbqueries)) {
$queryinfo = ', ' . ($PERF->dbqueries - $beforequeries) . ' queries';
}
$totalpostcount = $list->get_post_count_so_far();
mtrace("Digest processing ({$totalpostcount} new digest posts) complete, total: " . round(microtime(true) - $before, 1) . 's' . $queryinfo);
}
示例6: test_search_courses
/**
* Test search_courses
*/
public function test_search_courses()
{
global $DB;
$this->resetAfterTest(true);
$this->setAdminUser();
$generatedcourses = array();
$coursedata1['fullname'] = 'FIRST COURSE';
$course1 = self::getDataGenerator()->create_course($coursedata1);
$page = new moodle_page();
$page->set_course($course1);
$page->blocks->add_blocks([BLOCK_POS_LEFT => ['news_items'], BLOCK_POS_RIGHT => []], 'course-view-*');
$coursedata2['fullname'] = 'SECOND COURSE';
$course2 = self::getDataGenerator()->create_course($coursedata2);
$page = new moodle_page();
$page->set_course($course2);
$page->blocks->add_blocks([BLOCK_POS_LEFT => ['news_items'], BLOCK_POS_RIGHT => []], 'course-view-*');
// Search by name.
$results = core_course_external::search_courses('search', 'FIRST');
$results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results);
$this->assertEquals($coursedata1['fullname'], $results['courses'][0]['fullname']);
$this->assertCount(1, $results['courses']);
// Create the forum.
$record = new stdClass();
$record->introformat = FORMAT_HTML;
$record->course = $course2->id;
// Set Aggregate type = Average of ratings.
$forum = self::getDataGenerator()->create_module('forum', $record);
// Search by module.
$results = core_course_external::search_courses('modulelist', 'forum');
$results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results);
$this->assertEquals(1, $results['total']);
// Enable coursetag option.
set_config('block_tags_showcoursetags', true);
// Add tag 'TAG-LABEL ON SECOND COURSE' to Course2.
core_tag_tag::set_item_tags('core', 'course', $course2->id, context_course::instance($course2->id), array('TAG-LABEL ON SECOND COURSE'));
$taginstance = $DB->get_record('tag_instance', array('itemtype' => 'course', 'itemid' => $course2->id), '*', MUST_EXIST);
// Search by tagid.
$results = core_course_external::search_courses('tagid', $taginstance->tagid);
$results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results);
$this->assertEquals($coursedata2['fullname'], $results['courses'][0]['fullname']);
// Search by block (use news_items default block).
$blockid = $DB->get_field('block', 'id', array('name' => 'news_items'));
$results = core_course_external::search_courses('blocklist', $blockid);
$results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results);
$this->assertEquals(2, $results['total']);
// Now as a normal user.
$user = self::getDataGenerator()->create_user();
// Add a 3rd, hidden, course we shouldn't see, even when enrolled as student.
$coursedata3['fullname'] = 'HIDDEN COURSE';
$coursedata3['visible'] = 0;
$course3 = self::getDataGenerator()->create_course($coursedata3);
$this->getDataGenerator()->enrol_user($user->id, $course3->id, 'student');
$this->getDataGenerator()->enrol_user($user->id, $course2->id, 'student');
$this->setUser($user);
$results = core_course_external::search_courses('search', 'FIRST');
$results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results);
$this->assertCount(1, $results['courses']);
$this->assertEquals(1, $results['total']);
$this->assertEquals($coursedata1['fullname'], $results['courses'][0]['fullname']);
// Check that we can see both without the limit to enrolled setting.
$results = core_course_external::search_courses('search', 'COURSE', 0, 0, array(), 0);
$results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results);
$this->assertCount(2, $results['courses']);
$this->assertEquals(2, $results['total']);
// Check that we only see our enrolled course when limiting.
$results = core_course_external::search_courses('search', 'COURSE', 0, 0, array(), 1);
$results = external_api::clean_returnvalue(core_course_external::search_courses_returns(), $results);
$this->assertCount(1, $results['courses']);
$this->assertEquals(1, $results['total']);
$this->assertEquals($coursedata2['fullname'], $results['courses'][0]['fullname']);
// Search by block (use news_items default block). Should fail (only admins allowed).
$this->expectException('required_capability_exception');
$results = core_course_external::search_courses('blocklist', $blockid);
}
示例7: process_url_edit
/**
* Handle showing/processing the submission from the block editing form.
* @return boolean true if the form was submitted and the new config saved. Does not
* return if the editing form was displayed. False otherwise.
*/
public function process_url_edit()
{
global $CFG, $DB, $PAGE;
$blockid = optional_param('bui_editid', null, PARAM_INTEGER);
if (!$blockid) {
return false;
}
confirm_sesskey();
require_once $CFG->dirroot . '/blocks/edit_form.php';
$block = $this->find_instance($blockid);
if (!$block->user_can_edit() && !$this->page->user_can_edit_blocks()) {
throw new moodle_exception('nopermissions', '', $this->page->url->out(), get_string('editblock'));
}
$editpage = new moodle_page();
$editpage->set_generaltype('form');
$editpage->set_course($this->page->course);
$editpage->set_context($block->context);
$editurlbase = str_replace($CFG->wwwroot . '/', '', $this->page->url->out(true));
$editurlparams = $this->page->url->params();
$editurlparams['bui_editid'] = $blockid;
$editpage->set_url($editurlbase, $editurlparams);
$editpage->_block_actions_done = true;
// At this point we are either going to redirect, or display the form, so
// overwrite global $PAGE ready for this. (Formslib refers to it.)
$PAGE = $editpage;
$formfile = $CFG->dirroot . '/blocks/' . $block->name() . '/edit_form.php';
if (is_readable($formfile)) {
require_once $formfile;
$classname = 'block_' . $block->name() . '_edit_form';
} else {
$classname = 'block_edit_form';
}
$mform = new $classname($editpage->url, $block, $this->page);
$mform->set_data($block->instance);
if ($mform->is_cancelled()) {
redirect($this->page->url);
} else {
if ($data = $mform->get_data()) {
$bi = new stdClass();
$bi->id = $block->instance->id;
$bi->showinsubcontexts = $data->bui_showinsubcontexts;
$bi->pagetypepattern = $data->bui_pagetypepattern;
if (empty($data->bui_subpagepattern) || $data->bui_subpagepattern == '%@NULL@%') {
$bi->subpagepattern = null;
} else {
$bi->subpagepattern = $data->bui_subpagepattern;
}
$bi->defaultregion = $data->bui_defaultregion;
$bi->defaultweight = $data->bui_defaultweight;
$DB->update_record('block_instances', $bi);
if (!empty($block->config)) {
$config = clone $block->config;
} else {
$config = new stdClass();
}
foreach ($data as $configfield => $value) {
if (strpos($configfield, 'config_') !== 0) {
continue;
}
$field = substr($configfield, 7);
$config->{$field} = $value;
}
$block->instance_config_save($config);
$bp = new stdClass();
$bp->visible = $data->bui_visible;
$bp->region = $data->bui_region;
$bp->weight = $data->bui_weight;
$needbprecord = !$data->bui_visible || $data->bui_region != $data->bui_defaultregion || $data->bui_weight != $data->bui_defaultweight;
if ($block->instance->blockpositionid && !$needbprecord) {
$DB->delete_records('block_positions', array('id' => $block->instance->blockpositionid));
} else {
if ($block->instance->blockpositionid && $needbprecord) {
$bp->id = $block->instance->blockpositionid;
$DB->update_record('block_positions', $bp);
} else {
if ($needbprecord) {
$bp->blockinstanceid = $block->instance->id;
$bp->contextid = $this->page->context->id;
$bp->pagetype = $this->page->pagetype;
if ($this->page->subpage) {
$bp->subpage = $this->page->subpage;
} else {
$bp->subpage = '';
}
$DB->insert_record('block_positions', $bp);
}
}
}
redirect($this->page->url);
} else {
$strheading = get_string('editinga', $block->name());
if (strpos($strheading, '[[') === 0) {
$strheading = get_string('blockconfiga', 'moodle', $block->get_title());
}
$editpage->set_title($strheading);
//.........这里部分代码省略.........
示例8: process_url_edit
/**
* Handle showing/processing the submission from the block editing form.
* @return boolean true if the form was submitted and the new config saved. Does not
* return if the editing form was displayed. False otherwise.
*/
public function process_url_edit()
{
global $CFG, $DB, $PAGE;
$blockid = optional_param('bui_editid', null, PARAM_INTEGER);
if (!$blockid) {
return false;
}
require_sesskey();
require_once $CFG->dirroot . '/blocks/edit_form.php';
$block = $this->find_instance($blockid);
if (!$block->user_can_edit() && !$this->page->user_can_edit_blocks()) {
throw new moodle_exception('nopermissions', '', $this->page->url->out(), get_string('editblock'));
}
$editpage = new moodle_page();
$editpage->set_pagelayout('admin');
$editpage->set_course($this->page->course);
$editpage->set_context($block->context);
if ($this->page->cm) {
$editpage->set_cm($this->page->cm);
}
$editurlbase = str_replace($CFG->wwwroot . '/', '/', $this->page->url->out_omit_querystring());
$editurlparams = $this->page->url->params();
$editurlparams['bui_editid'] = $blockid;
$editpage->set_url($editurlbase, $editurlparams);
$editpage->set_block_actions_done();
// At this point we are either going to redirect, or display the form, so
// overwrite global $PAGE ready for this. (Formslib refers to it.)
$PAGE = $editpage;
$formfile = $CFG->dirroot . '/blocks/' . $block->name() . '/edit_form.php';
if (is_readable($formfile)) {
require_once $formfile;
$classname = 'block_' . $block->name() . '_edit_form';
if (!class_exists($classname)) {
$classname = 'block_edit_form';
}
} else {
$classname = 'block_edit_form';
}
$mform = new $classname($editpage->url, $block, $this->page);
$mform->set_data($block->instance);
if ($mform->is_cancelled()) {
redirect($this->page->url);
} else {
if ($data = $mform->get_data()) {
$bi = new stdClass();
$bi->id = $block->instance->id;
$bi->pagetypepattern = $data->bui_pagetypepattern;
if (empty($data->bui_subpagepattern) || $data->bui_subpagepattern == '%@NULL@%') {
$bi->subpagepattern = null;
} else {
$bi->subpagepattern = $data->bui_subpagepattern;
}
$parentcontext = get_context_instance_by_id($data->bui_parentcontextid);
$systemcontext = get_context_instance(CONTEXT_SYSTEM);
// Updating stickiness and contexts. See MDL-21375 for details.
if (has_capability('moodle/site:manageblocks', $parentcontext)) {
// Check permissions in destination
// Explicitly set the context
$bi->parentcontextid = $parentcontext->id;
// If the context type is > 0 then we'll explicitly set the block as sticky, otherwise not
$bi->showinsubcontexts = (int) (!empty($data->bui_contexts));
// If the block wants to be system-wide, then explicitly set that
if ($data->bui_contexts == 2) {
// Only possible on a frontpage or system page
$bi->parentcontextid = $systemcontext->id;
} else {
// The block doesn't want to be system-wide, so let's ensure that
if ($parentcontext->id == $systemcontext->id) {
// We need to move it to the front page
$frontpagecontext = get_context_instance(CONTEXT_COURSE, SITEID);
$bi->parentcontextid = $frontpagecontext->id;
$bi->pagetypepattern = '*';
// Just in case
}
}
}
$bi->defaultregion = $data->bui_defaultregion;
$bi->defaultweight = $data->bui_defaultweight;
$DB->update_record('block_instances', $bi);
if (!empty($block->config)) {
$config = clone $block->config;
} else {
$config = new stdClass();
}
foreach ($data as $configfield => $value) {
if (strpos($configfield, 'config_') !== 0) {
continue;
}
$field = substr($configfield, 7);
$config->{$field} = $value;
}
$block->instance_config_save($config);
$bp = new stdClass();
$bp->visible = $data->bui_visible;
$bp->region = $data->bui_region;
//.........这里部分代码省略.........
示例9: blocks_add_default_course_blocks
/**
* Add the default blocks to a course.
* @param object $course a course object.
*/
function blocks_add_default_course_blocks($course)
{
global $CFG;
if (!empty($CFG->defaultblocks_override)) {
$blocknames = blocks_parse_default_blocks_list($CFG->defaultblocks_override);
} else {
if ($course->id == SITEID) {
$blocknames = blocks_get_default_site_course_blocks();
} else {
$defaultblocks = 'defaultblocks_' . $course->format;
if (!empty($CFG->{$defaultblocks})) {
$blocknames = blocks_parse_default_blocks_list($CFG->{$defaultblocks});
} else {
$formatconfig = $CFG->dirroot . '/course/format/' . $course->format . '/config.php';
if (is_readable($formatconfig)) {
require $formatconfig;
}
if (!empty($format['defaultblocks'])) {
$blocknames = blocks_parse_default_blocks_list($format['defaultblocks']);
} else {
if (!empty($CFG->defaultblocks)) {
$blocknames = blocks_parse_default_blocks_list($CFG->defaultblocks);
} else {
$blocknames = array(BLOCK_POS_LEFT => array('participants', 'activity_modules', 'search_forums', 'admin', 'course_list'), BLOCK_POS_RIGHT => array('news_items', 'calendar_upcoming', 'recent_activity'));
}
}
}
}
}
if ($course->id == SITEID) {
$pagetypepattern = 'site-index';
} else {
$pagetypepattern = 'course-view-*';
}
$page = new moodle_page();
$page->set_course($course);
$page->blocks->add_blocks($blocknames, $pagetypepattern);
}
示例10: strtotime
static function email_digest()
{
global $CFG, $PERF;
// Do digest mails if required. Note this is based on server time not
// user time.
$nextdigest = get_config('forumng', 'nextdigest');
if (!$nextdigest) {
// Run digest at next occurrence of the requested time
$nextdigest = strtotime($CFG->digestmailtime . ':00');
if ($nextdigest <= time()) {
$nextdigest = strtotime('+1 day', $nextdigest);
}
set_config('nextdigest', $nextdigest, 'forumng');
}
if (time() < $nextdigest) {
self::debug("DEBUG: Not yet time for digest");
return;
}
// Run digest again next day at specified time (note: best to
// get time again, as they may have changed it)
$nextdigest = strtotime($CFG->digestmailtime . ':00');
if ($nextdigest <= time()) {
$nextdigest = strtotime('+1 day', $nextdigest);
}
set_config('nextdigest', $nextdigest, 'forumng');
// OK, now build current digest
mtrace("Beginning forum digest processing...");
if (!empty($PERF->dbqueries)) {
$beforequeries = $PERF->dbqueries;
}
$before = microtime(true);
mtrace('Initial query: ', '');
$list = new mod_forumng_digest_list(true);
mtrace(round(microtime(true) - $before, 1) . 's');
$userdigests = array();
$oldcourse = null;
// Forum loop
while ($list->next_forum($forum, $cm, $context, $course)) {
self::debug("DEBUG: Forum " . $forum->get_name() . " on course {$course->shortname} " . "(cmid {$cm->id} contextid {$context->id})");
if (!$oldcourse || $course->id != $oldcourse->id) {
// Finish off and clear users
if ($oldcourse) {
self::digest_finish_course($oldcourse, $userdigests);
}
// Set up new course details
// Note: This code is a bit sketchy; borrowed from cron_setup_user
$PAGE = new moodle_page();
$PAGE->set_course($course);
$oldcourse = clone $course;
}
// Count posts just for logging
$postcount = 0;
// Get subscribers to forum
$subscribers = $forum->get_subscribers();
self::debug("DEBUG: Subscribers before filter " . count($subscribers), '');
self::email_filter_subscribers($course, $cm, $forum, $subscribers, true);
self::debug(", after " . count($subscribers));
if (count($subscribers) == 0) {
continue;
}
while ($list->next_discussion($discussion)) {
self::debug("DEBUG: Discussion " . $discussion->get_subject() . ' (' . $discussion->get_id() . ')');
// Evaluate list of users based on this discussion (which holds
// group info). Organise list by language, timezone and email
// type.
$discussionusers = array();
foreach ($subscribers as $subscriber) {
if (self::subscriber_receives_discussion($forum, $discussion, $subscriber)) {
$discussionusers[$subscriber->id] = $subscriber;
}
}
while ($list->next_post($post, $inreplyto)) {
// Loop through all digest users
foreach ($discussionusers as $user) {
// Add to digest. (This will set up the user's
// digest if they don't already have one)
self::digest_add_post_for_user($user, $userdigests, $post, $inreplyto, $discussion, $forum, $cm, $course, $context);
}
$postcount++;
}
}
}
if ($oldcourse) {
self::digest_finish_course($oldcourse, $userdigests);
}
$queryinfo = '';
if (!empty($PERF->dbqueries)) {
$queryinfo = ', ' . ($PERF->dbqueries - $beforequeries) . ' queries';
}
$totalpostcount = $list->get_post_count_so_far();
mtrace("Digest processing ({$totalpostcount} new digest posts) complete, total: " . round(microtime(true) - $before, 1) . 's' . $queryinfo);
}
示例11: create_skillsmanagement
public function create_skillsmanagement($userid, $testing_mode)
{
global $DB, $CFG;
require_once $CFG->dirroot . '/user/profile/lib.php';
require_once $CFG->dirroot . '/user/lib.php';
require_once $CFG->dirroot . '/blocks/exacomp/lib/lib.php';
$user = $DB->get_record('user', ['id' => $userid]);
if (!$user) {
throw new moodle_exception('user not found');
}
/*CREATE COURSE CATEGORY*/
//check if course category has already been created
$category_already_exists = false;
$max_sort = 0;
$categoryid = 0;
$category_sortoder = 0;
$categorycontext = 0;
$categorycontextpath = '';
$course_categories = $DB->get_records('course_categories');
foreach ($course_categories as $category) {
if (strcmp($category->name, 'Skillmanagement') == 0) {
$category_already_exists = true;
$categoryid = $category->id;
$category_sortoder = $category->sortorder;
$context = $DB->get_record('context', array('instanceid' => $categoryid, 'contextlevel' => 40));
$categorycontext = $context->id;
$categorycontextpath = $context->path;
} elseif ($category->sortorder > $max_sort) {
$max_sort = $category->sortorder;
}
}
//if not->create
if (!$category_already_exists) {
/*INSERT IN COURSE_CATEGORIES*/
$insert = new stdClass();
$insert->name = 'Skillmanagement';
$insert->description = '<p>Dieser Kursbereich wird für automatisch generierte Kurse von Skillmanagement verwendet.</p>';
$insert->descriptionformat = 1;
$insert->sortorder = $max_sort + 10000;
$insert->timemodified = time();
$insert->depth = 1;
$insertedid = $DB->insert_record('course_categories', $insert);
$inserted = $DB->get_record('course_categories', array('id' => $insertedid));
$categoryid = $inserted->id;
$category_sortoder = $inserted->sortorder;
$update = new stdClass();
$update->id = $inserted->id;
$update->path = '/' . $inserted->id;
$DB->update_record('course_categories', $update);
/*INSERT IN CONTEXT*/
$insert = new stdClass();
$insert->contextlevel = 40;
$insert->instanceid = $inserted->id;
$insert->depth = 2;
$insertedid = $DB->insert_record('context', $insert);
$inserted = $DB->get_record('context', array('id' => $insertedid));
$categorycontext = $inserted->id;
$categorycontextpath = '/1/' . $inserted->id;
$update = new stdClass();
$update->id = $inserted->id;
$update->path = '/1/' . $inserted->id;
$DB->update_record('context', $update);
}
/*TESTED AND WORKING CORRECTLY TILL HERE*/
$user_course = $DB->get_record('course', ['shortname' => 'SKILLSMGMT-' . $user->id]);
if (!$user_course) {
$categorycourses = $DB->get_records_sql('SELECT * FROM {course} WHERE category=?', array($categoryid));
/*CREATE COURSE*/
//insert in course-table
$insert = new stdClass();
$insert->category = $categoryid;
$insert->sortorder = $category_sortoder + count($categorycourses) + 1;
$insert->fullname = 'Skillsmanagement_' . $user->id . '_' . $user->lastname;
$insert->shortname = 'SKILLSMGMT-' . $user->id;
$insert->format = 'weeks';
$insert->summaryformat = 1;
$insert->startdate = time();
$insert->timecreated = time();
$insert->timemodified = time();
$insert->cacherev = time();
$user_course = create_course($insert);
/*CREATE EXABIS BLOCK INSTANCES IN COURSE*/
$page = new moodle_page();
$page->set_course($user_course);
$page->blocks->add_region('side-post');
$page->blocks->add_block('exacomp', 'side-post', 4, false, 'course-view-*');
$page->blocks->add_block('exaport', 'side-post', 4, false, 'course-view-*');
$page->blocks->add_block('exastud', 'side-post', 4, false, 'course-view-*');
/*CREATE COURSE DESCRIPTION*/
$label = new stdClass();
$label->intro = get_string('course_description', 'auth_skillmanagement');
$label->intro .= html_writer::empty_tag('br');
$label->intro .= html_writer::empty_tag('img', array('src' => new moodle_url('/auth/skillmanagement/pix/intro.png'), 'alt' => 'intro'));
$label->course = $user_course->id;
$label->introformat = 1;
$labelid = label_add_instance($label);
/*CREATE COURSE MODULE*/
$label_module = $DB->get_record('modules', array('name' => 'label'));
$section = $DB->get_record('course_sections', array('course' => $user_course->id, 'section' => 0));
$cm = new stdClass();
//.........这里部分代码省略.........