function display() { global $PAGE, $COURSE; $editing = $PAGE->user_is_editing(); $pageblocks = page_blocks_setup(); /// Make sure we can see this page if (!($this->page->display & DISP_PUBLISH) and !(has_capability('format/page:editpages', $this->context) and $editing)) { error(get_string('thispageisnotpublished', 'format_page')); } /// Finally, we can print the page if ($editing) { $PAGE->print_tabs('layout'); page_print_jump_menu(); page_print_add_mods_form($this->page, $COURSE); $class = 'format-page editing'; } else { $class = 'format-page'; } echo '<table id="layout-table" class="' . $class . '" cellspacing="0" summary="' . get_string('layouttable') . '">'; /// Check if the page is locked, if so, print lock message, otherwise print three columns if (page_is_locked($this->page)) { echo '<tr><td colspan="3">'; page_print_lock_prerequisites($this->page); echo '</tr></td>'; } else { echo '<tr>'; if (blocks_have_content($pageblocks, BLOCK_POS_LEFT)) { page_print_position($pageblocks, BLOCK_POS_LEFT, $this->page->prefleftwidth); } page_print_position($pageblocks, BLOCK_POS_CENTER, '100%'); if (blocks_have_content($pageblocks, BLOCK_POS_RIGHT)) { page_print_position($pageblocks, BLOCK_POS_RIGHT, $this->page->prefrightwidth); } echo '</tr>'; } /// Silently attempts to call a function from the block_recent_history block @block_method_result('recent_history', 'block_recent_history_record', $this->page); /// Display navigation buttons if ($this->page->showbuttons) { $nav = page_get_next_previous_pages($this->page->id, $this->page->courseid); $buttons = ''; if ($nav->prev and $this->page->showbuttons & BUTTON_PREV) { $title = get_string('previous', 'format_page', page_get_name($nav->prev)); $buttons .= '<span class="prevpage"><a href="' . $PAGE->url_build('page', $nav->prev->id) . "\" title=\"{$title}\">{$title}</a></span>"; } if ($nav->next and $this->page->showbuttons & BUTTON_NEXT) { $title = get_string('next', 'format_page', page_get_name($nav->next)); $buttons .= '<span class="nextpage"><a href="' . $PAGE->url_build('page', $nav->next->id) . "\" title=\"{$title}\">{$title}</a></span>"; } // Make sure we have something to print if (!empty($buttons)) { echo "\n<tr><td></td><td>{$buttons}</td><td></td></tr>\n"; } } echo '</table>'; }
/** * Returns array of relevant context capability records. * * @return array */ public function get_capabilities() { global $DB; $sort = 'ORDER BY contextlevel,component,name'; // To group them sensibly for display $params = array(); $bi = $DB->get_record('block_instances', array('id' => $this->_instanceid)); $extra = ''; $extracaps = block_method_result($bi->blockname, 'get_extra_capabilities'); if ($extracaps) { list($extra, $params) = $DB->get_in_or_equal($extracaps, SQL_PARAMS_NAMED, 'cap'); $extra = "OR name {$extra}"; } $sql = "SELECT *\n FROM {capabilities}\n WHERE (contextlevel = " . CONTEXT_BLOCK . "\n AND component = :component)\n {$extra}"; $params['component'] = 'block_' . $bi->blockname; return $DB->get_records_sql($sql . ' ' . $sort, $params); }
public function process_block($data) { global $DB, $CFG; $data = (object)$data; // Handy $oldcontextid = $data->contextid; $oldid = $data->id; $positions = isset($data->block_positions['block_position']) ? $data->block_positions['block_position'] : array(); // Look for the parent contextid if (!$data->parentcontextid = $this->get_mappingid('context', $data->parentcontextid)) { throw new restore_step_exception('restore_block_missing_parent_ctx', $data->parentcontextid); } // TODO: it would be nice to use standard plugin supports instead of this instance_allow_multiple() // If there is already one block of that type in the parent context // and the block is not multiple, stop processing // Use blockslib loader / method executor if (!block_method_result($data->blockname, 'instance_allow_multiple')) { if ($DB->record_exists_sql("SELECT bi.id FROM {block_instances} bi JOIN {block} b ON b.name = bi.blockname WHERE bi.parentcontextid = ? AND bi.blockname = ?", array($data->parentcontextid, $data->blockname))) { return false; } } // If there is already one block of that type in the parent context // with the same showincontexts, pagetypepattern, subpagepattern, defaultregion and configdata // stop processing $params = array( 'blockname' => $data->blockname, 'parentcontextid' => $data->parentcontextid, 'showinsubcontexts' => $data->showinsubcontexts, 'pagetypepattern' => $data->pagetypepattern, 'subpagepattern' => $data->subpagepattern, 'defaultregion' => $data->defaultregion); if ($birecs = $DB->get_records('block_instances', $params)) { foreach($birecs as $birec) { if ($birec->configdata == $data->configdata) { return false; } } } // Set task old contextid, blockid and blockname once we know them $this->task->set_old_contextid($oldcontextid); $this->task->set_old_blockid($oldid); $this->task->set_blockname($data->blockname); // Let's look for anything within configdata neededing processing // (nulls and uses of legacy file.php) if ($attrstotransform = $this->task->get_configdata_encoded_attributes()) { $configdata = (array)unserialize(base64_decode($data->configdata)); foreach ($configdata as $attribute => $value) { if (in_array($attribute, $attrstotransform)) { $configdata[$attribute] = $this->contentprocessor->process_cdata($value); } } $data->configdata = base64_encode(serialize((object)$configdata)); } // Create the block instance $newitemid = $DB->insert_record('block_instances', $data); // Save the mapping (with restorefiles support) $this->set_mapping('block_instance', $oldid, $newitemid, true); // Create the block context $newcontextid = get_context_instance(CONTEXT_BLOCK, $newitemid)->id; // Save the block contexts mapping and sent it to task $this->set_mapping('context', $oldcontextid, $newcontextid); $this->task->set_contextid($newcontextid); $this->task->set_blockid($newitemid); // Restore block fileareas if declared $component = 'block_' . $this->task->get_blockname(); foreach ($this->task->get_fileareas() as $filearea) { // Simple match by contextid. No itemname needed $this->add_related_files($component, $filearea, null); } // Process block positions, creating them or accumulating for final step foreach($positions as $position) { $position = (object)$position; $position->blockinstanceid = $newitemid; // The instance is always the restored one // If position is for one already mapped (known) contextid // process it now, creating the position if ($newpositionctxid = $this->get_mappingid('context', $position->contextid)) { $position->contextid = $newpositionctxid; // Create the block position $DB->insert_record('block_positions', $position); // The position belongs to an unknown context, send it to backup_ids // to process them as part of the final steps of restore. We send the // whole $position object there, hence use the low level method. } else { restore_dbops::set_backup_ids_record($this->get_restoreid(), 'block_position', $position->id, 0, null, $position); } } }
function blocks_execute_action($page, &$pageblocks, $blockaction, $instanceorid, $pinned = false, $redirect = true) { global $CFG; if (is_int($instanceorid)) { $blockid = $instanceorid; } else { if (is_object($instanceorid)) { $instance = $instanceorid; } } switch ($blockaction) { case 'config': global $USER; $block = blocks_get_record($instance->blockid); // Hacky hacky tricky stuff to get the original human readable block title, // even if the block has configured its title to be something else. // Create the object WITHOUT instance data. $blockobject = block_instance($block->name); if ($blockobject === false) { break; } // First of all check to see if the block wants to be edited if (!$blockobject->user_can_edit()) { break; } // Now get the title and AFTER that load up the instance $blocktitle = $blockobject->get_title(); $blockobject->_load_instance($instance); optional_param('submitted', 0, PARAM_INT); // Define the data we're going to silently include in the instance config form here, // so we can strip them from the submitted data BEFORE serializing it. $hiddendata = array('sesskey' => $USER->sesskey, 'instanceid' => $instance->id, 'blockaction' => 'config'); // To this data, add anything the page itself needs to display $hiddendata = array_merge($hiddendata, $page->url_get_parameters()); if ($data = data_submitted()) { $remove = array_keys($hiddendata); foreach ($remove as $item) { unset($data->{$item}); } if (!$blockobject->instance_config_save($data, $pinned)) { error('Error saving block configuration'); } // And nothing more, continue with displaying the page } else { // We need to show the config screen, so we highjack the display logic and then die $strheading = get_string('blockconfiga', 'moodle', $blocktitle); $page->print_header(get_string('pageheaderconfigablock', 'moodle'), array($strheading => '')); echo '<div class="block-config" id="' . $block->name . '">'; /// Make CSS easier print_heading($strheading); echo '<form method="post" name="block-config" action="' . $page->url_get_path() . '">'; echo '<p>'; foreach ($hiddendata as $name => $val) { echo '<input type="hidden" name="' . $name . '" value="' . $val . '" />'; } echo '</p>'; $blockobject->instance_config_print(); echo '</form>'; echo '</div>'; $CFG->pagepath = 'blocks/' . $block->name; print_footer(); die; // Do not go on with the other page-related stuff } break; case 'toggle': if (empty($instance)) { error('Invalid block instance for ' . $blockaction); } $instance->visible = $instance->visible ? 0 : 1; if (!empty($pinned)) { update_record('block_pinned', $instance); } else { update_record('block_instance', $instance); } break; case 'delete': if (empty($instance)) { error('Invalid block instance for ' . $blockaction); } blocks_delete_instance($instance, $pinned); break; case 'moveup': if (empty($instance)) { error('Invalid block instance for ' . $blockaction); } if ($instance->weight == 0) { // The block is the first one, so a move "up" probably means it changes position // Where is the instance going to be moved? $newpos = $page->blocks_move_position($instance, BLOCK_MOVE_UP); $newweight = empty($pageblocks[$newpos]) ? 0 : max(array_keys($pageblocks[$newpos])) + 1; blocks_execute_repositioning($instance, $newpos, $newweight, $pinned); } else { // The block is just moving upwards in the same position. // This configuration will make sure that even if somehow the weights // become not continuous, block move operations will eventually bring // the situation back to normal without printing any warnings. if (!empty($pageblocks[$instance->position][$instance->weight - 1])) { //define instance's position in the array foreach ($pageblocks[$instance->position] as $instancekeysindex => $index) { if ($pageblocks[$instance->position][$instancekeysindex]->id == $instance->id) { $instanceindex = $instancekeysindex; } } $other = $pageblocks[$instance->position][$instanceindex - 1]; } if (!empty($other)) { ++$other->weight; if (!empty($pinned)) { update_record('block_pinned', $other); } else { update_record('block_instance', $other); } } --$instance->weight; if (!empty($pinned)) { update_record('block_pinned', $instance); } else { update_record('block_instance', $instance); } } break; case 'movedown': if (empty($instance)) { error('Invalid block instance for ' . $blockaction); } if ($instance->weight == max(array_keys($pageblocks[$instance->position]))) { // The block is the last one, so a move "down" probably means it changes position // Where is the instance going to be moved? $newpos = $page->blocks_move_position($instance, BLOCK_MOVE_DOWN); $newweight = empty($pageblocks[$newpos]) ? 0 : max(array_keys($pageblocks[$newpos])) + 1; blocks_execute_repositioning($instance, $newpos, $newweight, $pinned); } else { // The block is just moving downwards in the same position. // This configuration will make sure that even if somehow the weights // become not continuous, block move operations will eventually bring // the situation back to normal without printing any warnings. if (!empty($pageblocks[$instance->position][$instance->weight + 1])) { //define instance's position in the array foreach ($pageblocks[$instance->position] as $instancekeysindex => $index) { if ($pageblocks[$instance->position][$instancekeysindex]->id == $instance->id) { $instanceindex = $instancekeysindex; } } $other = $pageblocks[$instance->position][$instanceindex + 1]; } if (!empty($other)) { --$other->weight; if (!empty($pinned)) { update_record('block_pinned', $other); } else { update_record('block_instance', $other); } } ++$instance->weight; if (!empty($pinned)) { update_record('block_pinned', $instance); } else { update_record('block_instance', $instance); } } break; case 'moveleft': if (empty($instance)) { error('Invalid block instance for ' . $blockaction); } // Where is the instance going to be moved? $newpos = $page->blocks_move_position($instance, BLOCK_MOVE_LEFT); $newweight = 0; if (!empty($pinned) && !empty($pageblocks[$newpos])) { $newweight = $pageblocks[$newpos][max(array_keys($pageblocks[$newpos]))]->weight + 1; } else { if (!empty($pageblocks[$newpos]) && !array_key_exists('pinned', $pageblocks[$newpos][max(array_keys($pageblocks[$newpos]))])) { $newweight = $pageblocks[$newpos][max(array_keys($pageblocks[$newpos]))]->weight + 1; } } blocks_execute_repositioning($instance, $newpos, $newweight, $pinned); break; case 'moveright': if (empty($instance)) { error('Invalid block instance for ' . $blockaction); } // Where is the instance going to be moved? $newpos = $page->blocks_move_position($instance, BLOCK_MOVE_RIGHT); $newweight = 0; if (!empty($pinned) && !empty($pageblocks[$newpos])) { $newweight = $pageblocks[$newpos][max(array_keys($pageblocks[$newpos]))]->weight + 1; } else { if (!empty($pageblocks[$newpos]) && !array_key_exists('pinned', $pageblocks[$newpos][max(array_keys($pageblocks[$newpos]))])) { $newweight = $pageblocks[$newpos][max(array_keys($pageblocks[$newpos]))]->weight + 1; } } blocks_execute_repositioning($instance, $newpos, $newweight, $pinned); break; case 'add': // Add a new instance of this block, if allowed $block = blocks_get_record($blockid); if (empty($block) || !$block->visible) { // Only allow adding if the block exists and is enabled break; } if (!$block->multiple && blocks_find_block($blockid, $pageblocks) !== false) { // If no multiples are allowed and we already have one, return now break; } if (!block_method_result($block->name, 'user_can_addto', $page)) { // If the block doesn't want to be added... break; } $newpos = $page->blocks_default_position(); if (!empty($pinned)) { $sql = 'SELECT 1, max(weight) + 1 AS nextfree FROM ' . $CFG->prefix . 'block_pinned WHERE ' . ' pagetype = \'' . $page->get_type() . '\' AND position = \'' . $newpos . '\''; } else { $sql = 'SELECT 1, max(weight) + 1 AS nextfree FROM ' . $CFG->prefix . 'block_instance WHERE pageid = ' . $page->get_id() . ' AND pagetype = \'' . $page->get_type() . '\' AND position = \'' . $newpos . '\''; } $weight = get_record_sql($sql); $newinstance = new stdClass(); $newinstance->blockid = $blockid; if (empty($pinned)) { $newinstance->pageid = $page->get_id(); } $newinstance->pagetype = $page->get_type(); $newinstance->position = $newpos; $newinstance->weight = empty($weight->nextfree) ? 0 : $weight->nextfree; $newinstance->visible = 1; $newinstance->configdata = ''; if (!empty($pinned)) { $newinstance->id = insert_record('block_pinned', $newinstance); } else { $newinstance->id = insert_record('block_instance', $newinstance); } // If the new instance was created, allow it to do additional setup if ($newinstance && ($obj = block_instance($block->name, $newinstance))) { // Return value ignored $obj->instance_create(); } break; } if ($redirect) { // In order to prevent accidental duplicate actions, redirect to a page with a clean url redirect($page->url_get_full()); } }
* Copyright (C) 2009 Moodlerooms Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 this program. If not, see http://opensource.org/licenses/gpl-3.0.html. * * @copyright Copyright (c) 2009 Moodlerooms Inc. (http://www.moodlerooms.com) * @license http://opensource.org/licenses/gpl-3.0.html GNU Public License * @author Mark Nielsen */ /** * Serves pages for the Google Data Block * * @author Mark Nielsen * @version $Id$ * @package block_gdata **/ require_once '../../config.php'; require_once $CFG->libdir . '/blocklib.php'; $PAGE->set_url($CFG->wwwroot . '/blocks/gdata/index.php'); block_method_result('gdata', 'view');
/** * Extracts the relevant capabilities given a contextid. * All case based, example an instance of forum context. * Will fetch all forum related capabilities, while course contexts * Will fetch all capabilities * @param object context * @return array(); * * capabilities * `name` varchar(150) NOT NULL, * `captype` varchar(50) NOT NULL, * `contextlevel` int(10) NOT NULL, * `component` varchar(100) NOT NULL, */ function fetch_context_capabilities($context) { global $DB, $CFG; $sort = 'ORDER BY contextlevel,component,name'; // To group them sensibly for display $params = array(); switch ($context->contextlevel) { case CONTEXT_SYSTEM: // all $SQL = "SELECT *\n FROM {capabilities}"; break; case CONTEXT_USER: $extracaps = array('moodle/grade:viewall'); list($extra, $params) = $DB->get_in_or_equal($extracaps, SQL_PARAMS_NAMED, 'cap0'); $SQL = "SELECT *\n FROM {capabilities}\n WHERE contextlevel = " . CONTEXT_USER . "\n OR name {$extra}"; break; case CONTEXT_COURSECAT: // course category context and bellow $SQL = "SELECT *\n FROM {capabilities}\n WHERE contextlevel IN (" . CONTEXT_COURSECAT . "," . CONTEXT_COURSE . "," . CONTEXT_MODULE . "," . CONTEXT_BLOCK . ")"; break; case CONTEXT_COURSE: // course context and bellow $SQL = "SELECT *\n FROM {capabilities}\n WHERE contextlevel IN (" . CONTEXT_COURSE . "," . CONTEXT_MODULE . "," . CONTEXT_BLOCK . ")"; break; case CONTEXT_MODULE: // mod caps $cm = $DB->get_record('course_modules', array('id' => $context->instanceid)); $module = $DB->get_record('modules', array('id' => $cm->module)); $modfile = "{$CFG->dirroot}/mod/{$module->name}/lib.php"; if (file_exists($modfile)) { include_once $modfile; $modfunction = $module->name . '_get_extra_capabilities'; if (function_exists($modfunction)) { $extracaps = $modfunction(); } } if (empty($extracaps)) { $extracaps = array(); } // All modules allow viewhiddenactivities. This is so you can hide // the module then override to allow specific roles to see it. // The actual check is in course page so not module-specific $extracaps[] = "moodle/course:viewhiddenactivities"; list($extra, $params) = $DB->get_in_or_equal($extracaps, SQL_PARAMS_NAMED, 'cap0'); $extra = "OR name {$extra}"; $SQL = "SELECT *\n FROM {capabilities}\n WHERE (contextlevel = " . CONTEXT_MODULE . "\n AND component = :component)\n {$extra}"; $params['component'] = "mod/{$module->name}"; break; case CONTEXT_BLOCK: // block caps $bi = $DB->get_record('block_instances', array('id' => $context->instanceid)); $extra = ''; $extracaps = block_method_result($bi->blockname, 'get_extra_capabilities'); if ($extracaps) { list($extra, $params) = $DB->get_in_or_equal($extracaps, SQL_PARAMS_NAMED, 'cap0'); $extra = "OR name {$extra}"; } $SQL = "SELECT *\n FROM {capabilities}\n WHERE (contextlevel = " . CONTEXT_BLOCK . "\n AND component = :component)\n {$extra}"; $params['component'] = 'block/' . $bi->blockname; break; default: return false; } if (!($records = $DB->get_records_sql($SQL . ' ' . $sort, $params))) { $records = array(); } return $records; }
/** * The list of block types that may be added to this page. * * @return array block name => record from block table. */ public function get_addable_blocks() { $this->check_is_loaded(); if (!is_null($this->addableblocks)) { return $this->addableblocks; } // Lazy load. $this->addableblocks = array(); $allblocks = blocks_get_record(); if (empty($allblocks)) { return $this->addableblocks; } $pageformat = $this->page->pagetype; foreach ($allblocks as $block) { if ($block->visible && (block_method_result($block->name, 'instance_allow_multiple') || !$this->is_block_present($block->name)) && blocks_name_allowed_in_format($block->name, $pageformat) && block_method_result($block->name, 'user_can_addto', $this->page)) { $this->addableblocks[$block->name] = $block; } } return $this->addableblocks; }
/** * Same functionality as blocks_execute_url_action() * Handle all block actions ourselves. * * @param boolean $redirect (Optional) Redirect after action * @return void **/ function page_blocks_execute_url_action($redirect = true) { global $CFG, $COURSE, $PAGE; $pageitemid = optional_param('pageitemid', 0, PARAM_INT); $blockaction = optional_param('blockaction', '', PARAM_ALPHA); // Reasons to stop right meow if (empty($blockaction) || !$PAGE->user_allowed_editing() || !confirm_sesskey()) { return; } // Make sure if we have a valid pageitem. if ($pageitemid and !($pageitem = get_record('format_page_items', 'id', $pageitemid))) { return; } switch ($blockaction) { case 'config': if (empty($pageitem->blockinstance) and !empty($pageitem->cmid)) { // Its a module - go to module update redirect("{$CFG->wwwroot}/course/mod.php?update={$pageitem->cmid}&sesskey=" . sesskey()); } else { if (!empty($pageitem->blockinstance)) { // Its a block instance - allow core routine to handle redirect($PAGE->url_build('instanceid', $pageitem->blockinstance, 'blockaction', 'config', 'sesskey', sesskey())); } else { error('Invalid page item to configure'); } } break; case 'toggle': $update = new stdClass(); $update->id = $pageitem->id; if (empty($pageitem->visible)) { $update->visible = 1; } else { $update->visible = 0; } update_record('format_page_items', $update); break; case 'delete': page_block_delete($pageitem); break; case 'moveup': page_block_move($pageitem, $pageitem->position, $pageitem->sortorder - 1); break; case 'movedown': page_block_move($pageitem, $pageitem->position, $pageitem->sortorder + 1); break; case 'moveright': $destposition = $PAGE->blocks_move_position($pageitem, BLOCK_MOVE_RIGHT); $destweight = page_get_next_weight($pageitem->pageid, $destposition); page_block_move($pageitem, $destposition, $destweight); break; case 'moveleft': $destposition = $PAGE->blocks_move_position($pageitem, BLOCK_MOVE_LEFT); $destweight = page_get_next_weight($pageitem->pageid, $destposition); page_block_move($pageitem, $destposition, $destweight); break; case 'addmod': // Right now, modules are added differently $instance = required_param('instance', PARAM_INT); $record = new stdClass(); $record->pageid = $PAGE->formatpage->id; $record->cmid = $instance; $record->blockinstance = 0; $record->position = $PAGE->blocks_default_position(); $record->sortorder = page_get_next_weight($record->pageid, $record->position); insert_record('format_page_items', $record); break; case 'add': // Add a block instance and a pageitem $blockid = required_param('blockid', PARAM_INT); $block = blocks_get_record($blockid); if (empty($block) or !$block->visible) { break; } if (!block_method_result($block->name, 'user_can_addto', $PAGE)) { break; } // Add a block instance if one does not already exist or if the block allows multiple block instances $exists = record_exists('block_instance', 'pageid', $PAGE->get_id(), 'pagetype', $PAGE->get_type(), 'blockid', $blockid); if ($block->multiple || !$exists) { // Get the next weight value NOTE: hard code left position $weight = get_record_sql('SELECT 1, MAX(weight) + 1 ' . sql_as() . ' nextfree FROM ' . $CFG->prefix . 'block_instance WHERE pageid = ' . $PAGE->get_id() . ' AND pagetype = \'' . $PAGE->get_type() . '\' AND position = \'' . BLOCK_POS_LEFT . '\''); if (empty($weight->nextfree)) { $weight->nextfree = 0; } $newinstance = new stdClass(); $newinstance->blockid = $blockid; $newinstance->pageid = $PAGE->get_id(); $newinstance->pagetype = $PAGE->get_type(); $newinstance->position = BLOCK_POS_LEFT; // Make sure we keep them all in same column $newinstance->weight = $weight->nextfree; $newinstance->visible = 1; $newinstance->configdata = ''; $instanceid = $newinstance->id = insert_record('block_instance', $newinstance); if ($newinstance and $obj = block_instance($block->name, $newinstance)) { // Return value ignored $obj->instance_create(); } } else { if ($exists) { // Get the existing blockinstance as the block only allows one instance. $instanceid = get_field('block_instance', 'id', 'pageid', $PAGE->get_id(), 'pagetype', $PAGE->get_type(), 'blockid', $blockid); } } if (!empty($instanceid)) { // Create a new page item that links to the instance $record = new stdClass(); $record->pageid = $PAGE->formatpage->id; $record->cmid = 0; $record->blockinstance = $instanceid; $record->position = $PAGE->blocks_default_position(); $record->sortorder = page_get_next_weight($record->pageid, $record->position); insert_record('format_page_items', $record); } break; } if ($redirect) { // In order to prevent accidental duplicate actions, redirect to a page with a clean url redirect($PAGE->url_get_full()); } }
/** * Gets the tab menu from the course_menu block * * @return mixed **/ function page_theme_get_tab_menu() { global $CFG, $COURSE; static $tabmenus; if (!isset($tabmenus)) { $tabmenus = array(); if ($pagemenus = get_records_sql("SELECT c.id, c.instance, c.visible, p.name\n FROM {$CFG->prefix}pagemenu p,\n {$CFG->prefix}course_modules c,\n {$CFG->prefix}modules m\n WHERE c.instance = p.id\n AND m.id = c.module\n AND m.name = 'pagemenu'\n AND p.course = {$COURSE->id}\n AND p.useastab = 1\n ORDER BY p.taborder, p.name")) { require_once $CFG->dirroot . '/mod/pagemenu/locallib.php'; if ($menuinfos = pagemenu_build_menus($pagemenus, true, true, $COURSE->id)) { $count = 0; foreach ($menuinfos as $cmid => $menuinfo) { if (isset($menuinfo->menuitems[0])) { $tablink = $menuinfo->menuitems[0]->url; } else { $tablink = '#'; } $tabmenu = new stdClass(); $tabmenu->active = $menuinfo->active; $tabmenu->id = 'menutree' . $count; $tabmenu->name = format_string($pagemenus[$cmid]->name); $tabmenu->tablink = $tablink; $tabmenu->menuhtml = $menuinfo->html; $tabmenus[] = $tabmenu; $count++; } } } else { // Legacy require_once $CFG->libdir . '/blocklib.php'; require_once $CFG->dirroot . '/course/format/page/lib.php'; if ($tabmenu = block_method_result('course_menu', 'get_tab_menu', 'menutree')) { $tabmenu->id = 'menutree0'; $tabmenu->tablink = '#'; $tabmenu->menuhtml = "<div class=\"bd\">\n{$tabmenu->menuhtml}</div>\n"; $tabmenus[] = $tabmenu; } } } return $tabmenus; }
notify('You do not have permission for RAFL View on this learning path. Please switch back to Standard View.'); echo '</td>'; echo '<td id="right-column"></td>'; echo '</tr>'; } } else { // standard mode /// Layout the whole page as three columns. echo '<tr>'; page_print_position($pageblocks, BLOCK_POS_LEFT, null); page_print_position($pageblocks, BLOCK_POS_CENTER, null); page_print_position($pageblocks, BLOCK_POS_RIGHT, null); echo '</tr>'; } /// Silently attempts to call a function from the block_recent_history block @block_method_result('recent_history', 'block_recent_history_record', $page); /// Display navigation buttons if ($page->showbuttons && !$USER->raflmode) { $nav = page_get_next_previous_pages($page->id, $page->courseid); $buttons = ''; if ($nav->prev and $page->showbuttons & BUTTON_PREV) { $buttons .= '<span class="prevpage"><a href="' . $PAGE->url_build('page', $nav->prev->id) . '">' . get_string('previous', 'format_page', page_get_name($nav->prev)) . '</a></span>'; } if ($completion_link) { $buttons .= '<span class="completion">' . $completion_link . '</span>'; } if ($overview_link) { $buttons .= '<span class="overview">' . $overview_link . '</span>'; } if ($nav->next and $page->showbuttons & BUTTON_NEXT) { $buttons .= '<span class="nextpage"><a href="' . $PAGE->url_build('page', $nav->next->id) . '">' . get_string('next', 'format_page', page_get_name($nav->next)) . '</a></span>';
* @license http://opensource.org/licenses/gpl-3.0.html GNU Public License * @author Mark Nielsen */ /** * Cron file - cannot run this block's * cron on the main cron because it conflicts * with /search/Zend * * @author Mark Nielsen * @version $Id$ * @package blocks_gdata **/ $nomoodlecookie = true; // cookie not needed require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; // global moodle config file. require_once $CFG->libdir . '/blocklib.php'; set_time_limit(0); $starttime = microtime(); $timenow = time(); if ($block = $DB->get_record_select("block", "cron > 0 AND ((? - lastcron) > cron) AND visible = 1 AND name = 'gdata'", array($timenow))) { if (block_method_result('gdata', 'cron_alt')) { if (!$DB->set_field('block', 'lastcron', $timenow, array('id' => $block->id))) { mtrace('Error: could not update timestamp for ' . $block->name); } } } else { mtrace('Not time to run gdata block cron'); } $difftime = microtime_diff($starttime, microtime()); mtrace("Execution took " . $difftime . " seconds");