. /** * Contains functions used by importppt.php that naturally pertain to importing * powerpoint presentations into the lesson module * * @package lesson * @copyright 2009 Sam Hemelryk * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later **/ /** * A recursive function to build a html list * * @param array $matches * @param string $list * @param int $i * @param int $depth * @return string */ function lesson_importppt_build_list(array &$matches, $list, &$i, $depth) { while($i < count($matches[1])) { $class = lesson_importppt_isolate_class($matches[1][$i]); if (strstr($class, 'B')) { // make sure we are still working with bullet classes if ($class == 'B') { $this_depth = 0; // calling class B depth 0 } else { // set the depth number. So B1 is depth 1 and B2 is depth 2 and so on $this_depth = substr($class, 1); if (!is_numeric($this_depth)) { print_error('invalidnum'); } } if ($this_depth < $depth) { // we are moving back a level in the nesting break; } if ($this_depth > $depth) { // we are moving in a lvl in nesting $list .= ''; return $list; } /** * Given an html tag, this function will * * @param string $string * @return string */ function lesson_importppt_isolate_class($string) { if($class = strstr($string, 'class=')) { // first step in isolating the class $class = substr($class, strpos($class, '=')+1); // 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 * * @param string $string * @return string */ function lesson_importppt_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; } } /** * Creates objects an object with the page and answers that are to be inserted into the database * * @param array $pageobjects * @param int $lessonid * @return array */ function lesson_create_objects($pageobjects, $lessonid) { $branchtables = array(); $branchtable = new stdClass; // all pages have this info $page->lessonid = $lessonid; $page->prevpageid = 0; $page->nextpageid = 0; $page->qtype = LESSON_PAGE_BRANCHTABLE; $page->qoption = 0; $page->layout = 1; $page->display = 1; $page->timecreated = time(); $page->timemodified = 0; // all answers are the same $answer->lessonid = $lessonid; $answer->jumpto = LESSON_NEXTPAGE; $answer->grade = 0; $answer->score = 0; $answer->flags = 0; $answer->timecreated = time(); $answer->timemodified = 0; $answer->answer = "Next"; $answer->response = ""; $answers[] = clone($answer); $answer->jumpto = LESSON_PREVIOUSPAGE; $answer->answer = "Previous"; $answers[] = clone($answer); $branchtable->answers = $answers; $i = 1; foreach ($pageobjects as $pageobject) { if ($pageobject->title == '') { $page->title = "Page $i"; // no title set so make a generic one } else { $page->title = $pageobject->title; } $page->contents = ''; // nab all the images first $page->images = $pageobject->images; foreach ($page->images as $image) { $imagetag = ''; $imagetag = str_replace("\n", '', $imagetag); $imagetag = str_replace("\r", '', $imagetag); $imagetag = str_replace("'", '"', $imagetag); // imgstyle $page->contents .= $imagetag; } // 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 .= $content; } $branchtable->page = clone($page); // add the page $branchtables[] = clone($branchtable); // add it all to our array $i++; } return $branchtables; } /** * Form displayed to the user asking them to select a file to upload * * @copyright 2009 Sam Hemelryk * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class lesson_importppt_form extends moodleform { public function definition() { global $COURSE; $mform = $this->_form; $mform->addElement('hidden', 'id'); $mform->setType('id', PARAM_INT); $mform->addElement('hidden', 'pageid'); $mform->setType('pageid', PARAM_INT); $filepickeroptions = array(); $filepickeroptions['filetypes'] = array('*.zip'); $filepickeroptions['maxbytes'] = $COURSE->maxbytes; $mform->addElement('filepicker', 'pptzip', get_string('upload'), null, $filepickeroptions); $mform->addRule('pptzip', null, 'required', null, 'client'); $this->add_action_buttons(null, get_string("uploadthisfile")); } }