--- /dev/null
+<?php
+/************************************************************************/
+/* Transformable */
+/************************************************************************/
+/* Copyright (c) 2009 */
+/* Adaptive Technology Resource Centre / University of Toronto */
+/* */
+/* 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. */
+/************************************************************************/
+
+define('TR_INCLUDE_PATH', 'include/');
+@ob_end_clean();
+header("Content-Encoding: none");
+if (isset($_GET['test'])) {
+ header('HTTP/1.1 200 OK', TRUE);
+ header('Trans-Get: OK');
+ exit;
+}
+$in_get = TRUE;
+
+require(TR_INCLUDE_PATH . 'vitals.inc.php');
+require(TR_INCLUDE_PATH . 'lib/mime.inc.php');
+
+global $_course_id;
+
+$force_download = false;
+
+//get path to file
+if (defined('TR_FORCE_GET_FILE') && TR_FORCE_GET_FILE) {
+ if ((version_compare(phpversion(), '5.2.0', '<') > 0) && !empty($_SERVER['ORIG_PATH_INFO'])){
+ //http://www.atutor.ca/atutor/mantis/view.php?id=3436
+ $current_file = $_SERVER['ORIG_PATH_INFO'];
+ } else if (!empty($_SERVER['PATH_INFO'])) {
+ $current_file = $_SERVER['PATH_INFO'];
+ } else if (!empty($_SERVER['REQUEST_URI'])) {
+ $current_file = $_SERVER['REQUEST_URI'];
+ } else if (!empty($_SERVER['PHP_SELF'])) {
+ if (!empty($_SERVER['QUERY_STRING'])) {
+ $current_file = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'];
+ } else {
+ $current_file = $_SERVER['PHP_SELF'];
+ }
+ } else if (!empty($_SERVER['SCRIPT_NAME'])) {
+ if (!empty($_SERVER['QUERY_STRING'])) {
+ $current_file = $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'];
+ } else {
+ $current_file = $_SERVER['SCRIPT_NAME'];
+ }
+ } else if (!empty($_SERVER['URL'])) {
+ if (!empty($_SERVER['QUERY_STRING'])) {
+ $current_file = $_SERVER['URL'] . '?' . $_SERVER['QUERY_STRING'];
+ }
+ $current_file = $_SERVER['URL'];
+ }
+
+ if (($pos = strpos($current_file, '/get.php')) !== FALSE) {
+ $current_file = substr($current_file, $pos + strlen('/get.php'));
+ }
+ if (substr($current_file, 0, 2) == '/@') {
+ $force_download = true;
+ $current_file = substr($current_file, 2);
+ }
+} else {
+ $current_file = $_GET['f'];
+
+ if (substr($current_file, 0, 2) == '/@') {
+ $force_download = true;
+ $current_file = substr($current_file, 2);
+ }
+}
+
+$file_name = pathinfo($current_file);
+$file_name = $file_name['basename'];
+
+if (substr($file_name, 0, 4) == 'b64:') {
+ $base64_file_name = substr($file_name, 4);
+ $file_name = base64_decode($base64_file_name);
+ $current_file = '/'.$file_name;
+}
+
+
+$file = TR_CONTENT_DIR . $_course_id . $current_file;
+
+//send header mime type
+$pathinfo = pathinfo($file);
+$ext = $pathinfo['extension'];
+if ($ext == '') {
+ $ext = 'application/octet-stream';
+} else {
+ $ext = $mime[$ext][0];
+}
+
+//check that this file is within the content directory & exists
+
+// NOTE!! for some reason realpath() is not returning FALSE when the file doesn't exist!
+$real = realpath($file);
+
+if (file_exists($real) && (substr($real, 0, strlen(TR_CONTENT_DIR)) == TR_CONTENT_DIR)) {
+ if ($force_download) {
+ header('Content-Type: application/force-download');
+ header('Content-transfer-encoding: binary');
+ header('Content-Disposition: attachment; filename="'.$pathinfo['basename'].'"');
+ } else {
+ header('Content-Disposition: filename="'.$pathinfo['basename'].'"');
+ }
+
+ /**
+ * although we can check if mod_xsendfile is installed in apache2
+ * we can't actually check if it's enabled. also, we can't check if
+ * it's enabled and installed in lighty, so instead we send the
+ * header anyway, if it works then the line after it will not
+ * execute. if it doesn't work, then the line after it will replace
+ * it so that the full server path is not exposed.
+ *
+ * x-sendfile is supported in apache2 and lighttpd 1.5+ (previously
+ * named x-send-file in lighttpd 1.4)
+ */
+ header('x-Sendfile: '.$real);
+ header('x-Sendfile: ', TRUE); // if we get here then it didn't work
+
+ header('Content-Type: '.$ext);
+
+ @readfile($real);
+ exit;
+} else {
+ header('HTTP/1.1 404 Not Found', TRUE);
+ exit;
+}
+
+?>
\ No newline at end of file
return $text;\r
}\r
\r
+ private static function embedFLV($text) {\r
+ global $content_base_href, $_course_id;\r
+ \r
+ // .flv - uses Flowplayer 3.0 from flowplayer.org (playing file via full URL)\r
+ preg_match_all("#\[media[0-9a-z\|]*\]http://([\w\./-]+)\.flv\[/media\]#i",$text,$media_matches[0],PREG_SET_ORDER);\r
+ $media_replace[0] ="<a class=\"flowplayerholder\"\r
+ style=\"display:block;width:##WIDTH##px;height:##HEIGHT##px;\"\r
+ href=\"http://##MEDIA1##.flv\">\r
+ </a>";\r
+ \r
+ // .flv - uses Flowplayer 3.0 from flowplayer.org (playing file from AT_content_dir)\r
+ preg_match_all("#\[media[0-9a-z\|]*\]([\w\./-]+)\.flv\[/media\]#i",$text,$media_matches[1],PREG_SET_ORDER);\r
+ $media_replace[1] ="<a class=\"flowplayerholder\"\r
+ style=\"display:block;width:##WIDTH##px;height:##HEIGHT##px;\"\r
+ href=\"".TR_BASE_HREF."get.php/".$content_base_href."##MEDIA1##.flv?_course_id=".$_course_id."\">\r
+ </a>";\r
+ \r
+ $has_flv = false;\r
+ // Executing the replace\r
+ for ($i=0;$i<count($media_replace);$i++){\r
+ foreach($media_matches[$i] as $media)\r
+ {\r
+ if (is_array($media)) $has_flv = true;\r
+ \r
+ //find width and height for each matched media\r
+ if (preg_match("/\[media\|([0-9]*)\|([0-9]*)\]*/", $media[0], $matches)) \r
+ {\r
+ $width = $matches[1];\r
+ $height = $matches[2];\r
+ }\r
+ else\r
+ {\r
+ $width = 425;\r
+ $height = 350;\r
+ }\r
+ \r
+ //replace media tags with embedded media for each media tag\r
+ $media_input = $media_replace[$i];\r
+ $media_input = str_replace("##WIDTH##","$width",$media_input);\r
+ $media_input = str_replace("##HEIGHT##","$height",$media_input);\r
+ $media_input = str_replace("##MEDIA1##","$media[1]",$media_input);\r
+ $media_input = str_replace("##MEDIA2##","$media[2]",$media_input);\r
+ $text = str_replace($media[0],$media_input,$text);\r
+ }\r
+ }\r
+ \r
+ if ($has_flv)\r
+ {\r
+ $text .= '\r
+ <script language="JavaScript">\r
+ $f("a.flowplayerholder", "'.TR_BASE_HREF.'include/jscripts/flowplayer/flowplayer-3.1.2.swf", { \r
+ clip: { autoPlay: false }, \r
+ plugins: { \r
+ controls: { \r
+ all: false, \r
+ play: true, \r
+ scrubber: true \r
+ } \r
+ }\r
+ });\r
+ </script>\r
+ ';\r
+ }\r
+ \r
+ return $text; \r
+ }\r
+ \r
+ public static function embedMedia($text) {\r
+ if (preg_match("/\[media(\|[0-9]+\|[0-9]+)?\]*/", $text)==0){\r
+ return $text;\r
+ }\r
+ \r
+ $media_matches = Array();\r
+ \r
+ /*\r
+ First, we search though the text for all different kinds of media defined by media tags and store the results in $media_matches.\r
+ \r
+ Then the different replacements for the different media tags are stored in $media_replace.\r
+ \r
+ Lastly, we loop through all $media_matches / $media_replaces. (We choose $media_replace as index because $media_matches is multi-dimensioned.) It is important that for each $media_matches there is a $media_replace with the same index. For each media match we check the width/height, or we use the default value of 425x350. We then replace the height/width/media1/media2 parameter placeholders in $media_replace with the correct ones, before running a str_replace on $text, replacing the given media with its correct replacement.\r
+ \r
+ */\r
+ \r
+ // youtube videos\r
+ preg_match_all("#\[media[0-9a-z\|]*\]http://([a-z0-9\.]*)?youtube.com/watch\?v=([a-z0-9_-]+)\[/media\]#i",$text,$media_matches[1],PREG_SET_ORDER);\r
+ $media_replace[1] = '<object width="##WIDTH##" height="##HEIGHT##"><param name="movie" value="http://##MEDIA1##youtube.com/v/##MEDIA2##"></param><embed src="http://##MEDIA1##youtube.com/v/##MEDIA2##" type="application/x-shockwave-flash" width="##WIDTH##" height="##HEIGHT##"></embed></object>';\r
+ \r
+ // .mpg\r
+ preg_match_all("#\[media[0-9a-z\|]*\]([.\w\d]+[^\s\"]+).mpg\[/media\]#i",$text,$media_matches[2],PREG_SET_ORDER);\r
+ $media_replace[2] = "<object data=\"##MEDIA1##.mpg\" type=\"video/mpeg\" width=\"##WIDTH##\" height=\"##HEIGHT##\"><param name=\"src\" value=\"##MEDIA1##.mpg\"><param name=\"autoplay\" value=\"false\"><param name=\"autoStart\" value=\"0\"><a href=\"##MEDIA1##.mpg\">##MEDIA1##.mpg</a></object>";\r
+ \r
+ // .avi\r
+ preg_match_all("#\[media[0-9a-z\|]*\]([.\w\d]+[^\s\"]+).avi\[/media\]#i",$text,$media_matches[3],PREG_SET_ORDER);\r
+ $media_replace[3] = "<object data=\"##MEDIA1##.avi\" type=\"video/x-msvideo\" width=\"##WIDTH##\" height=\"##HEIGHT##\"><param name=\"src\" value=\"##MEDIA1##.avi\"><param name=\"autoplay\" value=\"false\"><param name=\"autoStart\" value=\"0\"><a href=\"##MEDIA1##.avi\">##MEDIA1##.avi</a></object>";\r
+ \r
+ // .wmv\r
+ preg_match_all("#\[media[0-9a-z\|]*\]([.\w\d]+[^\s\"]+).wmv\[/media\]#i",$text,$media_matches[4],PREG_SET_ORDER);\r
+ $media_replace[4] = "<object data=\"##MEDIA1##.wmv\" type=\"video/x-ms-wmv\" width=\"##WIDTH##\" height=\"##HEIGHT##\"><param name=\"src\" value=\"##MEDIA1##.wmv\"><param name=\"autoplay\" value=\"false\"><param name=\"autoStart\" value=\"0\"><a href=\"##MEDIA1##.wmv\">##MEDIA1##.wmv</a></object>";\r
+ \r
+ // .mov\r
+ preg_match_all("#\[media[0-9a-z\|]*\]([.\w\d]+[^\s\"]+).mov\[/media\]#i",$text,$media_matches[5],PREG_SET_ORDER);\r
+ $media_replace[5] = "<object classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\" codebase=\"http://www.apple.com/qtactivex/qtplugin.cab\" width=\"##WIDTH##\" height=\"##HEIGHT##\"><param name=\"src\" value=\"##MEDIA1##.mov\"><param name=\"controller\" value=\"true\"><param name=\"autoplay\" value=\"false\"><!--[if gte IE 7]> <!--><object type=\"video/quicktime\" data=\"##MEDIA1##.mov\" width=\"##WIDTH##\" height=\"##HEIGHT##\"><param name=\"controller\" value=\"true\"><param name=\"autoplay\" value=\"false\"><a href=\"##MEDIA1##.mov\">##MEDIA1##.mov</a></object><!--<![endif]--><!--[if lt IE 7]><a href=\"##MEDIA1##.mov\">##MEDIA1##.mov</a><![endif]--></object>";\r
+ \r
+ // .swf\r
+ preg_match_all("#\[media[0-9a-z\|]*\]([.\w\d]+[^\s\"]+).swf\[/media\]#i",$text,$media_matches[6],PREG_SET_ORDER);\r
+ $media_replace[6] = "<object type=\"application/x-shockwave-flash\" data=\"##MEDIA1##.swf\" width=\"##WIDTH##\" height=\"##HEIGHT##\"> <param name=\"movie\" value=\"##MEDIA1##.swf\"><param name=\"loop\" value=\"false\"><a href=\"##MEDIA1##.swf\">##MEDIA1##.swf</a></object>";\r
+ \r
+ // .mp3\r
+ preg_match_all("#\[media[0-9a-z\|]*\](.+[^\s\"]+).mp3\[/media\]#i",$text,$media_matches[7],PREG_SET_ORDER);\r
+ $media_replace[7] = "<object type=\"audio/mpeg\" data=\"##MEDIA1##.mp3\" width=\"##WIDTH##\" height=\"##HEIGHT##\"><param name=\"src\" value=\"##MEDIA1##.mp3\"><param name=\"autoplay\" value=\"false\"><param name=\"autoStart\" value=\"0\"><a href=\"##MEDIA1##.mp3\">##MEDIA1##.mp3</a></object>";\r
+ \r
+ // .wav\r
+ preg_match_all("#\[media[0-9a-z\|]*\](.+[^\s\"]+).wav\[/media\]#i",$text,$media_matches[8],PREG_SET_ORDER);\r
+ $media_replace[8] ="<object type=\"audio/x-wav\" data=\"##MEDIA1##.wav\" width=\"##WIDTH##\" height=\"##HEIGHT##\"><param name=\"src\" value=\"##MEDIA1##.wav\"><param name=\"autoplay\" value=\"false\"><param name=\"autoStart\" value=\"0\"><a href=\"##MEDIA1##.wav\">##MEDIA1##.wav</a></object>";\r
+ \r
+ // .ogg\r
+ preg_match_all("#\[media[0-9a-z\|]*\](.+[^\s\"]+).ogg\[/media\]#i",$text,$media_matches[9],PREG_SET_ORDER);\r
+ $media_replace[9] ="<object type=\"application/ogg\" data=\"##MEDIA1##.ogg\" width=\"##WIDTH##\" height=\"##HEIGHT##\"><param name=\"src\" value=\"##MEDIA1##.ogg\"><a href=\"##MEDIA1##.ogg\">##MEDIA1##.ogg</a></object>";\r
+ \r
+ // .mid\r
+ preg_match_all("#\[media[0-9a-z\|]*\](.+[^\s\"]+).mid\[/media\]#i",$text,$media_matches[10],PREG_SET_ORDER);\r
+ $media_replace[10] ="<object type=\"application/x-midi\" data=\"##MEDIA1##.mid\" width=\"##WIDTH##\" height=\"##HEIGHT##\"><param name=\"src\" value=\"##MEDIA1##.mid\"><a href=\"##MEDIA1##.mid\">##MEDIA1##.mid</a></object>";\r
+ \r
+ $text = preg_replace("#\[media[0-9a-z\|]*\](.+[^\s\"]+).mid\[/media\]#i", "<object type=\"application/x-midi\" data=\"\\1.mid\" width=\"".$width."\" height=\"".$height."\"><param name=\"src\" value=\"\\1.mid\"><a href=\"\\1.mid\">\\1.mid</a></object>", $text);\r
+ \r
+ // Executing the replace\r
+ for ($i=1;$i<=count($media_replace);$i++){\r
+ foreach($media_matches[$i] as $media)\r
+ {\r
+ \r
+ //find width and height for each matched media\r
+ if (preg_match("/\[media\|([0-9]*)\|([0-9]*)\]*/", $media[0], $matches)) \r
+ {\r
+ $width = $matches[1];\r
+ $height = $matches[2];\r
+ }\r
+ else\r
+ {\r
+ $width = 425;\r
+ $height = 350;\r
+ }\r
+ \r
+ //replace media tags with embedded media for each media tag\r
+ $media_input = $media_replace[$i];\r
+ $media_input = str_replace("##WIDTH##","$width",$media_input);\r
+ $media_input = str_replace("##HEIGHT##","$height",$media_input);\r
+ $media_input = str_replace("##MEDIA1##","$media[1]",$media_input);\r
+ $media_input = str_replace("##MEDIA2##","$media[2]",$media_input);\r
+ $text = str_replace($media[0],$media_input,$text);\r
+ }\r
+ }\r
+ \r
+ $text = ContentUtility::embedFLV($text);\r
+ \r
+ return $text;\r
+ }\r
+\r
+ private static function makeClickable($text) {\r
+ $text = ContentUtility::embedMedia($text);\r
+ \r
+ // $text = eregi_replace("([[:space:]])(http[s]?)://([^[:space:]<]*)([[:alnum:]#?/&=])", "\\1<a href=\"\\2://\\3\\4\">\\3\\4</a>", $text);\r
+ //\r
+ // $text = eregi_replace( '([_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]+)*'.\r
+ // '\@'.'[_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]+)*'.'(\.[a-zA-Z]{1,6})+)',\r
+ // "<a href=\"mailto:\\1\">\\1</a>",\r
+ // $text);\r
+ \r
+ $text = preg_replace("/([\s])(http[s]?):\/\/(.*)(\s|\$|<br\s\/\>)(.*)/U", \r
+ "\\1<a href=\"\\2://\\3\">\\3</a>\\4\\5", $text);\r
+ \r
+ $text = preg_replace('/([_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]+)*'.\r
+ '\@'.'[_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]+)*'.'(\.[a-zA-Z]{1,6})+)/i',\r
+ "<a href=\"mailto:\\1\">\\1</a>",\r
+ $text);\r
+ return $text;\r
+ }\r
+\r
+ private static function myCodes($text, $html = false) {\r
+ global $_base_path;\r
+ global $HTTP_USER_AGENT;\r
+ \r
+ if (substr($HTTP_USER_AGENT,0,11) == 'Mozilla/4.7') {\r
+ $text = str_replace('[quote]','</p><p class="block">',$text);\r
+ $text = str_replace('[/quote]','</p><p>',$text);\r
+ \r
+ $text = str_replace('[reply]','</p><p class="block">',$text);\r
+ $text = str_replace('[/reply]','</p><p>',$text);\r
+ } else {\r
+ $text = str_replace('[quote]','<blockquote>',$text);\r
+ $text = str_replace('[/quote]','</blockquote><p>',$text);\r
+ \r
+ $text = str_replace('[reply]','</p><blockquote class="block"><p>',$text);\r
+ $text = str_replace('[/reply]','</p></blockquote><p>',$text);\r
+ }\r
+ \r
+ $text = str_replace('[b]','<strong>',$text);\r
+ $text = str_replace('[/b]','</strong>',$text);\r
+ \r
+ $text = str_replace('[i]','<em>',$text);\r
+ $text = str_replace('[/i]','</em>',$text);\r
+ \r
+ $text = str_replace('[u]','<u>',$text);\r
+ $text = str_replace('[/u]','</u>',$text);\r
+ \r
+ $text = str_replace('[center]','<center>',$text);\r
+ $text = str_replace('[/center]','</center><p>',$text);\r
+ \r
+ /* colours */\r
+ $text = str_replace('[blue]','<span style="color: blue;">',$text);\r
+ $text = str_replace('[/blue]','</span>',$text);\r
+ \r
+ $text = str_replace('[orange]','<span style="color: orange;">',$text);\r
+ $text = str_replace('[/orange]','</span>',$text);\r
+ \r
+ $text = str_replace('[red]','<span style="color: red;">',$text);\r
+ $text = str_replace('[/red]','</span>',$text);\r
+ \r
+ $text = str_replace('[purple]','<span style="color: purple;">',$text);\r
+ $text = str_replace('[/purple]','</span>',$text);\r
+ \r
+ $text = str_replace('[green]','<span style="color: green;">',$text);\r
+ $text = str_replace('[/green]','</span>',$text);\r
+ \r
+ $text = str_replace('[gray]','<span style="color: gray;">',$text);\r
+ $text = str_replace('[/gray]','</span>',$text);\r
+ \r
+ $text = str_replace('[op]','<span class="bigspacer"></span> <a href="',$text);\r
+ $text = str_replace('[/op]','">'._AT('view_entire_post').'</a>',$text);\r
+ \r
+ $text = str_replace('[head1]','<h2>',$text);\r
+ $text = str_replace('[/head1]','</h2>',$text);\r
+ \r
+ $text = str_replace('[head2]','<h3>',$text);\r
+ $text = str_replace('[/head2]','</h3>',$text);\r
+ \r
+ $text = str_replace('[cid]',$_base_path.'content.php?_cid='.$_SESSION['s_cid'],$text);\r
+ \r
+ global $sequence_links, $_course_id, $_content_id;\r
+ if ($_course_id > 0 && !isset($sequence_links) && $_content_id > 0) {\r
+ global $contentManager;\r
+ $sequence_links = $contentManager->generateSequenceCrumbs($_content_id);\r
+ }\r
+ if (isset($sequence_links['previous']) && $sequence_links['previous']['url']) {\r
+ $text = str_replace('[pid]', $sequence_links['previous']['url'], $text);\r
+ }\r
+ if (isset($sequence_links['next']) && $sequence_links['next']['url']) {\r
+ $text = str_replace('[nid]', $sequence_links['next']['url'], $text);\r
+ }\r
+ if (isset($sequence_links['resume']) && $sequence_links['resume']['url']) {\r
+ $text = str_replace('[nid]', $sequence_links['resume']['url'], $text);\r
+ }\r
+ if (isset($sequence_links['first']) && $sequence_links['first']['url']) {\r
+ $text = str_replace('[fid]', $sequence_links['first']['url'], $text);\r
+ }\r
+ \r
+ /* contributed by Thomas M. Duffey <tduffey at homeboyz.com> */\r
+ $html = !$html ? 0 : 1;\r
+ \r
+ // little hack added by greg to add syntax highlighting without using <?php \?\>\r
+ \r
+ $text = str_replace("[code]","[code]<?php",$text);\r
+ $text = str_replace("[/code]","?>[/code]",$text);\r
+ \r
+ $text = preg_replace("/\[code\]\s*(.*)\s*\[\\/code\]/Usei", "highlight_code(fix_quotes('\\1'), $html)", $text);\r
+ // now remove the <?php added above and leave the syntax colour behind.\r
+ $text = str_replace("<?php", "", $text);\r
+ $text = str_replace("?>", "", $text);\r
+ \r
+ return $text;\r
+ }\r
+\r
+ private static function imageReplace($text) {\r
+ /* image urls do not require http:// */\r
+ \r
+ // $text = eregi_replace("\[image(\|)?([[:alnum:][:space:]]*)\]" .\r
+ // "[:space:]*" .\r
+ // "([[:alnum:]#?/&=:\"'_.-]+)" .\r
+ // "[:space:]*" .\r
+ // "((\[/image\])|(.*\[/image\]))",\r
+ // "<img src=\"\\3\" alt=\"\\2\" />",\r
+ // $text);\r
+ \r
+ $text = preg_replace("/\[image(\|)?([a-zA-Z0-9\s]*)\]".\r
+ "[\s]*".\r
+ "([a-zA-Z0-9\#\?\/\&\=\:\\\"\'\_\.\-]+)[\s]*".\r
+ "((\[\/image\])|(.*\[\/image\]))/i",\r
+ "<img src=\"\\3\" alt=\"\\2\" />",\r
+ $text);\r
+ \r
+ return $text;\r
+ }\r
+ \r
+ private static function formatFinalOutput($text, $nl2br = true) {\r
+ global $_base_path;\r
+ \r
+ $text = str_replace('CONTENT_DIR/', '', $text);\r
+ if ($nl2br) {\r
+ return nl2br(ContentUtility::imageReplace(ContentUtility::makeClickable(ContentUtility::myCodes(' '.$text, false))));\r
+ }\r
+ \r
+ return ContentUtility::imageReplace(ContentUtility::makeClickable(ContentUtility::myCodes(' '.$text, true)));\r
+ }\r
+\r
/**\r
* This function converts the input string into Transformable html content string \r
* @access public\r
$input = preg_replace('/\[tex\](.*?)\[\/tex\]/sie', "'<img src=\"'.\$_config['latex_server'].rawurlencode('$1').'\" align=\"middle\">'", $input);\r
}\r
\r
- /* Commented by Cindy Qi Li on Jan 12, 2010\r
if ($html) {\r
- $x = apply_customized_format(format_final_output($input, false));\r
+ $x = ContentUtility::formatFinalOutput($input, false);\r
return $x;\r
}\r
\r
- $output = apply_customized_format(format_final_output($input));\r
- */\r
+ $output = ContentUtility::formatFinalOutput($input);\r
\r
$output = '<p>'.$input.'</p>';\r
\r
* @author Cindy Qi Li\r
*/\r
public static function applyAlternatives($cid, $content){\r
- global $db;\r
+ global $db, $_course_id;\r
\r
include_once(TR_INCLUDE_PATH.'classes/DAO/DAO.class.php');\r
$dao = new DAO();\r
$file .= $file_location;\r
\r
if ($row['content_path'] <> '') {\r
- $file = TR_CONTENT_DIR.$_SESSION['course_id'] . '/'.$row['content_path'].'/'.$file_location;\r
+ $file = TR_CONTENT_DIR.$_course_id . '/'.$row['content_path'].'/'.$file_location;\r
}\r
else {\r
- $file = TR_CONTENT_DIR.$_SESSION['course_id'] . '/'.$file_location;\r
+ $file = TR_CONTENT_DIR.$_course_id . '/'.$file_location;\r
}\r
$target = file_get_contents($file);\r
\r
if (defined('TR_FORCE_GET_FILE') && TR_FORCE_GET_FILE) {\r
$course_base_href = 'get.php/';\r
} else {\r
- $course_base_href = 'content/' . $_SESSION['course_id'] . '/';\r
+ $course_base_href = 'content/' . $_course_id . '/';\r
}\r
\r
$file = TR_BASE_HREF . $course_base_href.$file_location;\r
}
}
- if ($_REQUEST['cid'] == 0) {
+ if (!isset($_content_id) || $_content_id == 0) {
header('Location: '.TR_BASE_HREF.'home/course/index.php?_course_id='.$_course_id);
exit;
}
- header('Location: '.TR_BASE_HREF.'home/course/content.php?_cid='.$_cid);
+ header('Location: '.TR_BASE_HREF.'home/course/content.php?_cid='.$_content_id);
exit;
}
$pid = intval($_REQUEST['pid']);
?>
-<form action="<?php echo $_SERVER['PHP_SELF']; ?>?cid=<?php echo $cid; ?>" method="post" name="form" enctype="multipart/form-data">
+<form action="<?php echo $_SERVER['PHP_SELF']; ?>?_cid=<?php echo $cid; ?>" method="post" name="form" enctype="multipart/form-data">
<?php
if ($cid) {
// save all changes to the DB
function save_changes($redir, $current_tab) {
- global $contentManager, $db, $addslashes, $msg;
+ global $contentManager, $addslashes, $msg, $_course_id, $_content_id;
$_POST['pid'] = intval($_POST['pid']);
- $_POST['cid'] = intval($_POST['cid']);
+ $_POST['_cid'] = intval($_POST['_cid']);
$_POST['alternatives'] = intval($_POST['alternatives']);
$content_type_pref = CONTENT_TYPE_CONTENT;
}
- if (!($release_date = generate_release_date())) {
+ /*if (!($release_date = generate_release_date())) {
$msg->addError('BAD_DATE');
- }
+ }*/
- if ($_POST['title'] == '') {
- $msg->addError(array('EMPTY_FIELDS', _AT('title')));
- }
+// if ($_POST['title'] == '') {
+// $msg->addError(array('EMPTY_FIELDS', _AT('title')));
+// }
- if (!$msg->containsErrors()) {
- $_POST['title'] = $addslashes($_POST['title']);
- $_POST['body_text'] = $addslashes($_POST['body_text']);
- $_POST['head'] = $addslashes($_POST['head']);
- $_POST['keywords'] = $addslashes($_POST['keywords']);
- $_POST['test_message'] = $addslashes($_POST['test_message']);
+// if (!$msg->containsErrors()) {
+// $_POST['title'] = $addslashes($_POST['title']);
+// $_POST['body_text'] = $addslashes($_POST['body_text']);
+// $_POST['head'] = $addslashes($_POST['head']);
+// $_POST['keywords'] = $addslashes($_POST['keywords']);
+// $_POST['test_message'] = $addslashes($_POST['test_message']);
// add or edit content
- if ($_POST['cid']) {
+ if ($_POST['_cid']) {
/* editing an existing page */
- $err = $contentManager->editContent($_POST['cid'], $_POST['title'], $_POST['body_text'],
+ $err = $contentManager->editContent($_POST['_cid'], $_POST['title'], $_POST['body_text'],
$_POST['keywords'], $_POST['formatting'],
- $release_date, $_POST['head'], $_POST['use_customized_head'],
+ $_POST['head'], $_POST['use_customized_head'],
$_POST['test_message'], $_POST['allow_test_export']);
- $cid = $_POST['cid'];
+ $cid = $_POST['_cid'];
} else {
/* insert new */
- $cid = $contentManager->addContent($_SESSION['course_id'],
+ $cid = $contentManager->addContent($_course_id,
$_POST['pid'],
$_POST['ordering'],
$_POST['title'],
$_POST['keywords'],
$_POST['related'],
$_POST['formatting'],
- $release_date,
$_POST['head'],
$_POST['use_customized_head'],
$_POST['test_message'],
$_POST['allow_test_export'],
$content_type_pref);
- $_POST['cid'] = $cid;
- $_REQUEST['cid'] = $cid;
+ $_POST['_cid'] = $cid;
+ $_REQUEST['_cid'] = $cid;
}
- }
+// }
/* insert glossary terms */
+ /*
if (is_array($_POST['glossary_defs']) && ($num_terms = count($_POST['glossary_defs']))) {
global $glossary, $glossary_ids, $msg;
$glossary[$old_w] = $d;
}
}
- }
+ }*/
if (isset($_GET['tab'])) {
$current_tab = intval($_GET['tab']);
}
// adapted content: save primary content type
if (isset($_POST['use_post_for_alt']))
{
+ include_once(TR_INCLUDE_PATH.'classes/DAO/PrimaryResourcesTypesDAO.class.php');
+ $primaryResourcesTypesDAO = new PrimaryResourcesTypesDAO();
+
// 1. delete old primary content type
$sql = "DELETE FROM ".TABLE_PREFIX."primary_resources_types
WHERE primary_resource_id in
FROM ".TABLE_PREFIX."primary_resources
WHERE content_id=".$cid."
AND language_code='".$_SESSION['lang']."')";
- $result = mysql_query($sql, $db);
+ $primaryResourcesTypesDAO->execute($sql);
// 2. insert the new primary content type
$sql = "SELECT pr.primary_resource_id, rt.type_id
TABLE_PREFIX."resource_types rt
WHERE pr.content_id = ".$cid."
AND pr.language_code = '".$_SESSION['lang']."'";
- $all_types_result = mysql_query($sql, $db);
+ $all_types_rows = $primaryResourcesTypesDAO->execute($sql);
- while ($type = mysql_fetch_assoc($all_types_result)) {
- if (isset($_POST['alt_'.$type['primary_resource_id'].'_'.$type['type_id']]))
- {
- $sql = "INSERT INTO ".TABLE_PREFIX."primary_resources_types (primary_resource_id, type_id)
- VALUES (".$type['primary_resource_id'].", ".$type['type_id'].")";
- $result = mysql_query($sql, $db);
+ if (is_array($all_types_rows)) {
+ foreach ($all_types_rows as $type) {
+ if (isset($_POST['alt_'.$type['primary_resource_id'].'_'.$type['type_id']]))
+ {
+ $primaryResourcesTypesDAO->Create($type['primary_resource_id'], $type['type_id']);
+// $sql = "INSERT INTO ".TABLE_PREFIX."primary_resources_types (primary_resource_id, type_id)
+// VALUES (".$type['primary_resource_id'].", ".$type['type_id'].")";
+// $result = mysql_query($sql, $db);
+ }
}
}
}
- //Add test to this content - @harris
- $sql = 'SELECT * FROM '.TABLE_PREFIX."content_tests_assoc WHERE content_id=$_POST[cid]";
- $result = mysql_query($sql, $db);
+ include_once(TR_INCLUDE_PATH.'classes/DAO/ContentTestsAssocDAO.class.php');
+ $contentTestsAssocDAO = new ContentTestsAssocDAO();
+ $test_rows = $contentTestsAssocDAO->getByContent($_POST['_cid']);
+// $sql = 'SELECT * FROM '.TABLE_PREFIX."content_tests_assoc WHERE content_id=$_POST[cid]";
+// $result = mysql_query($sql, $db);
$db_test_array = array();
- while ($row = mysql_fetch_assoc($result)) {
- $db_test_array[] = $row['test_id'];
+ if (is_array($test_rows)) {
+ foreach ($test_rows as $row) {
+ $db_test_array[] = $row['test_id'];
+ }
}
if (is_array($_POST['tid']) && sizeof($_POST['tid']) > 0){
if (!empty($toBeDeleted)){
$tids = implode(",", $toBeDeleted);
$sql = 'DELETE FROM '. TABLE_PREFIX . "content_tests_assoc WHERE content_id=$_POST[cid] AND test_id IN ($tids)";
- $result = mysql_query($sql, $db);
+ $contentTestsAssocDAO->execute($sql);
}
//Add entries
if (!empty($toBeAdded)){
foreach ($toBeAdded as $i => $tid){
$tid = intval($tid);
- $sql = 'INSERT INTO '. TABLE_PREFIX . "content_tests_assoc SET content_id=$_POST[cid], test_id=$tid";
- $result = mysql_query($sql, $db);
- if ($result===false){
- $msg->addError('MYSQL_FAILED');
+// $sql = 'INSERT INTO '. TABLE_PREFIX . "content_tests_assoc SET content_id=$_POST[cid], test_id=$tid";
+// $result = mysql_query($sql, $db);
+ if ($contentTestsAssocDAO->Create($_POST['_cid'], $tid) === false){
+ $msg->addError('DB_NOT_UPDATED');
}
}
}
} else {
//All tests has been removed.
- $sql = 'DELETE FROM '. TABLE_PREFIX . "content_tests_assoc WHERE content_id=$_POST[cid]";
- $result = mysql_query($sql, $db);
+ $contentTestsAssocDAO->DeleteByContentID($_POST['_cid']);
+// $sql = 'DELETE FROM '. TABLE_PREFIX . "content_tests_assoc WHERE content_id=$_POST[cid]";
+// $result = mysql_query($sql, $db);
}
//End Add test
- // add pre-tests
- $sql = "DELETE FROM ". TABLE_PREFIX . "content_prerequisites
- WHERE content_id=".$_POST[cid]." AND type='".CONTENT_PRE_TEST."'";
- $result = mysql_query($sql, $db);
-
- if (is_array($_POST['pre_tid']) && sizeof($_POST['pre_tid']) > 0)
- {
- foreach ($_POST['pre_tid'] as $i => $tid){
- $tid = intval($tid);
- $sql = "INSERT INTO ". TABLE_PREFIX . "content_prerequisites
- SET content_id=".$_POST[cid].", type='".CONTENT_PRE_TEST."', item_id=$tid";
- $result = mysql_query($sql, $db);
-
- if ($result===false) $msg->addError('MYSQL_FAILED');
+ //TODO*******************BOLOGNA****************REMOVE ME**************/
+/*
+ if(isset($_SESSION['associated_forum']) && !$msg->containsErrors()){
+ if($_SESSION['associated_forum']=='none'){
+ $sql = "DELETE FROM ".TABLE_PREFIX."content_forums_assoc WHERE content_id='$_POST[cid]'";
+ mysql_query($sql,$db);
+ } else {
+ $sql = "DELETE FROM ".TABLE_PREFIX."content_forums_assoc WHERE content_id='$_POST[cid]'";
+ mysql_query($sql,$db);
+ $associated_forum = $_SESSION['associated_forum'];
+ for($i=0; $i<count($associated_forum); $i++){
+ $sql="INSERT INTO ".TABLE_PREFIX."content_forums_assoc SET content_id='$_POST[cid]',forum_id='$associated_forum[$i]'";
+ mysql_query($sql,$db);
+ }
}
+ unset($_SESSION['associated_forum']);
}
-
- //TODO*******************BOLOGNA****************REMOVE ME**************/
- if(isset($_SESSION['associated_forum']) && !$msg->containsErrors()){
- if($_SESSION['associated_forum']=='none'){
- $sql = "DELETE FROM ".TABLE_PREFIX."content_forums_assoc WHERE content_id='$_POST[cid]'";
- mysql_query($sql,$db);
- } else {
- $sql = "DELETE FROM ".TABLE_PREFIX."content_forums_assoc WHERE content_id='$_POST[cid]'";
- mysql_query($sql,$db);
- $associated_forum = $_SESSION['associated_forum'];
- for($i=0; $i<count($associated_forum); $i++){
- $sql="INSERT INTO ".TABLE_PREFIX."content_forums_assoc SET content_id='$_POST[cid]',forum_id='$associated_forum[$i]'";
- mysql_query($sql,$db);
- }
- }
- unset($_SESSION['associated_forum']);
- }
-
-
+*/
if (!$msg->containsErrors() && $redir) {
$_SESSION['save_n_close'] = $_POST['save_n_close'];
$msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY');
- header('Location: '.basename($_SERVER['PHP_SELF']).'?cid='.$cid.SEP.'close='.$addslashes($_POST['save_n_close']).SEP.'tab='.$addslashes($_POST['current_tab']).SEP.'displayhead='.$addslashes($_POST['displayhead']).SEP.'alternatives='.$addslashes($_POST['alternatives']));
+ header('Location: '.basename($_SERVER['PHP_SELF']).'?_cid='.$cid.SEP.'close='.$addslashes($_POST['save_n_close']).SEP.'tab='.$addslashes($_POST['current_tab']).SEP.'displayhead='.$addslashes($_POST['displayhead']).SEP.'alternatives='.$addslashes($_POST['alternatives']));
exit;
} else {
return;
}
}
-
+/*
function generate_release_date($now = false) {
if ($now) {
$day = date('d');
return $release_date;
}
-
+*/
function check_for_changes($row, $row_alternatives) {
global $contentManager, $cid, $glossary, $glossary_ids_related, $addslashes;
*/
function get_preview_link($file)
{
- global $content_row;
+ global $content_row, $_course_id;
if (defined('TR_FORCE_GET_FILE') && TR_FORCE_GET_FILE) {
$get_file = 'get.php/';
} else {
- $get_file = 'content/' . $_SESSION['course_id'] . '/';
+ $get_file = 'content/' . $_course_id . '/';
}
return $get_file.$content_row['content_path'].'/'.$file;
}
/**
- * Return a config row by content_id
+ * Return rows by content_id
* @access public
- * @param name
+ * @param cid: content_id
* @return table rows
* @author Cindy Qi Li
*/
--- /dev/null
+/*
+ * flowplayer.js 3.1.2. The Flowplayer API
+ *
+ * Copyright 2009 Flowplayer Oy
+ *
+ * This file is part of Flowplayer.
+ *
+ * Flowplayer 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.
+ *
+ * Flowplayer 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 Flowplayer. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Date: 2009-02-25 16:24:29 -0500 (Wed, 25 Feb 2009)
+ * Revision: 166
+ */
+(function(){function g(o){console.log("$f.fireEvent",[].slice.call(o))}function k(q){if(!q||typeof q!="object"){return q}var o=new q.constructor();for(var p in q){if(q.hasOwnProperty(p)){o[p]=k(q[p])}}return o}function m(t,q){if(!t){return}var o,p=0,r=t.length;if(r===undefined){for(o in t){if(q.call(t[o],o,t[o])===false){break}}}else{for(var s=t[0];p<r&&q.call(s,p,s)!==false;s=t[++p]){}}return t}function c(o){return document.getElementById(o)}function i(q,p,o){if(typeof p!="object"){return q}if(q&&p){m(p,function(r,s){if(!o||typeof s!="function"){q[r]=s}})}return q}function n(s){var q=s.indexOf(".");if(q!=-1){var p=s.substring(0,q)||"*";var o=s.substring(q+1,s.length);var r=[];m(document.getElementsByTagName(p),function(){if(this.className&&this.className.indexOf(o)!=-1){r.push(this)}});return r}}function f(o){o=o||window.event;if(o.preventDefault){o.stopPropagation();o.preventDefault()}else{o.returnValue=false;o.cancelBubble=true}return false}function j(q,o,p){q[o]=q[o]||[];q[o].push(p)}function e(){return"_"+(""+Math.random()).substring(2,10)}var h=function(t,r,s){var q=this;var p={};var u={};q.index=r;if(typeof t=="string"){t={url:t}}i(this,t,true);m(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","),function(){var v="on"+this;if(v.indexOf("*")!=-1){v=v.substring(0,v.length-1);var w="onBefore"+v.substring(2);q[w]=function(x){j(u,w,x);return q}}q[v]=function(x){j(u,v,x);return q};if(r==-1){if(q[w]){s[w]=q[w]}if(q[v]){s[v]=q[v]}}});i(this,{onCuepoint:function(x,w){if(arguments.length==1){p.embedded=[null,x];return q}if(typeof x=="number"){x=[x]}var v=e();p[v]=[x,w];if(s.isLoaded()){s._api().fp_addCuepoints(x,r,v)}return q},update:function(w){i(q,w);if(s.isLoaded()){s._api().fp_updateClip(w,r)}var v=s.getConfig();var x=(r==-1)?v.clip:v.playlist[r];i(x,w,true)},_fireEvent:function(v,y,w,A){if(v=="onLoad"){m(p,function(B,C){if(C[0]){s._api().fp_addCuepoints(C[0],r,B)}});return false}A=A||q;if(v=="onCuepoint"){var z=p[y];if(z){return z[1].call(s,A,w)}}if(y&&"onBeforeBegin,onMetaData,onStart,onUpdate,onResume".indexOf(v)!=-1){i(A,y);if(y.metaData){if(!A.duration){A.duration=y.metaData.duration}else{A.fullDuration=y.metaData.duration}}}var x=true;m(u[v],function(){x=this.call(s,A,y,w)});return x}});if(t.onCuepoint){var o=t.onCuepoint;q.onCuepoint.apply(q,typeof o=="function"?[o]:o);delete t.onCuepoint}m(t,function(v,w){if(typeof w=="function"){j(u,v,w);delete t[v]}});if(r==-1){s.onCuepoint=this.onCuepoint}};var l=function(p,r,q,t){var s={};var o=this;var u=false;if(t){i(s,t)}m(r,function(v,w){if(typeof w=="function"){s[v]=w;delete r[v]}});i(this,{animate:function(y,z,x){if(!y){return o}if(typeof z=="function"){x=z;z=500}if(typeof y=="string"){var w=y;y={};y[w]=z;z=500}if(x){var v=e();s[v]=x}if(z===undefined){z=500}r=q._api().fp_animate(p,y,z,v);return o},css:function(w,x){if(x!==undefined){var v={};v[w]=x;w=v}r=q._api().fp_css(p,w);i(o,r);return o},show:function(){this.display="block";q._api().fp_showPlugin(p);return o},hide:function(){this.display="none";q._api().fp_hidePlugin(p);return o},toggle:function(){this.display=q._api().fp_togglePlugin(p);return o},fadeTo:function(y,x,w){if(typeof x=="function"){w=x;x=500}if(w){var v=e();s[v]=w}this.display=q._api().fp_fadeTo(p,y,x,v);this.opacity=y;return o},fadeIn:function(w,v){return o.fadeTo(1,w,v)},fadeOut:function(w,v){return o.fadeTo(0,w,v)},getName:function(){return p},getPlayer:function(){return q},_fireEvent:function(w,v,x){if(w=="onUpdate"){var y=q._api().fp_getPlugin(p);if(!y){return}i(o,y);delete o.methods;if(!u){m(y.methods,function(){var A=""+this;o[A]=function(){var B=[].slice.call(arguments);var C=q._api().fp_invoke(p,A,B);return C==="undefined"||C===undefined?o:C}});u=true}}var z=s[w];if(z){z.apply(o,v);if(w.substring(0,1)=="_"){delete s[w]}}}})};function b(o,t,z){var E=this,y=null,x,u,p=[],s={},B={},r,v,w,D,A,q;i(E,{id:function(){return r},isLoaded:function(){return(y!==null)},getParent:function(){return o},hide:function(F){if(F){o.style.height="0px"}if(y){y.style.height="0px"}return E},show:function(){o.style.height=q+"px";if(y){y.style.height=A+"px"}return E},isHidden:function(){return y&&parseInt(y.style.height,10)===0},load:function(F){if(!y&&E._fireEvent("onBeforeLoad")!==false){m(a,function(){this.unload()});x=o.innerHTML;if(x&&!flashembed.isSupported(t.version)){o.innerHTML=""}flashembed(o,t,{config:z});if(F){F.cached=true;j(B,"onLoad",F)}}return E},unload:function(){try{if(!y||y.fp_isFullscreen()){return E}}catch(F){return E}if(x.replace(/\s/g,"")!==""){if(E._fireEvent("onBeforeUnload")===false){return E}y.fp_close();y=null;o.innerHTML=x;E._fireEvent("onUnload")}return E},getClip:function(F){if(F===undefined){F=D}return p[F]},getCommonClip:function(){return u},getPlaylist:function(){return p},getPlugin:function(F){var H=s[F];if(!H&&E.isLoaded()){var G=E._api().fp_getPlugin(F);if(G){H=new l(F,G,E);s[F]=H}}return H},getScreen:function(){return E.getPlugin("screen")},getControls:function(){return E.getPlugin("controls")},getConfig:function(F){return F?k(z):z},getFlashParams:function(){return t},loadPlugin:function(I,H,K,J){if(typeof K=="function"){J=K;K={}}var G=J?e():"_";E._api().fp_loadPlugin(I,H,K,G);var F={};F[G]=J;var L=new l(I,null,E,F);s[I]=L;return L},getState:function(){return y?y.fp_getState():-1},play:function(G,F){function H(){if(G!==undefined){E._api().fp_play(G,F)}else{E._api().fp_play()}}if(y){H()}else{E.load(function(){H()})}return E},getVersion:function(){var G="flowplayer.js 3.1.2";if(y){var F=y.fp_getVersion();F.push(G);return F}return G},_api:function(){if(!y){throw"Flowplayer "+E.id()+" not loaded when calling an API method"}return y},setClip:function(F){E.setPlaylist([F]);return E},getIndex:function(){return w}});m(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,ClipAdd,Fullscreen*,FullscreenExit,Error,MouseOver,MouseOut").split(","),function(){var F="on"+this;if(F.indexOf("*")!=-1){F=F.substring(0,F.length-1);var G="onBefore"+F.substring(2);E[G]=function(H){j(B,G,H);return E}}E[F]=function(H){j(B,F,H);return E}});m(("pause,resume,mute,unmute,stop,toggle,seek,getStatus,getVolume,setVolume,getTime,isPaused,isPlaying,startBuffering,stopBuffering,isFullscreen,toggleFullscreen,reset,close,setPlaylist,addClip").split(","),function(){var F=this;E[F]=function(H,G){if(!y){return E}var I=null;if(H!==undefined&&G!==undefined){I=y["fp_"+F](H,G)}else{I=(H===undefined)?y["fp_"+F]():y["fp_"+F](H)}return I==="undefined"||I===undefined?E:I}});E._fireEvent=function(O){if(typeof O=="string"){O=[O]}var P=O[0],M=O[1],K=O[2],J=O[3],I=0;if(z.debug){g(O)}if(!y&&P=="onLoad"&&M=="player"){y=y||c(v);A=y.clientHeight;m(p,function(){this._fireEvent("onLoad")});m(s,function(Q,R){R._fireEvent("onUpdate")});u._fireEvent("onLoad")}if(P=="onLoad"&&M!="player"){return}if(P=="onError"){if(typeof M=="string"||(typeof M=="number"&&typeof K=="number")){M=K;K=J}}if(P=="onContextMenu"){m(z.contextMenu[M],function(Q,R){R.call(E)});return}if(P=="onPluginEvent"){var F=M.name||M;var G=s[F];if(G){G._fireEvent("onUpdate",M);G._fireEvent(K,O.slice(3))}return}if(P=="onPlaylistReplace"){p=[];var L=0;m(M,function(){p.push(new h(this,L++,E))})}if(P=="onClipAdd"){if(M.isInStream){return}M=new h(M,K,E);p.splice(K,0,M);for(I=K+1;I<p.length;I++){p[I].index++}}var N=true;if(typeof M=="number"&&M<p.length){D=M;var H=p[M];if(H){N=H._fireEvent(P,K,J)}if(!H||N!==false){N=u._fireEvent(P,K,J,H)}}m(B[P],function(){N=this.call(E,M,K);if(this.cached){B[P].splice(I,1)}if(N===false){return false}I++});return N};function C(){if($f(o)){$f(o).getParent().innerHTML="";w=$f(o).getIndex();a[w]=E}else{a.push(E);w=a.length-1}q=parseInt(o.style.height,10)||o.clientHeight;if(typeof t=="string"){t={src:t}}r=o.id||"fp"+e();v=t.id||r+"_api";t.id=v;z.playerId=r;if(typeof z=="string"){z={clip:{url:z}}}if(typeof z.clip=="string"){z.clip={url:z.clip}}z.clip=z.clip||{};if(o.getAttribute("href",2)&&!z.clip.url){z.clip.url=o.getAttribute("href",2)}u=new h(z.clip,-1,E);z.playlist=z.playlist||[z.clip];var F=0;m(z.playlist,function(){var H=this;if(typeof H=="object"&&H.length){H={url:""+H}}m(z.clip,function(I,J){if(J!==undefined&&H[I]===undefined&&typeof J!="function"){H[I]=J}});z.playlist[F]=H;H=new h(H,F,E);p.push(H);F++});m(z,function(H,I){if(typeof I=="function"){if(u[H]){u[H](I)}else{j(B,H,I)}delete z[H]}});m(z.plugins,function(H,I){if(I){s[H]=new l(H,I,E)}});if(!z.plugins||z.plugins.controls===undefined){s.controls=new l("controls",null,E)}s.canvas=new l("canvas",null,E);t.bgcolor=t.bgcolor||"#000000";t.version=t.version||[9,0];t.expressInstall="http://www.flowplayer.org/swf/expressinstall.swf";function G(H){if(!E.isLoaded()&&E._fireEvent("onBeforeClick")!==false){E.load()}return f(H)}x=o.innerHTML;if(x.replace(/\s/g,"")!==""){if(o.addEventListener){o.addEventListener("click",G,false)}else{if(o.attachEvent){o.attachEvent("onclick",G)}}}else{if(o.addEventListener){o.addEventListener("click",f,false)}E.load()}}if(typeof o=="string"){flashembed.domReady(function(){var F=c(o);if(!F){throw"Flowplayer cannot access element: "+o}else{o=F;C()}})}else{C()}}var a=[];function d(o){this.length=o.length;this.each=function(p){m(o,p)};this.size=function(){return o.length}}window.flowplayer=window.$f=function(){var p=null;var o=arguments[0];if(!arguments.length){m(a,function(){if(this.isLoaded()){p=this;return false}});return p||a[0]}if(arguments.length==1){if(typeof o=="number"){return a[o]}else{if(o=="*"){return new d(a)}m(a,function(){if(this.id()==o.id||this.id()==o||this.getParent()==o){p=this;return false}});return p}}if(arguments.length>1){var r=arguments[1];var q=(arguments.length==3)?arguments[2]:{};if(typeof o=="string"){if(o.indexOf(".")!=-1){var t=[];m(n(o),function(){t.push(new b(this,k(r),k(q)))});return new d(t)}else{var s=c(o);return new b(s!==null?s:o,r,q)}}else{if(o){return new b(o,r,q)}}}return null};i(window.$f,{fireEvent:function(){var o=[].slice.call(arguments);var q=$f(o[0]);return q?q._fireEvent(o.slice(1)):null},addPlugin:function(o,p){b.prototype[o]=p;return $f},each:m,extend:i});if(typeof jQuery=="function"){jQuery.prototype.flowplayer=function(q,p){if(!arguments.length||typeof arguments[0]=="number"){var o=[];this.each(function(){var r=$f(this);if(r){o.push(r)}});return arguments.length?o[arguments[0]]:new d(o)}return this.each(function(){$f(this,k(q),p?k(p):{})})}}})();(function(){var e=typeof jQuery=="function";function i(){if(c.done){return false}var k=document;if(k&&k.getElementsByTagName&&k.getElementById&&k.body){clearInterval(c.timer);c.timer=null;for(var j=0;j<c.ready.length;j++){c.ready[j].call()}c.ready=null;c.done=true}}var c=e?jQuery:function(j){if(c.done){return j()}if(c.timer){c.ready.push(j)}else{c.ready=[j];c.timer=setInterval(i,13)}};function f(k,j){if(j){for(key in j){if(j.hasOwnProperty(key)){k[key]=j[key]}}}return k}function g(j){switch(h(j)){case"string":j=j.replace(new RegExp('(["\\\\])',"g"),"\\$1");j=j.replace(/^\s?(\d+)%/,"$1pct");return'"'+j+'"';case"array":return"["+b(j,function(m){return g(m)}).join(",")+"]";case"function":return'"function()"';case"object":var k=[];for(var l in j){if(j.hasOwnProperty(l)){k.push('"'+l+'":'+g(j[l]))}}return"{"+k.join(",")+"}"}return String(j).replace(/\s/g," ").replace(/\'/g,'"')}function h(k){if(k===null||k===undefined){return false}var j=typeof k;return(j=="object"&&k.push)?"array":j}if(window.attachEvent){window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){}})}function b(j,m){var l=[];for(var k in j){if(j.hasOwnProperty(k)){l[k]=m(j[k])}}return l}function a(q,s){var o=f({},q);var r=document.all;var m='<object width="'+o.width+'" height="'+o.height+'"';if(r&&!o.id){o.id="_"+(""+Math.random()).substring(9)}if(o.id){m+=' id="'+o.id+'"'}o.src+=((o.src.indexOf("?")!=-1?"&":"?")+Math.random());if(o.w3c||!r){m+=' data="'+o.src+'" type="application/x-shockwave-flash"'}else{m+=' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'}m+=">";if(o.w3c||r){m+='<param name="movie" value="'+o.src+'" />'}o.width=o.height=o.id=o.w3c=o.src=null;for(var j in o){if(o[j]!==null){m+='<param name="'+j+'" value="'+o[j]+'" />'}}var n="";if(s){for(var l in s){if(s[l]!==null){n+=l+"="+(typeof s[l]=="object"?g(s[l]):s[l])+"&"}}n=n.substring(0,n.length-1);m+='<param name="flashvars" value=\''+n+"' />"}m+="</object>";return m}function d(l,o,k){var j=flashembed.getVersion();f(this,{getContainer:function(){return l},getConf:function(){return o},getVersion:function(){return j},getFlashvars:function(){return k},getApi:function(){return l.firstChild},getHTML:function(){return a(o,k)}});var p=o.version;var q=o.expressInstall;var n=!p||flashembed.isSupported(p);if(n){o.onFail=o.version=o.expressInstall=null;l.innerHTML=a(o,k)}else{if(p&&q&&flashembed.isSupported([6,65])){f(o,{src:q});k={MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title};l.innerHTML=a(o,k)}else{if(l.innerHTML.replace(/\s/g,"")!==""){}else{l.innerHTML="<h2>Flash version "+p+" or greater is required</h2><h3>"+(j[0]>0?"Your version is "+j:"You have no flash plugin installed")+"</h3>"+(l.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='http://www.adobe.com/go/getflashplayer'>here</a></p>");if(l.tagName=="A"){l.onclick=function(){location.href="http://www.adobe.com/go/getflashplayer"}}}}}if(!n&&o.onFail){var m=o.onFail.call(this);if(typeof m=="string"){l.innerHTML=m}}if(document.all){window[o.id]=document.getElementById(o.id)}}window.flashembed=function(k,l,j){if(typeof k=="string"){var m=document.getElementById(k);if(m){k=m}else{c(function(){flashembed(k,l,j)});return}}if(!k){return}var n={width:"100%",height:"100%",allowfullscreen:true,allowscriptaccess:"always",quality:"high",version:null,onFail:null,expressInstall:null,w3c:false};if(typeof l=="string"){l={src:l}}f(n,l);return new d(k,n,j)};f(window.flashembed,{getVersion:function(){var l=[0,0];if(navigator.plugins&&typeof navigator.plugins["Shockwave Flash"]=="object"){var k=navigator.plugins["Shockwave Flash"].description;if(typeof k!="undefined"){k=k.replace(/^.*\s+(\S+\s+\S+$)/,"$1");var m=parseInt(k.replace(/^(.*)\..*$/,"$1"),10);var q=/r/.test(k)?parseInt(k.replace(/^.*r(.*)$/,"$1"),10):0;l=[m,q]}}else{if(window.ActiveXObject){try{var o=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(p){try{o=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");l=[6,0];o.AllowScriptAccess="always"}catch(j){if(l[0]==6){return l}}try{o=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(n){}}if(typeof o=="object"){k=o.GetVariable("$version");if(typeof k!="undefined"){k=k.replace(/^\S+\s+(.*)$/,"$1").split(",");l=[parseInt(k[0],10),parseInt(k[2],10)]}}}}return l},isSupported:function(j){var l=flashembed.getVersion();var k=(l[0]>j[0])||(l[0]==j[0]&&l[1]>=j[1]);return k},domReady:c,asString:g,getHTML:a});if(e){jQuery.tools=jQuery.tools||{version:{}};jQuery.tools.version.flashembed="1.0.3";jQuery.fn.flashembed=function(k,j){var l=null;this.each(function(){l=flashembed(this,k,j)});return k.api===false?this:l}}})();
\ No newline at end of file
--- /dev/null
+function doIframe(){\r
+ o = document.getElementsByTagName('iframe');\r
+ for(i=0;i<o.length;i++){\r
+ if (/\bautoHeight\b/.test(o[i].className)){\r
+ setHeight(o[i]);\r
+ addEvent(o[i],'load', doIframe);\r
+ }\r
+ }\r
+}\r
+\r
+function setHeight(e){\r
+ if(e.contentDocument){\r
+ e.height = e.contentDocument.body.offsetHeight + 35;\r
+ } else {\r
+ e.height = e.contentWindow.document.body.scrollHeight;\r
+ }\r
+}\r
+\r
+function addEvent(obj, evType, fn){\r
+ if(obj.addEventListener)\r
+ {\r
+ obj.addEventListener(evType, fn,false);\r
+ return true;\r
+ } else if (obj.attachEvent){\r
+ var r = obj.attachEvent("on"+evType, fn);\r
+ return r;\r
+ } else {\r
+ return false;\r
+ }\r
+}\r
+\r
+if (document.getElementById && document.createTextNode){\r
+ addEvent(window,'load', doIframe); \r
+}\r
<?php
-/****************************************************************/
-/* ATutor */
-/****************************************************************/
-/* Copyright (c) 2002-2008 by Greg Gay & Joel Kronenberg */
-/* Adaptive Technology Resource Centre / University of Toronto */
-/* http://atutor.ca */
-/* */
-/* 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. */
-/****************************************************************/
-// $Id: resources_parser_inc.inc.php 7208 2008-07-04 16:07:24Z silvia $
-
-if (!defined('AT_INCLUDE_PATH')) { exit; }
-//require(AT_INCLUDE_PATH.'lib/output.inc.php');
+/************************************************************************/
+/* Transformable */
+/************************************************************************/
+/* Copyright (c) 2009 */
+/* Adaptive Technology Resource Centre / University of Toronto */
+/* */
+/* 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. */
+/************************************************************************/
+
+if (!defined('TR_INCLUDE_PATH')) { exit; }
global $db;
-define('AT_INCLUDE_PATH', '../include/');
-
-//echo 'uffa';
-//echo $_POST['body_text'];
+define('TR_INCLUDE_PATH', '../include/');
+include_once(TR_INCLUDE_PATH.'../home/classes/ContentUtility.class.php');
$body_text = htmlspecialchars($stripslashes($_POST['body_text']));
$body_t = html_entity_decode($body_text);
-require(AT_INCLUDE_PATH.'classes/XML/XML_HTMLSax/XML_HTMLSax.php'); /* for XML_HTMLSax */
-require(AT_INCLUDE_PATH.'../mods/_core/imscp/include/ims_template.inc.php'); /* for ims templates + print_organizations() */
+require(TR_INCLUDE_PATH.'classes/XML/XML_HTMLSax/XML_HTMLSax.php'); /* for XML_HTMLSax */
+//require(TR_INCLUDE_PATH.'../mods/_core/imscp/include/ims_template.inc.php'); /* for ims templates + print_organizations() */
/*
the following resources are to be identified:
$content_files = "\n";
//in order to control if some [media] is in the body_text
-$body = embed_media($body_t);
+$body = ContentUtility::embedMedia($body_t);
$parser->parse($body);
INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_FEEDBACK_FILE_PASTED', 'The file was successfully pasted into the textarea below. <strong><em>Save to apply changes</em></strong>, or Cancel to return to the previously saved content.', now(), '');\r
INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_ERROR_FILE_NOT_SELECTED', 'You did not select a file to upload.', now(), '');\r
INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_ERROR_BAD_FILE_TYPE', 'Unsupported file type. Plain Text or HTML files only.', now(), '');\r
+INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_ERROR_INVALID_INPUT', 'Invalid URL: %s', now(), '');\r
+INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_FEEDBACK_CLOSED', 'Successfully closed', now(), '');\r
\r
INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_', '', now(), '');\r
INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_', '', now(), '');\r
INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_', '', now(), '');\r
INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_', '', now(), '');\r
INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_', '', now(), '');\r
-INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_', '', now(), '');\r
-INSERT INTO `TR_language_text` VALUES ('en', '_msgs','TR_', '', now(), '');\r
\r
\r
INSERT INTO `AT_language_text` VALUES ('en', '_msgs','AT_ERROR_TILE_AUTHENTICATION_FAIL','The Transformable authentication fails at:<br />%s.',now(),'');\r
'{TABLE_PREFIX}',
'{CONTENT_DIR}',
'{GENERATED_COMMENTS}',
+ '{GET_FILE}'
);
$values = array(urldecode($_POST['step2']['db_login']),
$_POST['step2']['tb_prefix'],
addslashes(urldecode($_POST['step4']['content_dir'])),
$comments,
- );
+ $_POST['step4']['get_file']
+ );
$config_template = str_replace($tokens, $values, $config_template);
/* accessible area. */
define('TR_CONTENT_DIR', '{CONTENT_DIR}');
+/* Whether or not to use the TR_CONTENT_DIR as a protected directory. */
+/* The if set to FALSE then the content directory will be hard coded */
+/* to Transformable_install_dir/content/ and TR_CONTENT_DIR will be ignored. */
+/* This option is used for compatability with IIS and Apache 2. */
+define('TR_FORCE_GET_FILE', {GET_FILE});
+
/* DO NOT ALTER THIS LAST LINE */
define('TR_INSTALL', TRUE);
}
if (strlen($content) == 0) {
- $headers[] = 'Transformable-Get: OK';
+ $headers[] = 'Trans-Get: OK';
} else {
$headers[] = '';
}
}
}
- if (in_array('Transformable-Get: OK', $headers)) {
+ if (in_array('Trans-Get: OK', $headers)) {
$get_file = 'TRUE';
} else {
$get_file = 'FALSE';
<![endif]-->
<?php echo $this->rtl_css; ?>
<script src="<?php echo $this->base_path; ?>include/jscripts/infusion/InfusionAll.js" type="text/javascript"></script>
- <script src="<?php echo $this->base_path; ?>jscripts/infusion/jquery.autoHeight.js" type="text/javascript"></script>
+ <script src="<?php echo $this->base_path; ?>include/jscripts/infusion/jquery.autoHeight.js" type="text/javascript"></script>
+ <script src="<?php echo $this->base_path; ?>include/jscripts/flowplayer/flowplayer-3.1.2.min.js"></script>
<script src="<?php echo $this->base_path; ?>include/jscripts/handleAjaxResponse.js" type="text/javascript"></script>
<script src="<?php echo $this->base_path; ?>include/jscripts/transformable.js" type="text/javascript"></script>
<?php echo $this->custom_css; ?>
//} // end of else
?>
<!-- the sub navigation -->
+<?php if (is_array($this->sub_menus) && count($this->sub_menus) > 0): ?>
<div id="subnavlistcontainer">
<div id="sub-navigation">
-
- <?php if (is_array($this->sub_menus) && count($this->sub_menus) > 0): ?>
<?php if (isset($this->back_to_page)): ?>
<div id="subnavbacktopage">
<a href="<?php echo $this->back_to_page['url']; ?>" id="back-to"><?php echo '<img src="'.$_base_href.'images/arrowicon.gif" alt="'._AT('back_to').':'.$this->back_to_page['title'].'" title="'._AT('back_to').':'.$this->back_to_page['title'].'" style="vertical-align:center;">'?></a>
<?php endif; ?>
<?php if (is_array($this->sub_menus) && count($this->sub_menus) > 0): ?>
</ul>
- <?php endif; ?>
-
</div>
-</div>
\ No newline at end of file
+</div>
+<?php endif; ?>