diff --git a/bookquiz/importodt.php b/bookquiz/importodt.php deleted file mode 100755 index 28f3e72..0000000 --- a/bookquiz/importodt.php +++ /dev/null @@ -1,749 +0,0 @@ -. - -/** - * This is a very rough importer for odt - * - * The script supports book - * Is based on class office from http://www.phpclasses.org/browse/package/2586.html - * - * @version $Id: importodt.php,v 1.5 2012/07/25 11:16:04 bdaloukas Exp $ - * @license http://www.gnu.org/copyleft/gpl.html GNU Public License - * @package game - **/ - -require_once("../../../config.php"); -require_once( "../header.php"); -require_once("../locallib.php"); - -$subchapter = optional_param('subchapter', '', PARAM_ALPHA); -$overwrite = optional_param('overwrite', 0, PARAM_INT); -$attempt = game_getattempt( $game, $detail); -$bookid = $game->bookid; -if ($bookid == 0) { - print_error( get_string( 'bookquiz_not_select_book', 'game')); -} - -if ($form = data_submitted()) { - // Filename. - if (empty($_FILES['newfile'])) { - // File was just uploaded. - notify(get_string("uploadproblem") ); - } - - if ((!is_uploaded_file($_FILES['newfile']['tmp_name']) or $_FILES['newfile']['size'] == 0)) { - notify(get_string("uploadnofilefound") ); - } else { - // Valid file is found. - if (readdata( $course->id, 'game', $dirtemp, $rlevels, $rtitles, $rtexts, $dirfordelete)) { - // First try to reall all of the data in. - if ($overwrite) { - game_bookquiz_deletebook( $course->id, $bookid); - } - // Parse all the html files into objects. - $pageobjects = extract_data( $course->id, 'book', $bookid, $dirtemp, $subchapter, $rlevels, $rtitles, $rtexts); - clean_temp( $dirfordelete); // All done with files so dump em. - - // Function to preps the data to be sent to DB. - $objects = game_bookquiz_create_objects( $pageobjects, $bookid); - - if (!game_bookquiz_save_objects( $objects)) { - // Sends it to DB. - print_error('could not save'); - } - } else { - print_error('could not get data'); - } - - print_continue("{$CFG->wwwroot}/mod/game/view.php?id=$cm->id"); - echo $OUTPUT->footer($course); - exit; - } -} - -// Print upload form. - - print_heading_with_help( get_string( "bookquiz_import_odt", "game"), "importodt", "game"); - - echo $OUTPUT->box_start('center'); -?> -
- - - - - - - - - - - - -
- : - - -
- : - -
-
  - " /> -
-
- box_end(); - - echo $OUTPUT->footer($course); - -// START OF FUNCTIONS. - -// The rbasedir variable contains the directory where the temp files are. -// At the end the directory must be deleted. -function readdata( $courseid, $modname, &$rbasedir, &$rlevels, &$rtitles, &$rtexts, &$dirfordelete) { - // This function expects a odt file to be uploaded. Then it parses the content.xml to determine. - // Then copies the images. - global $CFG; - - // Create a random upload directory in temp. - $newdir = $CFG->dataroot."/temp/$modname"; - if (!file_exists( $newdir)) { - mkdir( $newdir); - } - - $i = 1; - srand((double)microtime() * 1000000); - while (true) { - $rbasedir = "$modname/$i-".rand(0, 10000); - $newdir = $CFG->dataroot.'/temp/'.$rbasedir; - if (!file_exists( $newdir)) { - mkdir( $newdir); - $newdir .= '/'; - break; - } - $i++; - } - $dirfordelete = $rbasedir; - $rbasedir .= '/'; - - $zipfile = $_FILES["newfile"]["name"]; - $tempzipfile = $_FILES["newfile"]["tmp_name"]; - - // Creates our directory. - $pathparts = pathinfo($zipfile); - // Takes off the extension. - $dirname = substr($zipfile, 0, strpos($zipfile, '.'.$pathparts['extension'])); - if (!file_exists($newdir.$dirname)) { - mkdir($newdir.$dirname); - } - - // Move our uploaded file to temp/game. - move_uploaded_file( $tempzipfile, $newdir.$zipfile); - - // If the file ends with .lnk then use .odt instead. - if (substr( $zipfile, -4) == ".lnk") { - $zipfile = substr( $zipfile, 0, -4).".odt"; - } - - // Unzip it! - unzip_file ( $newdir.$zipfile, $newdir.$dirname, false); - - $rbasedir .= $dirname; // Update the base. - $newdir .= $dirname; - - // This is the file where we get the names of the files for the slides (in the correct order too). - $content = $newdir.'/content.xml'; - $data = file_get_contents( $content); - - $content = $newdir.'/styles.xml'; - if (file_exists( $content)) { - $datastyle = file_get_contents( $content); - } else { - $datastyle = ''; - } - - oo_game_convert_ver2( $data, $datastyle, $rlevels, $rtitles, $rtexts); - - return true; -} - -function oo_game_convert_ver2( $data, $datastyle, &$rlevels, &$rtitles, &$rtexts) { - $rlevels = array(); - $rtitles = array(); - $rtexts = array(); - - // We have tables, encode it here so all ', '', $data); - $data = preg_replace('##es', "base64_encode('\\1')", $data); - } - - $styles = array(); - game_bookquiz_convert_ver2_computestyles( $datastyle, $styles, true); - game_bookquiz_convert_ver2_computestyles( $data, $styles, false); - - game_bookquiz_splitsections($data, $positions, $inputs, $titles, $titleframes, $texts); - for ($i = 0; $i < count( $positions); $i++) { - preg_match_all( "#text:outline-level=\"([0-9]*)\"#es", $inputs[ $i], $matches); - $levels = $matches[ 1]; - if (count( $levels) > 0) { - $level = $levels[ 0]; - } else { - $level = 0; - } - - $rlevels[] = $level; - $rtitles[] = strip_tags( $titles[ $i]); - - $textframe = game_bookquiz_convert($titleframes[ $i], $styles, $images); - $text = game_bookquiz_convert($texts[ $i], $styles, $images); - - if ($textframe != '') { - $text = $textframe.'
'.$text; - } - - echo "
".$titles[ $i]."
".$text."\r\n\r\n\r\n\r\n"; - - $rtexts[] = $text; - } -} - -function extract_data( $courseid, $modname, $id, $basedir, $subchapter, $levels, $titles, $texts) { - global $CFG; - global $matches; - - $dirtemp = $CFG->dataroot.'/temp/'.$basedir; - - for ($i = 0; $i < count( $levels); $i++) { - echo $levels[ $i]." ".$titles[ $i]."
"; - } - - $extractedpages = array(); - - // Directory for images. - make_mod_upload_directory( $courseid); // Make sure moddata is made. - make_upload_directory( $courseid.'/moddata/'.$modname, false); - // We store our images in a subfolder in here. - make_upload_directory( $courseid.'/moddata/'.$modname."/".$id, false); - - $imagedir = $CFG->dataroot.'/'.$courseid.'/moddata/'.$modname."/".$id; - - if ($CFG->slasharguments) { - $imagelink = $CFG->wwwroot.'/file.php/'.$courseid.'/moddata/'.$modname."/".$id; - } else { - $imagelink = $CFG->wwwroot.'/file.php?file=/'.$courseid.'/moddata/'.$modname."/".$id; - } - - // Try to make a unique subfolder to store the images. - $i = 1; - while (true) { - $newdir = $imagedir.'/'.$i; - if (!file_exists( $newdir)) { - // Ok doesnt exist so make the directory and update our paths. - mkdir( $newdir); - $imagedir = $newdir; - $imagelink = $imagelink.'/'.$i; - break; - } - $i++; - } - - for ($i = 0; $i < count( $titles); $i++) { - // Start building our page. - $page = new stdClass; - $page->title = $titles[ $i]; - $page->content = $texts[ $i]; - $page->subchapter = ( $levels[ $i] >= 2); - - // Check if the nexts are subchapters. - for ($j = $i + 1; $j < count( $titles); $j++) { - if ($levels[ $j] > 2) { - $page->content .= '
'.$titles[ $j].'
'.$texts[ $j]; - $i = $j; - continue; - } - break; - } - - preg_match_all('#="Pictures/([a-z .A-Z_0-9]*)"#es', $page->content, $imgs); - - foreach ($imgs[1] as $img) { - $src = $dirtemp.'/Pictures/'.$img; - $dest = $imagedir.'/'.$img; - rename( $src, $dest); - - $page->content = str_replace( "Pictures/$img", $imagelink."/".$img, $page->content); - } - - // Add the page to the array. - $extractedpages[] = $page; - } // End $pages foreach loop. - - return $extractedpages; -} - -/* - Clean up the temp directory - */ -function clean_temp( $base) { - global $CFG; - - // This function is broken, use it to clean up later. - // Should only clean up what we made as well because someone else could be importing ppt as well. - $dir = $CFG->dataroot.'/temp/'.$base; - - remove_dir( $dir); -} - -/* - Creates objects an chapter object that is to be inserted into the database -*/ -function game_bookquiz_create_objects( $pageobjects, $bookid) { - global $DB; - - $chapters = array(); - - $lastpagenum = $DB->get_field('book_chapters', 'MAX(pagenum) as num', array( 'bookid' => $bookid)); - - foreach ($pageobjects as $pageobject) { - $chapter = new stdClass; - - // Same for all chapters. - $chapter->bookid = $bookid; - $chapter->pagenum = ++$lastpagenum; - $chapter->timecreated = time(); - $chapter->timemodified = time(); - $chapter->subchapter = 0; - - if ($pageobject->title == '') { - $chapter->title = "Page $count"; // No title set so make a generic one. - } else { - $chapter->title = addslashes($pageobject->title); - } - $chapter->subchapter = $pageobject->subchapter; - - $content = str_replace("\n", '', $pageobject->content); - $content = str_replace("\r", '', $content); - $content = str_replace(' ', '', $content); // Puts in returns? - $content = '

'.$content.'

'; - - $chapter->content = addslashes( $content); - - $chapters[] = $chapter; - } - - return $chapters; -} - -// Save the chapter objects to the database. -function game_bookquiz_save_objects($chapters) { - global $DB; - - // Nothing fancy, just save them all in order. - foreach ($chapters as $chapter) { - if (!$newid = $DB->insert_record('book_chapters', $chapter)) { - print_error('Could not insert to table book_chapters'); - } - } - - return true; -} - -// Splits the data to. -function game_bookquiz_splitsections($data, &$positions, &$inputs, &$titles, &$titleframes, &$texts) { - preg_match_all('#(.*?)#es', $data, $matches, PREG_OFFSET_CAPTURE); - - $in = $matches[ 1]; - $title = $matches[ 2]; - - $positions = array(); - $inputs = array(); - $titles = array(); - - $oldposition = 0; - $oldlen = 0; - for ($i = 0; $i < count( $in); $i++) { - $inputs[] = $in[ $i][ 0]; - - $newposition = $in[ $i][ 1]; - $positions[] = $newposition; - - $titlenet = $title[ $i][ 0]; - $titleframe = ''; - - // Frames inside header. - preg_match_all('#(.*?)#es', $titlenet, $titlematches, PREG_OFFSET_CAPTURE); - $frames = $titlematches[ 2]; - if (count( $frames) > 0) { - for ($j = 0; $j < count( $frames); $j++) { - $titleframe .= $frames[ $j][ 0]; - $titlenet = substr( $titlenet, $frames[ $j][ 1] + strlen( $frames[ $j][ 0]) + 13); - } - } - - $titles[] = $titlenet; - $titleframes[] = $titleframe; - - if ($i > 0) { - $texts[] = substr( $data, $oldposition + $oldlen, $newposition - $oldposition - $oldlen); - } - - $oldlen = strlen( $title[ $i][ 0]) + strlen( $in[ $i][ 0]) + 10; - $oldposition = $newposition; - } - $newposition = strlen( $data); - $texts[] = substr( $data, $oldposition + $oldlen, $newposition - $oldposition - $oldlen); -} - -function game_bookquiz_convert( $data, $styles, &$images) { - $images = array(); - - // Get data. - preg_match_all('#(.*?)#es', $data, $text); - $originals = $text[ 0]; - $names = $text[ 1]; - $texts = $text[ 2]; - - for ($i = 0; $i < count( $texts); $i++) { - $name = $names[ $i]; - $text = $texts[ $i]; - - // Repairs draw:frame. - $pattern = "##es"; - preg_match_all( $pattern, $text, $matches); - if (count( $matches[ 1]) ) { - $new = game_bookquiz_convert_image( $matches, $styles, $images); - $data = str_replace( $originals[ $i], $new, $data); - } else if ($name == 'RKRK') { - $new = game_bookquiz_convert_RKRK( $text); - $data = str_replace( $originals[ $i], $new, $data); - } else { - $new = '

'.game_bookquiz_convert_text( $text, $styles).'

'; - $data = str_replace( $originals[ $i], $new, $data); - } - } - - // Repairs text:span text:style-name. - preg_match_all( '#(.*?)#es', $data, $text); - $originals = $text[ 0]; - $names = $text[ 1]; - $texts = $text[ 2]; - for ($i = 0; $i < count( $texts); $i++) { - $name = $names[ $i]; - $text = $texts[ $i]; - - $pattern = "##es"; - preg_match_all( $pattern, $text, $matches); - if (count( $matches[ 1]) ) { - $new = game_bookquiz_convert_image( $matches, $styles, $images); - $data = str_replace( $originals[ $i], $new, $data); - } else if ($name == 'RKRK') { - $new = game_bookquiz_convert_RKRK( $text); - $data = str_replace( $originals[ $i], $new, $data); - } else { - $new = "'.game_bookquiz_convert_text( $text, $styles).''; - $data = str_replace( $originals[ $i], $new, $data); - } - } - - // Repairs text:a. - preg_match_all( '#(.*?)#es', $data, $text); - $originals = $text[ 0]; - $hrefs = $text[ 2]; - $texts = $text[ 3]; - for ($i = 0; $i < count( $texts); $i++) { - $href = $hrefs[ $i]; - $text = $texts[ $i]; - - $new = "$text"; - $data = str_replace( $originals[ $i], $new, $data); - } - - // Repair text:list. - preg_match_all( '#(.*?)#es', $data, $text); - $originals = $text[ 0]; - $names = $text[ 1]; - $texts = $text[ 2]; - - for ($i = 0; $i < count( $texts); $i++) { - $new = '
    '.$texts[ $i].'
'; - $data = str_replace( $originals[ $i], $new, $data); - - // I have to repair the listitems. - preg_match_all( '#(.*?)#es', $data, $listitems); - $originallistitems = $listitems[ 0]; - $items = $listitems[ 1]; - for ($j = 0; $j < count( $items); $j++) { - $new = '
  • '.$items[ $j]; - $data = str_replace( $originallistitems[ $j], $new, $data); - } - } - - $data = str_replace( '', '
    ', $data); - - return $data; -} - -function game_bookquiz_convert_text( $text, $styles) { - $pattern = "#(.*?)#es"; - preg_match_all( $pattern, $text, $matches); - - $originals = $matches[ 0]; - $names = $matches[ 1]; - $spantexts = $matches[ 2]; - - for ($i = 0; $i < count( $names); $i++) { - $name = $names[ $i]; - $style = $styles[ $name]; - - $new = "".$spantexts[ $i].""; - $text = str_replace( $originals[ $i], $new, $text); - } - - return $text; -} - -function game_bookquiz_convert_image( $matches, $xmlstyles, &$images) { - $ret = ''; - - $styles = $matches[ 1]; - $pictures = $matches[ 3]; - - for ($j = 0; $j < count( $pictures); $j++) { - $style = $styles[ $j]; - - $ret .= '
    '; - $images[] = $pictures[$j]; - } - - return $ret; -} - -function game_bookquiz_convert_rkrk( $text) { - $table = base64_decode($text); - $table = stripslashes($table); - $table = strtr($table, array('' => '', '' => '', '' => '', '' => '', '' => '', '' => '', '>' => ">\n", '' => '')); - - preg_match_all('#table:name="(.*?)" table:style-name="(.*?)">#es', $table, $repl); - foreach ($repl[0] as $val) { - $table = str_replace($val, '', $table); - } - - preg_match_all('##es', $table, $repl); - foreach ($repl[0] as $key => $val) { - $table = str_replace($val, '', $table); - } - - preg_match_all('##es', $table, $repl); - foreach ($repl[0] as $val) { - $table = str_replace($val, '', $table); - } - - preg_match_all('##es', $table, $repl); - foreach ($repl[0] as $val) { - $table = str_replace($val, '
    ', $table); - } - - // Maybe there are a lot of pictures inside a table. - preg_match_all('#xlink:href="Pictures/([a-z.A-Z_0-9]*)"#es', $table, $repl); - foreach ($repl[ 1] as $picture) { - $table = str_replace('', '', $table); - } - if (strpos( $table, "
    ") === false) { - $table .= ""; - } - - $ret = '
    '.$table.'
    '; - - return $ret; -} - -function game_bookquiz_deletebook( $courseid, $bookid) { - global $CFG; - - if (!delete_records( 'book_chapters', 'bookid', $bookid)) { - print_error( "Can't delete records from book_chapters bookid=$bookid"); - } - - game_full_rmdir( "$CFG->dataroot/$courseid/moddata/book/$bookid"); -} - -function game_bookquiz_convert_ver2_computestyles( $data, &$styles, $isstyle) { - preg_match_all('#(.*?)#es', $data, $style); - - $stylenames = $style[ 1]; - $styleinfos = $style[ 2]; - $styledatas = $style[ 3]; - for ($i = 0; $i < count( $stylenames); $i++) { - $name = $stylenames[ $i]; - - $change = false; - for (;;) { - $pos1 = strpos( $styledatas[ $i], 'style:parent-style-name'); - $pos2 = strpos( $styledatas[ $i], '/>'); - if (($pos1 === false) or ($pos2 === false)) { - break; - } - if ($pos1 > $pos2) { - break; - } - - // Is a parent style. - $s = substr( $styledatas[ $i], 0, $pos2 + 2); - game_bookquiz_convertstyle_parent( $s, $styles); - - $styledatas[ $i] = substr( $styledatas[ $i], $pos2 + 2); - $change = true; - } - - if ($change) { - // Must to recompute name, styledatas, styleinfos. - preg_match_all('#(.*?)#es', $data, $style); - $name = $style[ 1][ 0]; - $styleinfos[ $i] = $style[ 2][ 0]; - $styledatas[ $i] = $style[ 3][ 0]; - } - - $styles[ $name] = game_bookquiz_convertstyle( $styledatas[ $i], $styleinfos[ $i], $styles); - } -} - -function game_bookquiz_convertstyle_parent( $data, &$styles) { - $styleitems = array(); - - preg_match_all( '#(.*?)style:name="(.*?)"(.*?)style:parent-style-name="(.*?)"(.*?)#es', $data, $infos); - $names = $infos[ 2]; - $parents = $infos[ 4]; - if (count( $parents)) { - if (array_key_exists( $parents[ 0], $styles)) { - // Is a child style. Must to copy the properties of the parent style. - $a = explode( ';', $styles[ $parents[ 0]]); - foreach ($a as $s) { - $pos = strpos( $s, ':'); - $key = substr( $s, 0, $pos); - $item = substr( $s, $pos + 1); - if ($item == '') { - continue; - } - $styleitems[ $key] = $item; - } - } - $name = $names[ 0]; - } - - $style = ''; - foreach ($styleitems as $key => $item) { - $style .= ';'.$key.':'.$item; - } - - $styles[ $name] = substr( $style, 1); -} - -function game_bookquiz_convertstyle( $data, $styleinfo, $styles) { - $styleitems = array(); - - preg_match_all( '##es', $data, $infos); - $lines = $infos[ 1]; - if (count( $lines)) { - $line = $lines[ 0]; - - if ($line != '') { - game_bookquiz_convertstyle_paragraph( $line, $styleitems); - } - } - - preg_match_all( '##es', $data, $infos); - $lines = $infos[ 1]; - if (count( $lines)) { - $line = $lines[ 0]; - - if ($line != '') { - game_bookquiz_convertstyle_textproperties( $line, $styleitems); - } - } - - if (count( $styleitems) == 0) { - return ''; - } - - $style = ''; - foreach ($styleitems as $key => $item) { - $style .= ';'.$key.':'.$item; - } - - return substr( $style, 1); -} - -function game_bookquiz_convertstyle_paragraph( $line, &$styleitems) { - preg_match_all( '#(.*?)=(.*?) #es', $line.' ', $datas); - $data1 = $datas[ 1]; - $data2 = $datas[ 2]; - - $ret = ''; - for ($i = 0; $i < count( $data1); $i++) { - $eq1 = $data1[ $i]; - $eq2 = $data2[ $i]; - - if ((substr( $eq2, 0, 1) == '"') and (substr( $eq2, -1, 1) == '"')) { - $eq2 = substr( $eq2, 1, -1); - } - - switch ($eq1) { - case 'fo:text-align': - $styleitems[ 'align'] = $eq2; - break; - case 'fo:background-color': - $styleitems[ 'background-color'] = $eq2; - break; - } - } -} - -function game_bookquiz_convertstyle_textproperties( $line, &$styleitems) { - preg_match_all( '#(.*?)=(.*?) #es', $line.' ', $datas); - $data1 = $datas[ 1]; - $data2 = $datas[ 2]; - - $ret = ''; - for ($i = 0; $i < count( $data1); $i++) { - $eq1 = $data1[ $i]; - $eq2 = $data2[ $i]; - - if ((substr( $eq2, 0, 1) == '"') and (substr( $eq2, -1, 1) == '"')) { - $eq2 = substr( $eq2, 1, -1); - } - - switch( $eq1) { - case 'fo:font-size': - case 'fo:color': - case 'fo:background-color': - case 'fo:font-style': - case 'fo:font-weight': - $styleitems[ substr( $eq1, 3)] = $eq2; - break; - case 'style_text_underline_style': - if ($eq2 == 'solid') { - $styleitems[ 'text-decoration'] = 'underline'; - } - break; - } - } -} diff --git a/bookquiz/importppt.php b/bookquiz/importppt.php deleted file mode 100755 index b8bf33b..0000000 --- a/bookquiz/importppt.php +++ /dev/null @@ -1,480 +0,0 @@ -. - -/** - * This is a very rough importer for powerpoint slides - * Export a powerpoint presentation with powerpoint as html pages - * Do it with office 2002 (I think?) and no special settings - * Then zip the directory with all of the html pages - * and the zip file is what you want to upload - * - * The script supports book and lesson. - * - * @version $Id: importppt.php,v 1.3 2012/07/25 11:16:05 bdaloukas Exp $ - * @license http://www.gnu.org/copyleft/gpl.html GNU Public License - * @package lesson - **/ - -require_once("../../config.php"); -require_once("locallib.php"); - -$id = required_param('id', PARAM_INT); // Course Module ID. -$pageid = optional_param('pageid', '', PARAM_INT); // Page ID. -global $matches; - -if (! $cm = get_coursemodule_from_id('lesson', $id)) { - print_error('Course Module ID was incorrect'); -} - -if (! $course = $DB->get_record('course', array( 'id' => $cm->course))) { - print_error('Course is misconfigured'); -} - -// Allows for adaption for multiple modules. -if (!$modname = $DB->get_field('modules', 'name', array( 'id' => $cm->module))) { - print_error('Could not find module name'); -} - -if (! $mod = $DB->get_record($modname, array( "id" => $cm->instance))) { - print_error('Course module is incorrect'); -} - -require_login($course->id, false); -$context = get_context_instance(CONTEXT_MODULE, $cm->id); -require_capability('mod/lesson:edit', $context); - -$strimportppt = get_string("importppt", "lesson"); -$strlessons = get_string("modulenameplural", "lesson"); - -echo $OUTPUT->heading("$strimportppt", " $strimportppt", - "id\">$strlessons". - " -> wwwroot}/mod/$modname/view.php?id=$cm->id\">".format_string($mod->name, true)."-> $strimportppt"); - -if ($form = data_submitted()) { // Filename. - if (empty($_FILES['newfile'])) { // File was just uploaded. - notify(get_string("uploadproblem") ); - } - - if ((!is_uploaded_file($_FILES['newfile']['tmp_name']) or $_FILES['newfile']['size'] == 0)) { - notify(get_string("uploadnofilefound") ); - } else { - // Valid file is found. - if ($rawpages = readdata($_FILES, $course->id, $modname)) { - // First try to reall all of the data in. - // parse all the html files into objects. - $pageobjects = extract_data($rawpages, $course->id, $mod->name, $modname); - clean_temp(); // All done with files so dump em. - - $modcreateobjects = $modname.'_create_objects'; - $modsaveobjects = $modname.'_save_objects'; - - // Function to preps the data to be sent to DB. - $objects = $modcreateobjects($pageobjects, $mod->id); - - if (! $modsaveobjects($objects, $mod->id, $pageid)) { - // Sends it to DB. - print_error( 'could not save'); - } - } else { - print_error('could not get data'); - } - - echo "
    "; - print_continue("{$CFG->wwwroot}/mod/$modname/view.php?id=$cm->id"); - echo $OUTPUT->footer($course); - exit; - } -} - -// Print upload form. -print_heading_with_help($strimportppt, "importppt", "lesson"); - -echo $OUTPUT->box_start('center'); -echo "
    "; -echo "id\" />\n"; -echo "\n"; -echo ""; - -echo ""; - -echo "
    "; -print_string("upload"); -echo ":"; -echo ""; -echo "
     "; -echo ""; -echo "
    "; -echo "
    "; -echo $OUTPUT->box_end(); - -echo $OUTPUT->footer($course); - -// START OF FUNCTIONS. - -/* this function expects a zip file to be uploaded. Then it parses - * outline.htm to determine the slide path. Then parses each - * slide to get data for the content - */ -function readdata($file, $courseid, $modname) { - - global $CFG; - - // Create an upload directory in temp. - make_upload_directory('temp/'.$modname); - - $base = $CFG->dataroot."/temp/$modname/"; - - $zipfile = $_FILES["newfile"]["name"]; - $tempzipfile = $_FILES["newfile"]["tmp_name"]; - - // Create our directory. - $pathparts = pathinfo($zipfile); - // Take off the extension. - $dirname = substr($zipfile, 0, strpos($zipfile, '.'.$pathparts['extension'])); - if (!file_exists($base.$dirname)) { - mkdir($base.$dirname); - } - - // Move our uploaded file to temp/lesson. - move_uploaded_file($tempzipfile, $base.$zipfile); - - // Unzip it! - unzip_file($base.$zipfile, $base, false); - - $base = $base.$dirname; // Update the base. - - // This is the file where we get the names of the files for the slides (in the correct order too). - $outline = $base.'/outline.htm'; - - $pages = array(); - - if (file_exists($outline) and is_readable($outline)) { - $outlinecontents = file_get_contents($outline); - $filenames = array(); - // This gets all of our files names. - preg_match_all("/javascript:GoToSld\('(.*)'\)/", $outlinecontents, $filenames); - - // File $pages with the contents of all of the slides. - foreach ($filenames[1] as $file) { - $path = $base.'/'.$file; - if (is_readable($path)) { - $pages[$path] = file_get_contents($path); - } else { - return false; - } - } - } else { - // Cannot find the outline, so grab all files that start with slide. - $dh = opendir($base); - while (false !== ($file = readdir($dh))) { // Read throug the directory. - if ('slide' == substr($file, 0, 5)) { - // Check for name (may want to check extension later). - $path = $base.'/'.$file; - if (is_readable($path)) { - $pages[$path] = file_get_contents($path); - } else { - return false; - } - } - } - - ksort($pages); // Order them by file name. - } - - if (empty($pages)) { - return false; - } - - return $pages; -} - -/* This function attempts to extract the content out of the slides - * the slides are ugly broken xml. and the xml is broken... yeah... - */ -function extract_data($pages, $courseid, $lessonname, $modname) { - - global $CFG; - global $matches; - - $extratedpages = array(); - - // Directory for images. - make_mod_upload_directory($courseid); // Make sure moddata is made. - // We store our images in a subfolder in here. - make_upload_directory($courseid.'/moddata/'.$modname, false); - - $imagedir = $CFG->dataroot.'/'.$courseid.'/moddata/'.$modname; - - if ($CFG->slasharguments) { - $imagelink = $CFG->wwwroot.'/file.php/'.$courseid.'/moddata/'.$modname; - } else { - $imagelink = $CFG->wwwroot.'/file.php?file=/'.$courseid.'/moddata/'.$modname; - } - - // Try to make a unique subfolder to store the images. - $lessonname = str_replace(' ', '_', $lessonname); // Get rid of spaces. - $i = 0; - while (true) { - if (!file_exists($imagedir.'/'.$lessonname.$i)) { - // Ok doesnt exist so make the directory and update our paths. - mkdir($imagedir.'/'.$lessonname.$i); - $imagedir = $imagedir.'/'.$lessonname.$i; - $imagelink = $imagelink.'/'.$lessonname.$i; - break; - } - $i++; - } - - foreach ($pages as $file => $content) { - /* to make life easier on our preg_match_alls, we strip out all tags except - * for div and img (where our content is). We want div because sometimes we - * can identify the content in the div based on the div's class - */ - - $tags = '
    '; // Should also allow . - $string = strip_tags($content, $tags); - - $matches = array(); - /* this will look for a non nested tag that is closed - * want to allow (maybe more) tags but when we do that - * the preg_match messes up. - */ - preg_match_all("/(<([\w]+)[^>]*>)([^<\\2>]*)(<\/\\2>)/", $string, $matches); - - $pathparts = pathinfo($file); - // Get rid of the extension. - $file = substr($pathparts['basename'], 0, strpos($pathparts['basename'], '.')); - - $imgs = array(); - // This preg matches all images. - preg_match_all("/]*(src\=\"(".$file."\_image[^>^\"]*)\"[^>]*)>/i", $string, $imgs); - - // Start building our page. - $page = new stdClass; - $page->title = ''; - $page->contents = array(); - $page->images = array(); - $page->source = $pathparts['basename']; // Need for book only. - - /* This foreach keeps the style intact. - * Found it doesn't help much. But if you want back uncomment - * this foreach and uncomment the line with the comment imgstyle in it. - * Also need to comment out - * the $page->images[]... line in the next foreach - */ - foreach ($imgs[2] as $img) { - copy($pathparts['dirname'].'/'.$img, $imagedir.'/'.$img); - // Comment out this line if you are using the above foreach loop. - $page->images[] = ""; - } - for ($i = 0; $i < count($matches[1]); $i++) { // Go through all of our div matches. - $class = isolate_class($matches[1][$i]); // First step in isolating the class. - - // Check for any static classes. - switch ($class) { - case 'T': // Class T is used for Titles. - $page->title = $matches[3][$i]; - break; - // I would guess that all bullet lists would start with B then go to B1, B2, etc. - case 'B': - // B1-B4 are just insurance, should just hit B and all be taken care of. - case 'B1': - case 'B2': - case 'B3': - case 'B4': - // This is a recursive function that will grab all the bullets and rebuild the list in html. - $page->contents[] = build_list('
      ', $i, 0); - break; - default: - if ($matches[3][$i] != ' ') { // Odd crap generated... sigh. - if (substr($matches[3][$i], 0, 1) == ':') {// Check for leading : ..hate MS . - $page->contents[] = substr($matches[3][$i], 1); // Get rid of :. - } else { - $page->contents[] = $matches[3][$i]; - } - } - break; - } - } - - // Add the page to the array. - $extratedpages[] = $page; - - } // End $pages foreach loop. - - return $extratedpages; -} - -// A recursive function to build a html list. -function build_list($list, &$i, $depth) { - global $matches; // Not sure why I global this... - - while ($i < count($matches[1])) { - $class = isolate_class($matches[1][$i]); - - if (strstr($class, 'B')) { // Make sure we are still working with bullet classes. - if ($class == 'B') { - $thisdepth = 0; // Calling class B depth 0. - } else { - // Set the depth number. So B1 is depth 1 and B2 is depth 2 and so on. - $thisdepth = substr($class, 1); - if (!is_numeric($thisdepth)) { - print_error( 'Depth not parsed!'); - } - if ($thisdepth < $depth) { - // We are moving back a level in the nesting. - break; - } - if ($thisdepth > $depth) { - // We are moving in a lvl in nesting. - $list .= '
        '; - $list = build_list($list, $i, $thisdepth); - // Once we return back, should go to the start of the while. - continue; - } - // No depth changes, so add the match to our list. - if ($cleanstring = ppt_clean_text($matches[3][$i])) { - $list .= '
      • '.ppt_clean_text($matches[3][$i]).'
      • '; - } - $i++; - } else { - // Not a B class, so get out of here... - break; - } - } - - // End the list and return it. - $list .= '
      '; - return $list; -} - -// Given an html tag, this function will. -function isolate_class($string) { - if ($class = strstr($string, 'class=')) { - // First step in isolating the class. - // This gets rid of
      . - return substr($class, 0, strpos($class, '>')); - } - } else { - // No class defined in the tag. - return ''; - } -} - -// This function strips off the random chars that ppt puts infront of bullet lists. -function ppt_clean_text($string) { - $chop = 1; // Default: just a single char infront of the content. - - // Look for any other crazy things that may be infront of the content. - if (strstr($string, '<') and strpos($string, '<') == 0) { - // Look for the < in the sting and make sure it is in the front. - $chop = 4; // Increase the $chop. - } - // May need to add more later.... - - $string = substr($string, $chop); - - if ($string != ' ') { - return $string; - } else { - return false; - } -} - -// Clean up the temp directory. -function clean_temp() { - global $CFG; - /* this function is broken, use it to clean up later - * should only clean up what we made as well because someone else could be importing ppt as well - * delDirContents($CFG->dataroot.'/temp/lesson'); - */ -} - -// Creates objects an chapter object that is to be inserted into the database. -function book_create_objects($pageobjects, $bookid) { - $chapters = array(); - $chapter = new stdClass; - - // Same for all chapters. - $chapter->bookid = $bookid; - $chapter->pagenum = $DB->count_records('book_chapters', array( 'bookid' => $bookid)) + 1; - $chapter->timecreated = time(); - $chapter->timemodified = time(); - $chapter->subchapter = 0; - - $i = 1; - foreach ($pageobjects as $pageobject) { - $page = prep_page($pageobject, $i); // Get title and contents. - $chapter->importsrc = addslashes($pageobject->source); // Add the source. - $chapter->title = $page->title; - $chapter->content = $page->contents; - $chapters[] = $chapter; - - // Increment our page number and our counter. - $chapter->pagenum = $chapter->pagenum + 1; - $i++; - } - - return $chapters; -} - -// Builds the title and content strings from an object. -function prep_page($pageobject, $count) { - if ($pageobject->title == '') { - $page->title = "Page $count"; // No title set so make a generic one. - } else { - $page->title = addslashes($pageobject->title); - } - - $page->contents = ''; - - // Nab all the images first. - foreach ($pageobject->images as $image) { - $image = str_replace("\n", '', $image); - $image = str_replace("\r", '', $image); - $image = str_replace("'", '"', $image); // Imgstyle. - - $page->contents .= addslashes($image); - } - // Go through the contents array and put

      tags around each element and strip out \n which I have found to be uneccessary. - foreach ($pageobject->contents as $content) { - $content = str_replace("\n", '', $content); - $content = str_replace("\r", '', $content); - $content = str_replace(' ', '', $content); // Puts in returns? - $content = '

      '.$content.'

      '; - $page->contents .= addslashes($content); - } - return $page; -} - -// Save the chapter objects to the database. -function book_save_objects($chapters, $bookid, $pageid='0') { - global $DB; - - // Nothing fancy, just save them all in order. - foreach ($chapters as $chapter) { - if (!$chapter->id = $DB->insert_record('book_chapters', $chapter)) { - print_error('Could not update your book'); - } - } - return true; -} diff --git a/classes/event/course_module_instance_list_viewed.php b/classes/event/course_module_instance_list_viewed.php index 3ba2ef7..57fb2b9 100644 --- a/classes/event/course_module_instance_list_viewed.php +++ b/classes/event/course_module_instance_list_viewed.php @@ -36,18 +36,5 @@ defined('MOODLE_INTERNAL') || die(); * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class course_module_instance_list_viewed extends \core\event\course_module_instance_list_viewed { - /** - * Create the event from course record. - * - * @param \stdClass $course - * @return course_module_instance_list_viewed - */ - public static function create_from_course(\stdClass $course) { - $params = array( - 'context' => \context_course::instance($course->id) - ); - $event = \mod_game\event\course_module_instance_list_viewed::create( $params); - $event->add_record_snapshot('course', $course); - return $event; - } + // No code required here as the parent class handles it all. } diff --git a/lib.php b/lib.php index 38ee320..c7a6054 100755 --- a/lib.php +++ b/lib.php @@ -539,7 +539,9 @@ function game_get_recent_mod_activity(&$activities, &$index, $timestart, $course $groupjoin = ""; } - if (!$attempts = $DB->get_records_sql("SELECT qa.*, qa.gameid, q.grade, u.lastname,u.firstname, firstnamephonetic, u.lastnamephonetic, u.middlename, u.alternatename, u.lastnamephonetic, u.picture + if (!$attempts = $DB->get_records_sql("SELECT qa.*, qa.gameid, q.grade, u.lastname,". + " u.firstname, firstnamephonetic, u.lastnamephonetic, u.middlename, u.alternatename,". + " u.lastnamephonetic, u.picture FROM {game_attempts} qa JOIN {game} q ON q.id = qa.gameid JOIN {user} u ON u.id = qa.userid @@ -604,7 +606,7 @@ function game_get_recent_mod_activity(&$activities, &$index, $timestart, $course $tmpactivity->user->alternatename = $attempt->alternatename; $tmpactivity->user->middlename = $attempt->middlename; $tmpactivity->user->firstnamephonetic = $attempt->firstnamephonetic; - $tmpactivity->user->lastnamephonetic = $attempt->lastnamephonetic; + $tmpactivity->user->lastnamephonetic = $attempt->lastnamephonetic; $tmpactivity->user->picture = $attempt->picture; $tmpactivity->user->imagealt = $attempt->imagealt; $tmpactivity->user->email = $attempt->email; @@ -619,7 +621,6 @@ function game_print_recent_mod_activity($activity, $courseid, $detail, $modnames echo ''; echo "
      "; - //print_user_picture($activity->user->userid, $courseid, $activity->user->picture); echo $OUTPUT->user_picture($activity->user, array('courseid' => $courseid)); echo ""; @@ -636,7 +637,8 @@ function game_print_recent_mod_activity($activity, $courseid, $detail, $modnames echo get_string("attempt", "game")." {$activity->content->attempt}: "; $grades = "({$activity->content->sumgrades} / {$activity->content->maxgrade})"; - echo "wwwroot}/mod/game/review.php?attempt={$activity->content->attemptid}&q={$activity->gameid}\">$grades"; + echo "wwwroot}/mod/game/review.php". + "?attempt={$activity->content->attemptid}&q={$activity->gameid}\">$grades"; echo ''; echo '
      '; diff --git a/locallib.php b/locallib.php index f734401..b37fc8c 100755 --- a/locallib.php +++ b/locallib.php @@ -1489,7 +1489,7 @@ function game_grade_responses( $question, $responses, $maxgrade, &$answertext, & return $answer->fraction * $maxgrade; } else { $name = "resp{$question->id}_"; - if( !isset( $responses->$name)) { + if (!isset( $responses->$name)) { $answered = false; return 0; // Not answered this question. } @@ -1818,14 +1818,27 @@ function game_get_string_lang( $identifier, $module, $lang) { $langfile = "{$CFG->dirroot}/mod/game/lang/$lang/game.php"; - if ($result = get_string_from_file( $identifier, $langfile, "\$ret")) { - eval($result); - if ($ret != '') { - return $ret; + $result = get_string_from_file( $identifier, $langfile, "\$ret"); + if ($result != '') { + $pos = strpos( $result, '='); + if ($pos > 0) { + $result = substr( $result, $pos + 1); + $pos = strpos( $result, "'"); + if ($pos > 0) { + $result = substr( $result, $pos + 1); + $pos = strpos( $result, "'"); + if ($pos > 0) { + $result = substr( $result, 0, $pos); + } + } } } - return get_string( $identifier, $module); + if ($result != '') { + return $result; + } else { + return get_string( $identifier, $module); + } } function get_string_from_file($identifier, $langfile, $destination) { diff --git a/millionaire/play.php b/millionaire/play.php index 401c61d..d0825a3 100755 --- a/millionaire/play.php +++ b/millionaire/play.php @@ -172,7 +172,7 @@ function game_millionaire_showgrid( $game, $millionaire, $id, $query, $aanswer, $styletext = "style='$stylequestion'"; } - $aval = array( 100, 200, 300, 400, 500, 1000, 1500, 2000, 4000, 5000, 10000, 20000, 40000, 80000, 150000); + $aval = array( 100, 200, 300, 400, 500, 1000, 1500, 2000, 4000, 5000, 10000, 20000, 40000, 80000, 150000); for ($i = 15; $i >= 1; $i--) { $btr = false; diff --git a/pagelib.php b/pagelib.php index c379428..90b93f9 100755 --- a/pagelib.php +++ b/pagelib.php @@ -21,8 +21,6 @@ define('PAGE_GAME_VIEW', 'mod-game-view'); page_map_class( PAGE_GAME_VIEW, 'page_game'); -$DEFINEDPAGES = array( PAGE_GAME_VIEW); - /** * Class that models the behavior of a game * diff --git a/showanswers.php b/showanswers.php index 6c6cf55..eb33ee6 100755 --- a/showanswers.php +++ b/showanswers.php @@ -307,7 +307,6 @@ function game_showanswers_question_select( $game, $table, $select, $fields, $ord foreach ($recs as $rec) { if ($i++ > 0) { echo '
      '; - if ($rec->fraction == 1) { echo " $rec->answer"; if ($rec->feedback == '') { diff --git a/showattempts.php b/showattempts.php index a425c84..223ce4e 100755 --- a/showattempts.php +++ b/showattempts.php @@ -73,7 +73,7 @@ function game_showusers($game) { function onselectuser() { var groupid = document.getElementById('menugroup').value; - window.location.href = "" + document.getElementById('menuuser').value + '&groupid=' + groupid; + window.location.href = "" + document.getElementById('menuuser').value + '&groupid='+groupid; } dobject($thevalue, $thehtmlflag); } else { $theoutput[$theindex] = ($thehtmlflag ? preg_replace('|<|s', '<', var_export($thevalue, true)) : var_export($thevalue, true)); @@ -244,9 +244,9 @@ class sdd { foreach ($theclassvars[$theclass] as $thevariable => $value) { if (array_key_exists($thevariable, $theobjectvars)) { if (is_array($theobjectvars[$thevariable])) { - $theoutput[$theclass][] = $thevariable . " = " . sdd::darray($theobjectvars[$thevariable], $thehtmlflag); + $theoutput[$theclass][] = $thevariable . " = " .$this->darray($theobjectvars[$thevariable], $thehtmlflag); } else if (is_object($theobjectvars[$thevariable])) { - $theoutput[$theclass][] = $thevariable . " = " . sdd::dobject($theobjectvars[$thevariable], $thehtmlflag); + $theoutput[$theclass][] = $thevariable . " = ".$this->dobject($theobjectvars[$thevariable], $thehtmlflag); } else { $theotput[$theclass][] = $thevariable . " = " . ($thehtmlflag ? preg_replace('|<|s', '<', var_export( diff --git a/sudoku/sdd/class.logfile.php b/sudoku/sdd/class.logfile.php index 0735376..32ed65e 100755 --- a/sudoku/sdd/class.logfile.php +++ b/sudoku/sdd/class.logfile.php @@ -47,7 +47,7 @@ class logfile extends SDD { * @access public */ - public function logfile($thefilename) { + public function init($thefilename) { if (file_exists($thefilename)) { $this->m_handle = fopen($thefilename, 'a'); } else {