. /** * 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); $ch = check_browser_version('Chrome', 6); if (!$ie && !$ff && !$op && !$sa && !$ch) { /** @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, $DB; $blocksoutput = $output = ''; for ($i=0; $iblocks); $i++) { $blocksoutput .= "['".$this->blocks[$i][0]."', '".$this->blocks[$i][1]."', '".$this->blocks[$i][2]."']"; if ($i != (count($this->blocks) - 1)) { $blocksoutput .= ','; } } $output .= ""; if ($return) { return $output; } else { echo $output; } } }