"; /// Functions function s($var) { /// returns $var with HTML characters (like "<", ">", etc.) properly quoted, if (empty($var)) { return ""; } return htmlSpecialChars(stripslashes_safe($var)); } function p($var) { /// prints $var with HTML characters (like "<", ">", etc.) properly quoted, if (empty($var)) { echo ""; } echo htmlSpecialChars(stripslashes_safe($var)); } function nvl(&$var, $default="") { /// if $var is undefined, return $default, otherwise return $var return isset($var) ? $var : $default; } function strip_querystring($url) { /// takes a URL and returns it without the querystring portion if ($commapos = strpos($url, '?')) { return substr($url, 0, $commapos); } else { return $url; } } function get_referer() { /// returns the URL of the HTTP_REFERER, less the querystring portion return strip_querystring(nvl($_SERVER["HTTP_REFERER"])); } function me() { /// returns the name of the current script, WITH the querystring portion. /// this function is necessary because PHP_SELF and REQUEST_URI and SCRIPT_NAME /// return different things depending on a lot of things like your OS, Web /// server, and the way PHP is compiled (ie. as a CGI, module, ISAPI, etc.) if (!empty($_SERVER["REQUEST_URI"])) { return $_SERVER["REQUEST_URI"]; } else if (!empty($_SERVER["PHP_SELF"])) { if (!empty($_SERVER["QUERY_STRING"])) { return $_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"]; } return $_SERVER["PHP_SELF"]; } else if (!empty($_SERVER["SCRIPT_NAME"])) { if (!empty($_SERVER["QUERY_STRING"])) { return $_SERVER["SCRIPT_NAME"]."?".$_SERVER["QUERY_STRING"]; } return $_SERVER["SCRIPT_NAME"]; } else { notify("Warning: Could not find any of these web server variables: \$REQUEST_URI, \$PHP_SELF or \$SCRIPT_NAME"); return false; } } function qualified_me() { /// like me() but returns a full URL if (!empty($_SERVER["HTTP_HOST"])) { $hostname = $_SERVER["HTTP_HOST"]; } else if (!empty($_ENV["HTTP_HOST"])) { $hostname = $_ENV["HTTP_HOST"]; } else if (!empty($_SERVER["SERVER_NAME"])) { $hostname = $_SERVER["SERVER_NAME"]; } else if (!empty($_ENV["SERVER_NAME"])) { $hostname = $_ENV["SERVER_NAME"]; } else { notify("Warning: could not find the name of this server!"); return false; } $protocol = (isset($_SERVER["HTTPS"]) and $_SERVER["HTTPS"] == "on") ? "https://" : "http://"; $url_prefix = $protocol.$hostname; return $url_prefix . me(); } function match_referer($goodreferer = "") { /// returns true if the referer is the same as the goodreferer. If /// goodreferer is not specified, use qualified_me as the goodreferer global $CFG; if (empty($CFG->secureforms)) { // Don't bother checking referer return true; } if ($goodreferer == "nomatch") { // Don't bother checking referer return true; } if (empty($goodreferer)) { $goodreferer = qualified_me(); } return $goodreferer == get_referer(); } function data_submitted($url="") { /// Used on most forms in Moodle to check for data /// Returns the data as an object, if it's found. /// This object can be used in foreach loops without /// casting because it's cast to (array) automatically /// /// Checks that submitted POST data exists, and also /// checks the referer against the given url (it uses /// the current page if none was specified. global $CFG; if (empty($_POST)) { return false; } else { if (match_referer($url)) { return (object)$_POST; } else { if ($CFG->debug > 10) { notice("The form did not come from this page! (referer = ".get_referer().")"); } return false; } } } function stripslashes_safe($string) { /// stripslashes() removes ALL backslashes even from strings /// so C:\temp becomes C:temp ... this isn't good. /// The following should work as a fairly safe replacement /// to be called on quoted AND unquoted strings (to be sure) $string = str_replace("\\'", "'", $string); $string = str_replace('\\"', '"', $string); $string = str_replace('\\\\', '\\', $string); return $string; } if (!function_exists('str_ireplace')) { function str_ireplace($find, $replace, $string) { /// This does a search and replace, ignoring case /// This function is only here versions of PHP older than version 5 /// may not have a native version of this function. /// Taken from the PHP manual, by bradhuizenga@softhome.net if (!is_array($find)) { $find = array($find); } if(!is_array($replace)) { if (!is_array($find)) { $replace = array($replace); } else { // this will duplicate the string into an array the size of $find $c = count($find); $rString = $replace; unset($replace); for ($i = 0; $i < $c; $i++) { $replace[$i] = $rString; } } } foreach ($find as $fKey => $fItem) { $between = explode(strtolower($fItem),strtolower($string)); $pos = 0; foreach($between as $bKey => $bItem) { $between[$bKey] = substr($string,$pos,strlen($bItem)); $pos += strlen($bItem) + strlen($fItem); } $string = implode($replace[$fKey],$between); } return ($string); } } function read_template($filename, &$var) { /// return a (big) string containing the contents of a template file with all /// the variables interpolated. all the variables must be in the $var[] array or /// object (whatever you decide to use). /// /// WARNING: do not use this on big files!! $temp = str_replace("\\", "\\\\", implode(file($filename), "")); $temp = str_replace('"', '\"', $temp); eval("\$template = \"$temp\";"); return $template; } function checked(&$var, $set_value = 1, $unset_value = 0) { /// if variable is set, set it to the set_value otherwise set it to the /// unset_value. used to handle checkboxes when you are expecting them from /// a form if (empty($var)) { $var = $unset_value; } else { $var = $set_value; } } function frmchecked(&$var, $true_value = "checked", $false_value = "") { /// prints the word "checked" if a variable is true, otherwise prints nothing, /// used for printing the word "checked" in a checkbox form input if ($var) { echo $true_value; } else { echo $false_value; } } function link_to_popup_window ($url, $name="popup", $linkname="click here", $height=400, $width=500, $title="Popup window", $options="none") { /// This will create a HTML link that will work on both /// Javascript and non-javascript browsers. /// Relies on the Javascript function openpopup in javascript.php /// $url must be relative to home page eg /mod/survey/stuff.php global $CFG; if ($options == "none") { $options = "menubar=0,location=0,scrollbars,resizable,width=$width,height=$height"; } $fullscreen = 0; echo "wwwroot$url\" ". "onClick=\"return openpopup('$url', '$name', '$options', $fullscreen);\">$linkname\n"; } function close_window_button() { /// Prints a simple button to close a window echo "\n"; echo "\n"; echo "\n"; echo "<---\n"; echo "\n"; echo "\n"; } function choose_from_menu ($options, $name, $selected="", $nothing="choose", $script="", $nothingvalue="0", $return=false) { /// Given an array of value, creates a popup menu to be part of a form /// $options["value"]["label"] if ($nothing == "choose") { $nothing = get_string("choose")."..."; } if ($script) { $javascript = "onChange=\"$script\""; } else { $javascript = ""; } $output = "\n"; if ($nothing) { $output .= " $label) { $output .= " framename}\" name=\"$formname\">"; $output = "\n"; if ($nothing != "") { $output .= " $nothing\n"; } foreach ($options as $value => $label) { if (substr($label,0,1) == "-") { $output .= " $error"; } } function validate_email ($address) { /// Validates an email to make sure it makes sense. return (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $address)); } function detect_munged_arguments($string) { if (ereg('\.\.', $string)) { // check for parent URLs return true; } if (ereg('[\|\`]', $string)) { // check for other bad characters return true; } return false; } function get_slash_arguments($file="file.php") { /// Searches the current environment variables for some slash arguments if (!$string = me()) { return false; } $pathinfo = explode($file, $string); if (!empty($pathinfo[1])) { return $pathinfo[1]; } else { return false; } } function parse_slash_arguments($string, $i=0) { /// Extracts arguments from "/foo/bar/something" /// eg http://mysite.com/script.php/foo/bar/something if (detect_munged_arguments($string)) { return false; } $args = explode("/", $string); if ($i) { // return just the required argument return $args[$i]; } else { // return the whole array array_shift($args); // get rid of the empty first one return $args; } } function format_text_menu() { /// Just returns an array of formats suitable for a popup menu return array (FORMAT_MOODLE => get_string("formattext"), FORMAT_HTML => get_string("formathtml"), FORMAT_PLAIN => get_string("formatplain"), FORMAT_WIKI => get_string("formatwiki")); } function format_text($text, $format=FORMAT_MOODLE, $options=NULL) { /// Given text in a variety of format codings, this function returns /// the text as safe HTML. /// /// $text is raw text (originally from a user) /// $format is one of the format constants, defined above global $CFG, $course; switch ($format) { case FORMAT_HTML: replace_smilies($text); return filter_text($text); break; case FORMAT_PLAIN: $text = htmlentities($text); $text = str_replace(" ", " ", $text); replace_smilies($text); $text = nl2br($text); return $text; break; case FORMAT_WIKI: $text = wiki_to_html($text); return filter_text($text); break; default: // FORMAT_MOODLE or anything else if (!isset($options->smiley)) { $options->smiley=true; } if (!isset($options->para)) { $options->para=true; } $text = text_to_html($text, $options->smiley, $options->para); return filter_text($text); break; } } function format_text_email($text, $format) { /// Given text in a variety of format codings, this function returns /// the text as plain text suitable for plain email. /// /// $text is raw text (originally from a user) /// $format is one of the format constants, defined above switch ($format) { case FORMAT_PLAIN: return $text; break; case FORMAT_WIKI: $text = wiki_to_html($text); /// This expression turns links into something nice in a text format. (Russell Jungwirth) /// From: http://php.net/manual/en/function.eregi-replace.php and simplified $text = eregi_replace('(]*>([^<]*))','\\3 [\\2]', $text); return strtr(strip_tags($text), array_flip(get_html_translation_table(HTML_ENTITIES))); break; case FORMAT_HTML: return html_to_text($text); break; default: // FORMAT_MOODLE or anything else $text = eregi_replace('(]*>([^<]*))','\\3 [\\2]', $text); return strtr(strip_tags($text), array_flip(get_html_translation_table(HTML_ENTITIES))); break; } } function filter_text($text) { /// Given some text in HTML format, this function will pass it /// through any filters that have been defined in $CFG->textfilterx /// The variable defines a filepath to a file containing the /// filter function. The file must contain a variable called /// $textfilter_function which contains the name of the function /// with $course->id and $text parameters global $CFG, $course; // A dirty hack right now ... should not be assumed global if (empty($course->id)) { return $text; } for ($i=1; $i<=10; $i++) { $variable = "textfilter$i"; if (empty($CFG->$variable)) { /// No more filters return $text; } if (is_readable("$CFG->dirroot/".$CFG->$variable)) { include("$CFG->dirroot/".$CFG->$variable); $text = $textfilter_function($course->id, $text); } } return $text; } function clean_text($text, $format) { /// Given raw text (eg typed in by a user), this function cleans it up /// and removes any nasty tags that could mess up Moodle pages. global $ALLOWED_TAGS; switch ($format) { case FORMAT_MOODLE: case FORMAT_HTML: case FORMAT_WIKI: /// Remove javascript: label $text = strip_tags($text, $ALLOWED_TAGS); /// Remove javascript/VBScript $text = str_ireplace("javascript:", "xxx", $text); /// Remove script events $text = eregi_replace("([^a-z])language([[:space:]]*)=", "xxx", $text); $text = eregi_replace("([^a-z])on([a-z]+)([[:space:]]*)=", "xxx", $text); return $text; case FORMAT_PLAIN: return $text; } } function replace_smilies(&$text) { /// Replaces all known smileys in the text with image equivalents global $CFG; /// this builds the mapping array only once static $runonce = false; static $e = array(); static $img = array(); static $emoticons = array( ':-)' => 'smiley.gif', ':)' => 'smiley.gif', ':-D' => 'biggrin.gif', ';-)' => 'wink.gif', ':-/' => 'mixed.gif', 'V-.' => 'thoughtful.gif', ':-P' => 'tongueout.gif', 'B-)' => 'cool.gif', '^-)' => 'approve.gif', '8-)' => 'wideeyes.gif', ':o)' => 'clown.gif', ':-(' => 'sad.gif', ':(' => 'sad.gif', '8-.' => 'shy.gif', ':-I' => 'blush.gif', ':-X' => 'kiss.gif', '8-o' => 'surprise.gif', 'P-|' => 'blackeye.gif', '8-[' => 'angry.gif', 'xx-P' => 'dead.gif', '|-.' => 'sleepy.gif', '}-]' => 'evil.gif', ); /// this is the meat of the code - this is run every time if ($runonce == false){ foreach ($emoticons as $emoticon => $image){ $e[] = $emoticon; $img[] = "pixpath/s/$image\" />"; } $runonce = true; } $text = str_replace($e, $img, $text); } function text_to_html($text, $smiley=true, $para=true) { /// Given plain text, makes it into HTML as nicely as possible. /// May contain HTML tags already global $CFG; /// Remove any whitespace that may be between HTML tags $text = eregi_replace(">([[:space:]]+)<", "><", $text); /// Remove any returns that precede or follow HTML tags $text = eregi_replace("([\n\r])<", " <", $text); $text = eregi_replace(">([\n\r])", "> ", $text); convert_urls_into_links($text); /// Make returns into HTML newlines. $text = nl2br($text); /// Turn smileys into images. if ($smiley) { replace_smilies($text); } /// Wrap the whole thing in a paragraph tag if required if ($para) { return "".$text.""; } else { return $text; } } function wiki_to_html($text) { /// Given Wiki formatted text, make it into XHTML using external function global $CFG; require_once("$CFG->libdir/wiki.php"); $wiki = new Wiki; return $wiki->format($text); } function html_to_text($html) { /// Given HTML text, make it into plain text using external function require_once("$CFG->libdir/html2text.php"); return html2text($html); } function convert_urls_into_links(&$text) { /// Given some text, it converts any URLs it finds into HTML links. /// Make lone URLs into links. eg http://moodle.com/ $text = eregi_replace("([[:space:]]|^|\(|\[)([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", "\\1\\2://\\3\\4", $text); /// eg www.moodle.com $text = eregi_replace("([[:space:]]|^|\(|\[)www\.([^[:space:]]*)([[:alnum:]#?/&=])", "\\1www.\\2\\3", $text); } function highlight($needle, $haystack, $case=0, $left_string="", $right_string="") { /// This function will highlight search words in a given string /// It cares about HTML and will not ruin links. It's best to use /// this function after performing any conversions to HTML. /// Function found here: http://forums.devshed.com/t67822/scdaa2d1c3d4bacb4671d075ad41f0854.html $list_of_words = eregi_replace("[^-a-zA-Z0-9&']", " ", $needle); $list_array = explode(" ", $list_of_words); for ($i=0; $i/is',$haystack,$list_of_words); foreach (array_unique($list_of_words[0]) as $key=>$value) { $final['<|'.$key.'|>'] = $value; } $haystack = str_replace($final,array_keys($final),$haystack); $list_of_words_cp = eregi_replace(" +", "|", $list_of_words_cp); if ($list_of_words_cp{0}=="|") { $list_of_words_cp{0} = ""; } if ($list_of_words_cp{strlen($list_of_words_cp)-1}=="|") { $list_of_words_cp{strlen($list_of_words_cp)-1}=""; } $list_of_words_cp = "(".trim($list_of_words_cp).")"; if (!$case){ $haystack = eregi_replace("$list_of_words_cp", "$left_string"."\\1"."$right_string", $haystack); } else { $haystack = ereg_replace("$list_of_words_cp", "$left_string"."\\1"."$right_string", $haystack); } $haystack = str_replace(array_keys($final),$final,$haystack); return stripslashes($haystack); } function highlightfast($needle, $haystack) { /// This function will highlight instances of $needle in $haystack /// It's faster that the above function and doesn't care about /// HTML or anything. $parts = explode(strtolower($needle), strtolower($haystack)); $pos = 0; foreach ($parts as $key => $part) { $parts[$key] = substr($haystack, $pos, strlen($part)); $pos += strlen($part); $parts[$key] .= "".substr($haystack, $pos, strlen($needle)).""; $pos += strlen($needle); } return (join('', $parts)); } /// STANDARD WEB PAGE PARTS /////////////////////////////////////////////////// function print_header ($title="", $heading="", $navigation="", $focus="", $meta="", $cache=true, $button=" ", $menu="", $usexml=false) { // $title - appears top of window // $heading - appears top of page // $navigation - premade navigation string // $focus - indicates form element eg inputform.password // $meta - meta tags in the header // $cache - should this page be cacheable? // $button - HTML code for a button (usually for module editing) // $menu - HTML code for a popup menu // $usexml - use XML for this page global $USER, $CFG, $THEME, $SESSION; if (file_exists("$CFG->dirroot/theme/$CFG->theme/styles.php")) { $styles = $CFG->stylesheet; } else { $styles = "$CFG->wwwroot/theme/standard/styles.php"; } if ($navigation == "home") { $home = true; $navigation = ""; } else { $home = false; } if ($button == "") { $button = " "; } if (!$menu and $navigation) { if (isset($USER->id)) { $menu = "framename\" href=\"$CFG->wwwroot/login/logout.php\">".get_string("logout").""; } else { $menu = "framename\" href=\"$CFG->wwwroot/login/index.php\">".get_string("login").""; } } // Add a stylesheet for the HTML editor $meta = "\n$meta\n"; // Specify character set ... default is iso-8859-1 but some languages might need something else // Could be optimised by carrying the charset variable around in $USER if (current_language() == "en") { $meta = "\n$meta\n"; } else { $meta = "\n$meta\n"; } if ( get_string("thisdirection") == "rtl" ) { $direction = " dir=\"rtl\""; } else { $direction = " dir=\"ltr\""; } if (!$cache) { // Do everything we can to prevent clients and proxies caching @header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); @header("Pragma: no-cache"); $meta .= "\n"; $meta .= "\n"; } if ($usexml) { // Added by Gustav Delius / Mad Alex for MathML output $currentlanguage = current_language(); @header("Content-type: text/xml"); echo "\n"; if (!empty($CFG->xml_stylesheets)) { $stylesheets = explode(";", $CFG->xml_stylesheets); foreach ($stylesheets as $stylesheet) { echo "wwwroot/$stylesheet\" ?>\n"; } } echo "xml_doctype_extra)) { echo " plus $CFG->xml_doctype_extra"; } echo "//" . strtoupper($currentlanguage) . "\" \"$CFG->xml_dtd\">\n"; $direction = " xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"$currentlanguage\" $direction"; } $title = str_replace('"', '"', $title); include ("$CFG->dirroot/theme/$CFG->theme/header.html"); } function print_footer ($course=NULL) { // Can provide a course object to make the footer contain a link to // to the course home page, otherwise the link will go to the site home global $USER, $CFG, $THEME; /// Course links if ($course) { if ($course == "home") { // special case for site home page - please do not remove $homelink = "release ($CFG->version)\" href=\"http://moodle.org/\" target=\"_blank\">"; $homelink .= ""; $course = get_site(); $homepage = true; } else { $homelink = "framename}\" href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->shortname"; } } else { $homelink = "framename}\" href=\"$CFG->wwwroot/\">".get_string("home").""; $course = get_site(); } /// User links $loggedinas = user_login_string($course, $USER); include ("$CFG->dirroot/theme/$CFG->theme/footer.html"); } function style_sheet_setup($lastmodified=0, $lifetime=300, $themename="") { /// This function is called by stylesheets to set up the header /// approriately as well as the current path global $CFG; header("Last-Modified: " . gmdate("D, d M Y H:i:s", $lastmodified) . " GMT"); header("Expires: " . gmdate("D, d M Y H:i:s", time() + $lifetime) . " GMT"); header("Cache-control: max_age = $lifetime"); header("Pragma: "); header("Content-type: text/css"); // Correct MIME type if (!empty($themename)) { $CFG->theme = $themename; } return "$CFG->wwwroot/theme/$CFG->theme"; } function user_login_string($course, $user=NULL) { global $USER, $CFG; if (empty($user)) { $user = $USER; } if (isset($user->realuser)) { if ($realuser = get_record("user", "id", $user->realuser)) { $realuserinfo = " [framename}\" href=\"$CFG->wwwroot/course/loginas.php?id=$course->id&return=$realuser->id\">$realuser->firstname $realuser->lastname] "; } } else { $realuserinfo = ""; } if (isset($user->id) and $user->id) { $username = "framename}\" href=\"$CFG->wwwroot/user/view.php?id=$user->id&course=$course->id\">$user->firstname $user->lastname"; $loggedinas = $realuserinfo.get_string("loggedinas", "moodle", "$username"). " (framename}\" href=\"$CFG->wwwroot/login/logout.php\">".get_string("logout").")"; } else { $loggedinas = get_string("loggedinnot", "moodle"). " (framename}\" href=\"$CFG->wwwroot/login/index.php\">".get_string("login").")"; } return $loggedinas; } function print_navigation ($navigation) { global $CFG; if ($navigation) { if (! $site = get_site()) { $site->shortname = get_string("home");; } echo "framename}\" href=\"$CFG->wwwroot/\">$site->shortname -> $navigation"; } } function print_headline($text, $size=2) { echo "$text\n"; } function print_heading($text, $align="center", $size=3) { echo "".stripslashes_safe($text).""; } function print_heading_with_help($text, $helppage, $module="moodle", $icon="") { // Centered heading with attached help button (same title text) // and optional icon attached echo "$icon".stripslashes_safe($text); helpbutton($helppage, $text, $module); echo ""; } function print_continue($link) { if (!$link) { $link = $_SERVER["HTTP_REFERER"]; } print_heading("".get_string("continue").""); } function print_simple_box($message, $align="", $width="", $color="#FFFFFF", $padding=5, $class="generalbox") { print_simple_box_start($align, $width, $color, $padding, $class); echo stripslashes_safe($message); print_simple_box_end(); } function print_simple_box_start($align="", $width="", $color="#FFFFFF", $padding=5, $class="generalbox") { global $THEME; if ($align) { $align = "align=\"$align\""; } if ($width) { $width = "width=\"$width\""; } echo ""; } function print_simple_box_end() { echo ""; } function print_single_button($link, $options, $label="OK", $method="get") { echo ""; if ($options) { foreach ($options as $name => $value) { echo ""; } } echo ""; } function print_spacer($height=1, $width=1, $br=true) { global $CFG; echo "wwwroot/pix/spacer.gif\" alt=\"\" />"; if ($br) { echo "\n"; } } function print_file_picture($path, $courseid=0, $height="", $width="", $link="") { // Given the path to a picture file in a course, or a URL, // this function includes the picture in the page. global $CFG; if ($height) { $height = "height=\"$height\""; } if ($width) { $width = "width=\"$width\""; } if ($link) { echo ""; } if (substr(strtolower($path), 0, 7) == "http://") { echo ""; } else if ($courseid) { echo "slasharguments) { // Use this method if possible for better caching echo "$CFG->wwwroot/file.php/$courseid/$path"; } else { echo "$CFG->wwwroot/file.php?file=/$courseid/$path"; } echo "\" />"; } else { echo "Error: must pass URL or course"; } if ($link) { echo ""; } } function print_user_picture($userid, $courseid, $picture, $large=false, $returnstring=false, $link=true) { global $CFG, $THEME; if ($link) { $output = "wwwroot/user/view.php?id=$userid&course=$courseid\">"; } else { $output = ""; } if ($large) { $file = "f1"; $size = 100; } else { $file = "f2"; $size = 35; } if ($picture) { // Print custom user picture if ($CFG->slasharguments) { // Use this method if possible for better caching $output .= "wwwroot/user/pix.php/$userid/$file.jpg\"". " border=\"0\" width=\"$size\" height=\"$size\" alt=\"\" />"; } else { $output .= "wwwroot/user/pix.php?file=/$userid/$file.jpg\"". " border=\"0\" width=\"$size\" height=\"$size\" alt=\"\" />"; } } else { // Print default user pictures (use theme version if available) $output .= "pixpath/u/$file.png\"". " border=\"0\" width=\"$size\" height=\"$size\" alt=\"\" />"; } if ($link) { $output .= ""; } if ($returnstring) { return $output; } else { echo $output; } } function print_table($table) { // Prints a nicely formatted table. // $table is an object with several properties. // $table->head is an array of heading names. // $table->align is an array of column alignments // $table->size is an array of column sizes // $table->wrap is an array of "nowrap"s or nothing // $table->data[] is an array of arrays containing the data. // $table->width is an percentage of the page // $table->cellpadding padding on each cell // $table->cellspacing spacing between cells if (isset($table->align)) { foreach ($table->align as $key => $aa) { if ($aa) { $align[$key] = " align=\"$aa\""; } else { $align[$key] = ""; } } } if (isset($table->size)) { foreach ($table->size as $key => $ss) { if ($ss) { $size[$key] = " width=\"$ss\""; } else { $size[$key] = ""; } } } if (isset($table->wrap)) { foreach ($table->wrap as $key => $ww) { if ($ww) { $wrap[$key] = " nowrap=\"nowrap\" "; } else { $wrap[$key] = ""; } } } if (empty($table->width)) { $table->width = "80%"; } if (empty($table->cellpadding)) { $table->cellpadding = "5"; } if (empty($table->cellspacing)) { $table->cellspacing = "1"; } print_simple_box_start("center", "$table->width", "#ffffff", 0); echo "cellpadding\" cellspacing=\"$table->cellspacing\" class=\"generaltable\">\n"; if (!empty($table->head)) { echo ""; foreach ($table->head as $key => $heading) { if (!isset($size[$key])) { $size[$key] = ""; } if (!isset($align[$key])) { $align[$key] = ""; } echo "$heading"; } echo "\n"; } if (!empty($table->data)) { foreach ($table->data as $row) { echo ""; foreach ($row as $key => $item) { if (!isset($size[$key])) { $size[$key] = ""; } if (!isset($align[$key])) { $align[$key] = ""; } if (!isset($wrap[$key])) { $wrap[$key] = ""; } echo "$item"; } echo "\n"; } } echo "\n"; print_simple_box_end(); return true; } function make_table($table) { // Creates a nicely formatted table and returns it // $table is an object with several properties. // $table->head is an array of heading names. // $table->align is an array of column alignments // $table->size is an array of column sizes // $table->wrap is an array of "nowrap"s or nothing // $table->data[] is an array of arrays containing the data. // $table->width is an percentage of the page // $table->class is a class // $table->fontsize is the size of all the text // $table->tablealign align the whole table // $table->cellpadding padding on each cell // $table->cellspacing spacing between cells if (isset($table->align)) { foreach ($table->align as $key => $aa) { if ($aa) { $align[$key] = " align=\"$aa\""; } else { $align[$key] = ""; } } } if (isset($table->size)) { foreach ($table->size as $key => $ss) { if ($ss) { $size[$key] = " width=\"$ss\""; } else { $size[$key] = ""; } } } if (isset($table->wrap)) { foreach ($table->wrap as $key => $ww) { if ($ww) { $wrap[$key] = " nowrap=\"nowrap\" "; } else { $wrap[$key] = ""; } } } if (empty($table->width)) { $table->width = "80%"; } if (empty($table->tablealign)) { $table->tablealign = "center"; } if (empty($table->cellpadding)) { $table->cellpadding = "5"; } if (empty($table->cellspacing)) { $table->cellspacing = "1"; } if (empty($table->class)) { $table->class = "generaltable"; } if (empty($table->fontsize)) { $fontsize = ""; } else { $fontsize = "fontsize\">"; } $output = "width\" valign=\"top\" align=\"$table->tablealign\" "; $output .= " cellpadding=\"$table->cellpadding\" cellspacing=\"$table->cellspacing\" class=\"$table->class\">\n"; if (!empty($table->head)) { $output .= ""; foreach ($table->head as $key => $heading) { if (!isset($size[$key])) { $size[$key] = ""; } if (!isset($align[$key])) { $align[$key] = ""; } $output .= "class}header\">$fontsize$heading"; } $output .= "\n"; } foreach ($table->data as $row) { $output .= ""; foreach ($row as $key => $item) { if (!isset($size[$key])) { $size[$key] = ""; } if (!isset($align[$key])) { $align[$key] = ""; } if (!isset($wrap[$key])) { $wrap[$key] = ""; } $output .= "class}cell\">$fontsize$item"; } $output .= "\n"; } $output .= "\n"; return $output; } function print_textarea($usehtmleditor, $rows, $cols, $width, $height, $name, $value="", $courseid=0) { /// Prints a basic textarea field /// $width and height are legacy fields and no longer used global $CFG, $course; if (empty($courseid)) { if (!empty($course->id)) { // search for it in global context $courseid = $course->id; } } if ($usehtmleditor) { if (!empty($courseid) and isteacher($courseid)) { echo "\n"; } else { echo "\n"; } echo "\n"; echo "\n"; echo "\n"; if ($rows < 20) { $rows = 20; } if ($cols < 65) { $cols = 65; } } echo ""; p($value); echo "\n"; } function print_richedit_javascript($form, $name, $source="no") { /// Legacy function, provided for backward compatability use_html_editor($name); } function use_html_editor($name="") { /// Sets up the HTML editor on textareas in the current page. /// If a field name is provided, then it will only be /// applied to that field - otherwise it will be used /// on every textarea in the page. /// /// In most cases no arguments need to be supplied echo ""; } function update_course_icon($courseid) { // Used to be an icon, but it's now a simple form button global $CFG, $USER; if (isteacheredit($courseid)) { if (!empty($USER->editing)) { $string = get_string("turneditingoff"); $edit = "off"; } else { $string = get_string("turneditingon"); $edit = "on"; } return "wwwroot/course/view.php\">". "". "". ""; } } function update_module_button($moduleid, $courseid, $string) { // Prints the editing button on a module "view" page global $CFG; if (isteacheredit($courseid)) { $string = get_string("updatethis", "", $string); return "wwwroot/course/mod.php\">". "". "". ""; } else { return ""; } } function update_category_button($categoryid) { // Prints the editing button on a category page global $CFG, $USER; if (iscreator()) { if (!empty($USER->editing)) { $string = get_string("turneditingoff"); $edit = "off"; } else { $string = get_string("turneditingon"); $edit = "on"; } return "wwwroot/course/category.php\">". "". "". ""; } } function update_categories_button() { // Prints the editing button on categories listing global $CFG, $USER; if (isadmin()) { if (!empty($USER->editing)) { $string = get_string("turneditingoff"); $edit = "off"; } else { $string = get_string("turneditingon"); $edit = "on"; } return "wwwroot/course/index.php\">". "". ""; } } function navmenu($course, $cm=NULL, $targetwindow="self") { // Given a course and a (current) coursemodule // This function returns a small popup menu with all the // course activity modules in it, as a navigation menu // The data is taken from the serialised array stored in // the course record global $CFG; if ($cm) { $cm = $cm->id; } if ($course->format == 'weeks') { $strsection = get_string("week"); } else { $strsection = get_string("topic"); } if (!$modinfo = unserialize($course->modinfo)) { return ""; } $section = -1; $selected = ""; foreach ($modinfo as $mod) { if ($mod->mod == "label") { continue; } if ($mod->section > 0 and $section <> $mod->section) { $menu[] = "-------------- $strsection $mod->section --------------"; } $section = $mod->section; //Only add visible or teacher mods to jumpmenu if ($mod->visible or isteacher($course->id)) { $url = "$mod->mod/view.php?id=$mod->cm"; if ($cm == $mod->cm) { $selected = $url; } $mod->name = urldecode($mod->name); if (strlen($mod->name) > 55) { $mod->name = substr($mod->name, 0, 50)."..."; } if (!$mod->visible) { $mod->name = "(".$mod->name.")"; } $menu[$url] = $mod->name; } } return popup_form("$CFG->wwwroot/mod/", $menu, "navmenu", $selected, get_string("jumpto"), "", "", true, $targetwindow); } function print_date_selector($day, $month, $year, $currenttime=0) { // Currenttime is a default timestamp in GMT // Prints form items with the names $day, $month and $year if (!$currenttime) { $currenttime = time(); } $currentdate = usergetdate($currenttime); for ($i=1; $i<=31; $i++) { $days[$i] = "$i"; } for ($i=1; $i<=12; $i++) { $months[$i] = userdate(gmmktime(12,0,0,$i,1,2000), "%B"); } for ($i=2000; $i<=2010; $i++) { $years[$i] = $i; } choose_from_menu($days, $day, $currentdate['mday'], ""); choose_from_menu($months, $month, $currentdate['mon'], ""); choose_from_menu($years, $year, $currentdate['year'], ""); } function print_time_selector($hour, $minute, $currenttime=0) { // Currenttime is a default timestamp in GMT // Prints form items with the names $hour and $minute if (!$currenttime) { $currenttime = time(); } $currentdate = usergetdate($currenttime); for ($i=0; $i<=23; $i++) { $hours[$i] = sprintf("%02d",$i); } for ($i=0; $i<=59; $i++) { $minutes[$i] = sprintf("%02d",$i); } choose_from_menu($hours, $hour, $currentdate['hours'], ""); choose_from_menu($minutes, $minute, $currentdate['minutes'], ""); } function print_grade_menu($courseid, $name, $current, $includenograde=true) { /// Prints a grade menu (as part of an existing form) with help /// Showing all possible numerical grades and scales global $CFG; $strscale = get_string("scale"); $strscales = get_string("scales"); $scales = get_scales_menu($courseid); foreach ($scales as $i => $scalename) { $grades[-$i] = "$strscale: $scalename"; } if ($includenograde) { $grades[0] = get_string("nograde"); } for ($i=100; $i>=1; $i--) { $grades[$i] = $i; } choose_from_menu($grades, "$name", "$current", ""); $helpicon = "$CFG->pixpath/help.gif"; $linkobject = ""; link_to_popup_window ("/course/scales.php?id=$courseid&list=true", "ratingscales", $linkobject, 400, 500, $strscales); } function print_scale_menu($courseid, $name, $current) { /// Prints a scale menu (as part of an existing form) including help button /// Just like print_grade_menu but without the numerical grades global $CFG; $strscales = get_string("scales"); choose_from_menu(get_scales_menu($courseid), "$name", $current, ""); $helpicon = "$CFG->pixpath/help.gif"; $linkobject = ""; link_to_popup_window ("/course/scales.php?id=$courseid&list=true", "ratingscales", $linkobject, 400, 500, $strscales); } function print_scale_menu_helpbutton($courseid, $scale) { /// Prints a help button about a scale /// scale is an object global $CFG; $strscales = get_string("scales"); $helpicon = "$CFG->pixpath/help.gif"; $linkobject = "name\" src=\"$helpicon\" />"; link_to_popup_window ("/course/scales.php?id=$courseid&list=true&scale=$scale->id", "ratingscale", $linkobject, 400, 500, $scale->name); } function error ($message, $link="") { global $CFG, $SESSION; print_header(get_string("error")); echo ""; print_simple_box($message, "center", "", "#FFBBBB"); if (!$link) { if ( !empty($SESSION->fromurl) ) { $link = "$SESSION->fromurl"; unset($SESSION->fromurl); } else { $link = "$CFG->wwwroot/"; } } print_continue($link); print_footer(); die; } function helpbutton ($page, $title="", $module="moodle", $image=true, $linktext=false, $text="") { // $page = the keyword that defines a help page // $title = the title of links, rollover tips, alt tags etc // $module = which module is the page defined in // $image = use a help image for the link? (true/false/"both") // $text = if defined then this text is used in the page, and // the $page variable is ignored. global $CFG, $THEME; if ($module == "") { $module = "moodle"; } if ($image) { $icon = "$CFG->pixpath/help.gif"; if ($linktext) { $linkobject = "$title"; } else { $linkobject = ""; } } else { $linkobject = "$title"; } if ($text) { $url = "/help.php?module=$module&text=".htmlentities(urlencode($text)); } else { $url = "/help.php?module=$module&file=$page.html"; } link_to_popup_window ($url, "popup", $linkobject, 400, 500, $title); } function emoticonhelpbutton($form, $field) { /// Prints a special help button that is a link to the "live" emoticon popup global $CFG, $SESSION; $SESSION->inserttextform = $form; $SESSION->inserttextfield = $field; helpbutton("emoticons", get_string("helpemoticons"), "moodle", false, true); echo " "; link_to_popup_window ("/help.php?module=moodle&file=emoticons.html", "popup", "pixpath/s/smiley.gif\" border=\"0\" align=\"absmiddle\" width=\"15\" height=\"15\" />", 400, 500, get_string("helpemoticons")); echo ""; } function notice ($message, $link="") { global $CFG, $THEME; if (!$link) { if (!empty($_SERVER["HTTP_REFERER"])) { $link = $_SERVER["HTTP_REFERER"]; } else { $link = "$CFG->wwwroot/"; } } echo ""; print_simple_box($message, "center", "50%", "$THEME->cellheading", "20", "noticebox"); print_heading("".get_string("continue").""); print_footer(get_site()); die; } function notice_yesno ($message, $linkyes, $linkno) { global $THEME; print_simple_box_start("center", "60%", "$THEME->cellheading"); echo "$message"; echo ""; echo "".get_string("yes").""; echo " "; echo "".get_string("no").""; echo ""; print_simple_box_end(); } function redirect($url, $message="", $delay="0") { // Redirects the user to another page, after printing a notice if (empty($message)) { echo ""; echo ""; // To cope with Mozilla bug } else { if (empty($delay)) { $delay = 3; // There's no point having a message with no delay } print_header("", "", "", "", ""); echo ""; echo "$message"; echo "( ".get_string("continue")." )"; echo ""; flush(); sleep($delay); echo ""; // To cope with Mozilla bug } die; } function notify ($message, $color="red", $align="center") { echo "$message\n"; } function obfuscate_email($email) { /// Given an email address, this function will return an obfuscated version of it $i = 0; $length = strlen($email); $obfuscated = ""; while ($i < $length) { if (rand(0,2)) { $obfuscated.='%'.dechex(ord($email{$i})); } else { $obfuscated.=$email{$i}; } $i++; } return $obfuscated; } function obfuscate_text($plaintext) { /// This function takes some text and replaces about half of the characters /// with HTML entity equivalents. Return string is obviously longer. $i=0; $length = strlen($plaintext); $obfuscated=""; $prev_obfuscated = false; while ($i < $length) { $c = ord($plaintext{$i}); $numerical = ($c >= ord('0')) && ($c <= ord('9')); if ($prev_obfuscated and $numerical ) { $obfuscated.=''.ord($plaintext{$i}); } else if (rand(0,2)) { $obfuscated.=''.ord($plaintext{$i}); $prev_obfuscated = true; } else { $obfuscated.=$plaintext{$i}; $prev_obfuscated = false; } $i++; } return $obfuscated; } function obfuscate_mailto($email, $label="") { /// This function uses the above two functions to generate a fully /// obfuscated email link, ready to use. if (empty($label)) { $label = $email; } return sprintf('%s', obfuscate_text('mailto'), obfuscate_email($email), obfuscate_text($email), obfuscate_text($label)); } function print_paging_bar($totalcount, $page, $perpage, $baseurl) { /// Prints a single paging bar to provide access to other pages (usually in a search) $maxdisplay = 18; if ($totalcount > $perpage) { echo ""; echo "".get_string("page").":"; $lastpage = ceil($totalcount / $perpage); if ($page > 15) { $startpage = $page - 10; echo " 1 ..."; } else { $startpage = 0; } $currpage = $startpage; $displaycount = 0; while ($displaycount < $maxdisplay and $currpage < $lastpage) { $displaypage = $currpage+1; if ($page == $currpage) { echo " $displaypage"; } else { echo " $displaypage"; } $displaycount++; $currpage++; } if ($currpage < $lastpage) { $lastpageactual = $lastpage - 1; echo " ...$lastpage "; } $pagenum = $page + 1; if ($pagenum != $displaypage) { echo " (".get_string("next").")"; } echo ""; echo ""; } } // vim:autoindent:expandtab:shiftwidth=4:tabstop=4:tw=140: ?>
".$text."
release ($CFG->version)\" href=\"http://moodle.org/\" target=\"_blank\">"; $homelink .= "
".stripslashes_safe($text)."
$icon".stripslashes_safe($text); helpbutton($helppage, $text, $module); echo "
$message
"; echo "".get_string("yes").""; echo " "; echo "".get_string("no").""; echo "
( ".get_string("continue")." )
".get_string("page").":"; $lastpage = ceil($totalcount / $perpage); if ($page > 15) { $startpage = $page - 10; echo " 1 ..."; } else { $startpage = 0; } $currpage = $startpage; $displaycount = 0; while ($displaycount < $maxdisplay and $currpage < $lastpage) { $displaypage = $currpage+1; if ($page == $currpage) { echo " $displaypage"; } else { echo " $displaypage"; } $displaycount++; $currpage++; } if ($currpage < $lastpage) { $lastpageactual = $lastpage - 1; echo " ...$lastpage "; } $pagenum = $page + 1; if ($pagenum != $displaypage) { echo " (".get_string("next").")"; } echo "