mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 14:27:22 +01:00
187 lines
7.8 KiB
PHP
187 lines
7.8 KiB
PHP
<?php
|
|
|
|
// This file is part of Moodle - http://moodle.org/
|
|
//
|
|
// Moodle 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.
|
|
//
|
|
// 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/>.
|
|
|
|
|
|
/**
|
|
* Library functions to facilitate the use of ajax JavaScript in Moodle.
|
|
*
|
|
* @package moodlecore
|
|
* @copyright 2009 Tim Hunt
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
|
|
/**
|
|
* You need to call this function if you wish to use the set_user_preference
|
|
* method in javascript_static.php, to white-list the preference you want to update
|
|
* from JavaScript, and to specify the type of cleaning you expect to be done on
|
|
* values.
|
|
*
|
|
* @param string $name the name of the user_perference we should allow to be
|
|
* updated by remote calls.
|
|
* @param integer $paramtype one of the PARAM_{TYPE} constants, user to clean
|
|
* submitted values before set_user_preference is called.
|
|
* @return void
|
|
*/
|
|
function user_preference_allow_ajax_update($name, $paramtype) {
|
|
global $USER, $PAGE;
|
|
|
|
// Make sure that the required JavaScript libraries are loaded.
|
|
$PAGE->requires->yui2_lib('connection');
|
|
|
|
// Record in the session that this user_preference is allowed to updated remotely.
|
|
$USER->ajax_updatable_user_prefs[$name] = $paramtype;
|
|
}
|
|
|
|
/**
|
|
* Returns whether ajax is enabled/allowed or not.
|
|
* @param array $browsers optional list of alowed browsers, empty means use default list
|
|
* @return bool
|
|
*/
|
|
function ajaxenabled(array $browsers = null) {
|
|
global $CFG, $USER;
|
|
|
|
if (!empty($browsers)) {
|
|
$valid = false;
|
|
foreach ($browsers as $brand => $version) {
|
|
if (check_browser_version($brand, $version)) {
|
|
$valid = true;
|
|
}
|
|
}
|
|
|
|
if (!$valid) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
$ie = check_browser_version('MSIE', 6.0);
|
|
$ff = check_browser_version('Gecko', 20051106);
|
|
$op = check_browser_version('Opera', 9.0);
|
|
$sa = check_browser_version('Safari', 412);
|
|
|
|
if (!$ie && !$ff && !$op && !$sa) {
|
|
/** @see http://en.wikipedia.org/wiki/User_agent */
|
|
// Gecko build 20051107 is what is in Firefox 1.5.
|
|
// We still have issues with AJAX in other browsers.
|
|
return false;
|
|
}
|
|
|
|
if (!empty($CFG->enableajax) && (!empty($USER->ajax) || !isloggedin())) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// ==============================================================================
|
|
// TODO: replace this with something more up-to-date with our coding standards
|
|
|
|
/**
|
|
* Used to create view of document to be passed to JavaScript on pageload.
|
|
* We use this class to pass data from PHP to JavaScript.
|
|
*/
|
|
class jsportal {
|
|
|
|
var $currentblocksection = null;
|
|
var $blocks = array();
|
|
|
|
|
|
/**
|
|
* Takes id of block and adds it
|
|
*/
|
|
function block_add($id, $hidden=false){
|
|
$hidden_binary = 0;
|
|
|
|
if ($hidden) {
|
|
$hidden_binary = 1;
|
|
}
|
|
$this->blocks[count($this->blocks)] = array($this->currentblocksection, $id, $hidden_binary);
|
|
}
|
|
|
|
|
|
/**
|
|
* Prints the JavaScript code needed to set up AJAX for the course.
|
|
*/
|
|
function print_javascript($courseid, $return=false) {
|
|
global $CFG, $USER, $OUTPUT, $COURSE;
|
|
|
|
$blocksoutput = $output = '';
|
|
for ($i=0; $i<count($this->blocks); $i++) {
|
|
$blocksoutput .= "['".$this->blocks[$i][0]."',
|
|
'".$this->blocks[$i][1]."',
|
|
'".$this->blocks[$i][2]."']";
|
|
|
|
if ($i != (count($this->blocks) - 1)) {
|
|
$blocksoutput .= ',';
|
|
}
|
|
}
|
|
$output .= "<script type=\"text/javascript\">\n";
|
|
$output .= " main.portal.id = ".$courseid.";\n";
|
|
$output .= " main.portal.blocks = new Array(".$blocksoutput.");\n";
|
|
$output .= " main.portal.strings['courseformat']='".$COURSE->format."';\n";
|
|
$output .= " main.portal.strings['wwwroot']='".$CFG->wwwroot."';\n";
|
|
$output .= " main.portal.strings['marker']='".get_string('markthistopic', '', '_var_')."';\n";
|
|
$output .= " main.portal.strings['marked']='".get_string('markedthistopic', '', '_var_')."';\n";
|
|
$output .= " main.portal.numsections = ".$COURSE->numsections.";\n";
|
|
$output .= " main.portal.strings['hide']='".get_string('hide')."';\n";
|
|
$output .= " main.portal.strings['hidesection']='".get_string('hidesection', '', '_var_')."';\n";
|
|
$output .= " main.portal.strings['show']='".get_string('show')."';\n";
|
|
$output .= " main.portal.strings['delete']='".get_string('delete')."';\n";
|
|
$output .= " main.portal.strings['move']='".get_string('move')."';\n";
|
|
$output .= " main.portal.strings['movesection']='".get_string('movesection', '', '_var_')."';\n";
|
|
$output .= " main.portal.strings['moveleft']='".get_string('moveleft')."';\n";
|
|
$output .= " main.portal.strings['moveright']='".get_string('moveright')."';\n";
|
|
$output .= " main.portal.strings['update']='".get_string('update')."';\n";
|
|
$output .= " main.portal.strings['groupsnone']='".get_string('groupsnone')."';\n";
|
|
$output .= " main.portal.strings['groupsseparate']='".get_string('groupsseparate')."';\n";
|
|
$output .= " main.portal.strings['groupsvisible']='".get_string('groupsvisible')."';\n";
|
|
$output .= " main.portal.strings['clicktochange']='".get_string('clicktochange')."';\n";
|
|
$output .= " main.portal.strings['deletecheck']='".get_string('deletecheck','','_var_')."';\n";
|
|
$output .= " main.portal.strings['resource']='".get_string('resource')."';\n";
|
|
$output .= " main.portal.strings['activity']='".get_string('activity')."';\n";
|
|
$output .= " main.portal.strings['sesskey']='".sesskey()."';\n";
|
|
$output .= " main.portal.icons['spacerimg']='".$OUTPUT->pix_url('spaces')."';\n";
|
|
$output .= " main.portal.icons['marker']='".$OUTPUT->pix_url('i/marker')."';\n";
|
|
$output .= " main.portal.icons['ihide']='".$OUTPUT->pix_url('i/hide')."';\n";
|
|
$output .= " main.portal.icons['move_2d']='".$OUTPUT->pix_url('i/move_2d')."';\n";
|
|
$output .= " main.portal.icons['show']='".$OUTPUT->pix_url('t/show')."';\n";
|
|
$output .= " main.portal.icons['hide']='".$OUTPUT->pix_url('t/hide')."';\n";
|
|
$output .= " main.portal.icons['delete']='".$OUTPUT->pix_url('t/delete')."';\n";
|
|
$output .= " main.portal.icons['groupn']='".$OUTPUT->pix_url('t/groupn')."';\n";
|
|
$output .= " main.portal.icons['groups']='".$OUTPUT->pix_url('t/groups')."';\n";
|
|
$output .= " main.portal.icons['groupv']='".$OUTPUT->pix_url('t/groupv')."';\n";
|
|
if (right_to_left()) {
|
|
$output .= " main.portal.icons['backwards']='".$OUTPUT->pix_url('t/right')."';\n";
|
|
$output .= " main.portal.icons['forwards']='".$OUTPUT->pix_url('t/left')."';\n";
|
|
} else {
|
|
$output .= " main.portal.icons['backwards']='".$OUTPUT->pix_url('t/left')."';\n";
|
|
$output .= " main.portal.icons['forwards']='".$OUTPUT->pix_url('t/right')."';\n";
|
|
}
|
|
|
|
$output .= " onloadobj.load();\n";
|
|
$output .= " main.process_blocks();\n";
|
|
$output .= "</script>";
|
|
if ($return) {
|
|
return $output;
|
|
} else {
|
|
echo $output;
|
|
}
|
|
}
|
|
|
|
}
|