dokeos-backup
[ class tree: dokeos-backup ] [ index: dokeos-backup ] [ all elements ]

Source for file CourseBuilder.class.php

Documentation is available at CourseBuilder.class.php

  1. <?php // $Id: CourseBuilder.class.php 13309 2007-09-27 07:29:58Z yannoo $
  2. /*
  3. ==============================================================================
  4.     Dokeos - elearning and course management software
  5.  
  6.     Copyright (c) 2004 Dokeos S.A.
  7.     Copyright (c) 2003 Ghent University (UGent)
  8.     Copyright (c) 2001 Universite catholique de Louvain (UCL)
  9.     Copyright (c) Bart Mollet (bart.mollet@hogent.be)
  10.  
  11.     For a full list of contributors, see "credits.txt".
  12.     The full license can be read in "license.txt".
  13.  
  14.     This program is free software; you can redistribute it and/or
  15.     modify it under the terms of the GNU General Public License
  16.     as published by the Free Software Foundation; either version 2
  17.     of the License, or (at your option) any later version.
  18.  
  19.     See the GNU General Public License for more details.
  20.  
  21.     Contact address: Dokeos, 44 rue des palais, B-1030 Brussels, Belgium
  22.     Mail: info@dokeos.com
  23. ==============================================================================
  24. */
  25. require_once ('Course.class.php');
  26. require_once ('Event.class.php');
  27. require_once ('Link.class.php');
  28. require_once ('ToolIntro.class.php');
  29. require_once ('Document.class.php');
  30. require_once ('ScormDocument.class.php');
  31. require_once ('LinkCategory.class.php');
  32. require_once ('CourseDescription.class.php');
  33. require_once ('ForumPost.class.php');
  34. require_once ('ForumTopic.class.php');
  35. require_once ('Forum.class.php');
  36. require_once ('ForumCategory.class.php');
  37. require_once ('Quiz.class.php');
  38. require_once ('QuizQuestion.class.php');
  39. require_once ('Learnpath.class.php');
  40. require_once ('Survey.class.php');
  41. require_once ('SurveyQuestion.class.php');
  42. /**
  43.  * Class which can build a course-object from a Dokeos-course.
  44.  * @author Bart Mollet <bart.mollet@hogent.be>
  45.  * @package dokeos.backup
  46.  */
  47. {
  48.     /**
  49.      * The course
  50.      */
  51.     var $course;
  52.     /**
  53.      * Create a new CourseBuilder
  54.      */
  55.     function CourseBuilder()
  56.     {
  57.         global $_course;
  58.         $this->course = new Course();
  59.         $this->course->code $_course['official_code'];
  60.         $this->course->path api_get_path(SYS_COURSE_PATH).$_course['path'].'/';
  61.         $this->course->backup_path api_get_path(SYS_COURSE_PATH).$_course['path'];
  62.     }
  63.     /**
  64.      * Get the created course
  65.      * @return course The course
  66.      */
  67.     function get_course()
  68.     {
  69.         return $this->course;
  70.     }
  71.     /**
  72.      * Build the course-object
  73.      */
  74.     function build()
  75.     {
  76.         $this->build_events();
  77.         $this->build_announcements();
  78.         $this->build_links();
  79.         $this->build_tool_intro();
  80.         //$this->build_forums();
  81.         $this->build_documents();
  82.         $this->build_course_descriptions();
  83.         $this->build_quizzes();
  84.         $this->build_learnpaths();
  85.         $this->build_surveys();
  86.         
  87.         //TABLE_LINKED_RESOURCES is the "resource" course table, which is deprecated, apparently
  88.         $table Database :: get_course_table(TABLE_LINKED_RESOURCES);
  89.         foreach ($this->course->resources as $type => $resources)
  90.         {
  91.             foreach ($resources as $id => $resource)
  92.             {
  93.                 $sql "SELECT * FROM ".$table." WHERE source_type = '".$resource->get_type()."' AND source_id = '".$resource->get_id()."'";
  94.                 $res api_sql_query($sql__FILE____LINE__);
  95.                 while ($link Database::fetch_object($res))
  96.                 {
  97.                     $this->course->resources[$type][$id]->add_linked_resource($link->resource_type$link->resource_id);
  98.                 }
  99.             }
  100.         }
  101.         $table Database :: get_course_table(TABLE_ITEM_PROPERTY);
  102.         foreach ($this->course->resources as $type => $resources)
  103.         {
  104.             foreach ($resources as $id => $resource)
  105.             {
  106.                 $tool $resource->get_tool();
  107.                 if ($tool != null)
  108.                 {
  109.                     $sql "SELECT * FROM $table WHERE TOOL = '".$tool."' AND ref='".$resource->get_id()."'";
  110.                     $res api_sql_query($sql,__FILE__,__LINE__);
  111.                     $all_properties array ();
  112.                     while ($item_property Database::fetch_array($res))
  113.                     {
  114.                         $all_properties[$item_property;
  115.                     }
  116.                     $this->course->resources[$type][$id]->item_properties $all_properties;
  117.                 }
  118.             }
  119.         }
  120.         return $this->course;
  121.     }
  122.     /**
  123.      * Build the documents
  124.      */
  125.     function build_documents()
  126.     {
  127.         $table_doc Database :: get_course_table(TABLE_DOCUMENT);
  128.         $table_prop Database :: get_course_table(TABLE_ITEM_PROPERTY);
  129.         $sql 'SELECT * FROM '.$table_doc.' d, '.$table_prop.' p WHERE tool = \''.TOOL_DOCUMENT.'\' AND p.ref = d.id AND p.visibility != 2 ORDER BY path';
  130.         $db_result api_sql_query($sql__FILE____LINE__);
  131.         while ($obj Database::fetch_object($db_result))
  132.         {
  133.             $doc new Document($obj->id$obj->path$obj->comment$obj->title$obj->filetype$obj->size);
  134.             $this->course->add_resource($doc);
  135.         }
  136.     }
  137.     /**
  138.      * Build the forums
  139.      */
  140.     function build_forums()
  141.     {
  142.         $table Database :: get_course_table(TABLE_FORUM);
  143.         $sql 'SELECT * FROM '.$table;
  144.         $db_result api_sql_query($sql__FILE____LINE__);
  145.         while ($obj Database::fetch_object($db_result))
  146.         {
  147.             $forum new Forum($obj->forum_id$obj->forum_name$obj->forum_description$obj->cat_id$obj->forum_last_post_id);
  148.             $this->course->add_resource($forum);
  149.             $this->build_forum_category($obj->cat_id);
  150.         }
  151.         $this->build_forum_topics();
  152.         $this->build_forum_posts();
  153.     }
  154.     /**
  155.      * Build a forum-category
  156.      */
  157.     function build_forum_category($id)
  158.     {
  159.         $table Database :: get_course_table(TABLE_FORUM_CATEGORY);
  160.         $sql 'SELECT * FROM '.$table.' WHERE cat_id = '.$id;
  161.         $db_result api_sql_query($sql__FILE____LINE__);
  162.         while ($obj Database::fetch_object($db_result))
  163.         {
  164.             $forum_category new ForumCategory($obj->cat_id$obj->cat_title);
  165.             $this->course->add_resource($forum_category);
  166.         }
  167.     }
  168.     /**
  169.      * Build the forum-topics
  170.      */
  171.     function build_forum_topics()
  172.     {
  173.         $table Database :: get_course_table(TABLE_FORUM_POST);
  174.         $sql 'SELECT * FROM '.$table;
  175.         $db_result api_sql_query($sql__FILE____LINE__);
  176.         while ($obj Database::fetch_object($db_result))
  177.         {
  178.             $forum_topic new ForumTopic($obj->topic_id$obj->topic_title$obj->topic_time$obj->prenom$obj->nom$obj->topic_notify$obj->forum_id$obj->topic_last_post_id);
  179.             $this->course->add_resource($forum_topic);
  180.         }
  181.     }
  182.     /**
  183.      * Build the forum-posts
  184.      */
  185.     function build_forum_posts()
  186.     {
  187.         $table_post Database :: get_course_table(TABLE_FORUM_POST);
  188.         $table_posttext Database :: get_course_table(TOOL_FORUM_POST_TEXT_TABLE);
  189.         $sql 'SELECT * FROM '.$table_post.' p,'.$table_posttext.' pt WHERE p.post_id = pt.post_id';
  190.         $db_result api_sql_query($sql__FILE____LINE__);
  191.         while ($obj Database::fetch_object($db_result))
  192.         {
  193.             $forum_post new ForumPost($obj->post_id$obj->post_title$obj->post_text$obj->post_time$obj->poster_ip$obj->prenom$obj->nom$obj->topic_notify$obj->parent_id$obj->topic_id);
  194.             $this->course->add_resource($forum_post);
  195.         }
  196.     }
  197.     /**
  198.      * Build the links
  199.      */
  200.     function build_links()
  201.     {
  202.         $table Database :: get_course_table(TABLE_LINK);
  203.         $table_prop Database :: get_course_table(TABLE_ITEM_PROPERTY);
  204.         $sql "SELECT * FROM $table l, $table_prop p WHERE p.ref=l.id AND p.tool = '".TOOL_LINK."' AND p.visibility != 2  ORDER BY l.display_order";
  205.         $db_result api_sql_query($sql__FILE____LINE__);
  206.         while ($obj Database::fetch_object($db_result))
  207.         {
  208.             $link new Link($obj->id$obj->title$obj->url$obj->description$obj->category_id$obj->on_homepage);
  209.             $this->course->add_resource($link);
  210.             $res $this->build_link_category($obj->category_id);
  211.             if($res 0)
  212.             {
  213.                 $this->course->resources[RESOURCE_LINK][$obj->id]->add_linked_resource(RESOURCE_LINKCATEGORY$obj->category_id);
  214.             }
  215.         }
  216.     }
  217.     /**
  218.      * Build tool intro
  219.      */
  220.     function build_tool_intro()
  221.     {
  222.         $table Database :: get_course_table(TABLE_TOOL_INTRO);
  223.         $sql 'SELECT * FROM '.$table;
  224.         $db_result api_sql_query($sql__FILE____LINE__);
  225.         while ($obj Database::fetch_object($db_result))
  226.         {
  227.             $tool_intro new ToolIntro($obj->id$obj->intro_text);
  228.             $this->course->add_resource($tool_intro);
  229.         }
  230.     }
  231.     /**
  232.      * Build a link category
  233.      */
  234.     function build_link_category($id)
  235.     {
  236.         $link_cat_table Database :: get_course_table(TABLE_LINK_CATEGORY);
  237.         $sql 'SELECT * FROM '.$link_cat_table.' WHERE id = '.$id;
  238.         $db_result api_sql_query($sql__FILE____LINE__);
  239.         while ($obj Database::fetch_object($db_result))
  240.         {
  241.             $link_category new LinkCategory($obj->id$obj->category_title$obj->description$obj->display_order);
  242.             $this->course->add_resource($link_category);
  243.             return $id;
  244.         }
  245.         return 0;
  246.     }
  247.     /**
  248.      * Build the Quizzes
  249.      */
  250.     function build_quizzes()
  251.     {
  252.         $table_qui Database :: get_course_table(TABLE_QUIZ_TEST);
  253.         $table_rel Database :: get_course_table(TABLE_QUIZ_TEST_QUESTION);
  254.         $table_doc Database :: get_course_table(TABLE_DOCUMENT);
  255.         $sql 'SELECT * FROM '.$table_qui.' WHERE active >=0'//select only quizzes with active = 0 or 1 (not -1 which is for deleted quizzes)
  256.         $db_result api_sql_query($sql__FILE____LINE__);
  257.         while ($obj Database::fetch_object($db_result))
  258.         {
  259.             if (strlen($obj->sound0)
  260.             {
  261.                 $doc Database::fetch_object(api_sql_query("SELECT id FROM ".$table_doc." WHERE path = '/audio/".$obj->sound."'"));
  262.                 $obj->sound $doc->id;
  263.             }
  264.             $quiz new Quiz($obj->id$obj->title$obj->description$obj->random$obj->type$obj->active$obj->sound);
  265.             $sql 'SELECT * FROM '.$table_rel.' WHERE exercice_id = '.$obj->id;
  266.             $db_result2 api_sql_query($sql__FILE____LINE__);
  267.             while ($obj2 Database::fetch_object($db_result2))
  268.             {
  269.                 $quiz->add_question($obj2->question_id);
  270.             }
  271.             $this->course->add_resource($quiz);
  272.         }
  273.         $this->build_quiz_questions();
  274.     }
  275.     /**
  276.      * Build the Quiz-Questions
  277.      */
  278.     function build_quiz_questions()
  279.     {
  280.         $table_que Database :: get_course_table(TABLE_QUIZ_QUESTION);
  281.         $table_ans Database :: get_course_table(TABLE_QUIZ_ANSWER);
  282.         $sql 'SELECT * FROM '.$table_que;
  283.         $db_result api_sql_query($sql__FILE____LINE__);
  284.         while ($obj Database::fetch_object($db_result))
  285.         {
  286.             $question new QuizQuestion($obj->id$obj->question$obj->description$obj->ponderation$obj->type$obj->position$obj->picture);
  287.             $sql 'SELECT * FROM '.$table_ans.' WHERE question_id = '.$obj->id;
  288.             $db_result2 api_sql_query($sql__FILE____LINE__);
  289.             while ($obj2 Database::fetch_object($db_result2))
  290.             {
  291.                 $question->add_answer($obj2->answer$obj2->correct$obj2->comment$obj2->ponderation$obj2->position$obj2->hotspot_coordinates$obj2->hotspot_type);
  292.             }
  293.             $this->course->add_resource($question);
  294.         }
  295.     }
  296.     /**
  297.      * Build the Surveys
  298.      */
  299.     function build_surveys()
  300.     {
  301.         $table_survey Database :: get_course_table(TABLE_SURVEY);
  302.         $table_question Database :: get_course_table(TABLE_SURVEY_QUESTION);
  303.         $sql 'SELECT * FROM '.$table_survey;
  304.         $db_result api_sql_query($sql__FILE____LINE__);
  305.         while ($obj Database::fetch_object($db_result))
  306.         {
  307.             $survey new Survey($obj->survey_id$obj->code,$obj->title,
  308.                                 $obj->subtitle$obj->author$obj->lang,
  309.                                 $obj->avail_from$obj->avail_till$obj->is_shared,
  310.                                 $obj->template$obj->intro$obj->surveythanks,
  311.                                 $obj->creation_date$obj->invited$obj->answered,
  312.                                 $obj->invite_mail$obj->reminder_mail);
  313.             $sql 'SELECT * FROM '.$table_question.' WHERE survey_id = '.$obj->survey_id;
  314.             $db_result2 api_sql_query($sql__FILE____LINE__);
  315.             while ($obj2 Database::fetch_object($db_result2))
  316.             {
  317.                 $survey->add_question($obj2->question_id);
  318.             }
  319.             $this->course->add_resource($survey);
  320.         }
  321.         $this->build_survey_questions();
  322.     }
  323.     /**
  324.      * Build the Survey Questions
  325.      */
  326.     function build_survey_questions()
  327.     {
  328.         $table_que Database :: get_course_table(TABLE_SURVEY_QUESTION);
  329.         $table_opt Database :: get_course_table(TABLE_SURVEY_QUESTION_OPTION);
  330.         $sql 'SELECT * FROM '.$table_que;
  331.         $db_result api_sql_query($sql__FILE____LINE__);
  332.         while ($obj Database::fetch_object($db_result))
  333.         {
  334.             $question new SurveyQuestion($obj->question_id$obj->survey_id,
  335.                                             $obj->survey_question$obj->survey_question_comment,
  336.                                             $obj->type$obj->display$obj->sort,
  337.                                             $obj->shared_question_id$obj->max_value);
  338.             $sql 'SELECT * FROM '.$table_opt.' WHERE question_id = '."'".$obj->question_id."'";
  339.             $db_result2 api_sql_query($sql__FILE____LINE__);
  340.             while ($obj2 Database::fetch_object($db_result2))
  341.             {
  342.                 $question->add_answer($obj2->option_text$obj2->sort);
  343.             }
  344.             $this->course->add_resource($question);
  345.         }
  346.     }
  347.     /**
  348.      * Build the announcements
  349.      */
  350.     function build_announcements()
  351.     {
  352.         $table Database :: get_course_table(TABLE_ANNOUNCEMENT);
  353.         $sql 'SELECT * FROM '.$table;
  354.         $db_result api_sql_query($sql__FILE____LINE__);
  355.         while ($obj Database::fetch_object($db_result))
  356.         {
  357.             $announcement new Announcement($obj->id$obj->title$obj->content$obj->end_date,$obj->display_order,$obj->email_sent);
  358.             $this->course->add_resource($announcement);
  359.         }
  360.     }
  361.     /**
  362.      * Build the events
  363.      */
  364.     function build_events()
  365.     {
  366.         $table Database :: get_course_table(TABLE_AGENDA);
  367.         $sql 'SELECT * FROM '.$table;
  368.         $db_result api_sql_query($sql__FILE____LINE__);
  369.         while ($obj Database::fetch_object($db_result))
  370.         {
  371.             $event new Event($obj->id$obj->title$obj->content$obj->start_date$obj->end_date);
  372.             $this->course->add_resource($event);
  373.         }
  374.     }
  375.     /**
  376.      * Build the course-descriptions
  377.      */
  378.     function build_course_descriptions()
  379.     {
  380.         $table Database :: get_course_table(TABLE_COURSE_DESCRIPTION);
  381.         $sql 'SELECT * FROM '.$table;
  382.         $db_result api_sql_query($sql__FILE____LINE__);
  383.         while ($obj Database::fetch_object($db_result))
  384.         {
  385.             $cd new CourseDescription($obj->id$obj->title$obj->content);
  386.             $this->course->add_resource($cd);
  387.         }
  388.     }
  389.     /**
  390.      * Build the learnpaths
  391.      */
  392.     function build_learnpaths()
  393.     {
  394.         $table_main     Database :: get_course_table(TABLE_LP_MAIN);
  395.         $table_item     Database :: get_course_table(TABLE_LP_ITEM);
  396.         $table_tool     Database::get_course_table(TABLE_TOOL_LIST);
  397.  
  398.         $sql 'SELECT * FROM '.$table_main;
  399.         $db_result api_sql_query($sql__FILE____LINE__);
  400.  
  401.         while ($obj Database::fetch_object($db_result))
  402.         {
  403.  
  404.             $items array();
  405.             $sql_items "SELECT * FROM ".$table_item." WHERE lp_id = ".$obj->id."";
  406.             $db_items api_sql_query($sql_items);
  407.             while ($obj_item Database::fetch_object($db_items))
  408.             {
  409.                 $item['id'$obj_item->id;
  410.                 $item['item_type'$obj_item->item_type;
  411.                 $item['ref'$obj_item->ref;
  412.                 $item['title'$obj_item->title;
  413.                 $item['description'$obj_item->description;
  414.                 $item['path'$obj_item->path;
  415.                 $item['min_score'$obj_item->min_score;
  416.                 $item['max_score'$obj_item->max_score;
  417.                 $item['mastery_score'$obj_item->mastery_score;
  418.                 $item['parent_item_id'$obj_item->parent_item_id;
  419.                 $item['previous_item_id'$obj_item->previous_item_id;
  420.                 $item['next_item_id'$obj_item->next_item_id;
  421.                 $item['display_order'$obj_item->display_order;
  422.                 $item['prerequisite'$obj_item->prerequisite;
  423.                 $item['parameters'$obj_item->parameters;
  424.                 $item['launch_data'$obj_item->launch_data;
  425.                 $items[$item;
  426.             }
  427.  
  428.             $sql_tool "SELECT id FROM ".$table_tool." WHERE (link LIKE '%lp_controller.php%lp_id=".$obj->id."%' and image='scormbuilder.gif') AND visibility='1'";
  429.             $db_tool api_sql_query($sql_tool);
  430.  
  431.             if(Database::num_rows($db_tool))
  432.             {
  433.                 $visibility='1';
  434.             }
  435.             else
  436.             {
  437.                 $visibility='0';
  438.             }
  439.  
  440.             $lp new Learnpath($obj->id,
  441.                                 $obj->lp_type,
  442.                                 $obj->name,
  443.                                 $obj->path,
  444.                                 $obj->ref,
  445.                                 $obj->description,
  446.                                 $obj->content_local,
  447.                                 $obj->default_encoding,
  448.                                 $obj->default_view_mod,
  449.                                 $obj->prevent_reinit,
  450.                                 $obj->force_commit,
  451.                                 $obj->content_maker,
  452.                                 $obj->display_order,
  453.                                 $obj->js_lib,
  454.                                 $obj->content_license,
  455.                                 $obj->debug,
  456.                                 $visibility,
  457.                                 $items);
  458.  
  459.             $this->course->add_resource($lp);
  460.         }
  461.  
  462.         //save scorm directory (previously build_scorm_documents())
  463.         $i 1;
  464.         if($dir=@opendir($this->course->backup_path.'/scorm'))
  465.         {
  466.             while($file=readdir($dir))
  467.             {
  468.                 if(is_dir($this->course->backup_path.'/scorm/'.$file&& !in_array($file,array('.','..')))
  469.                 {
  470.                     $doc new ScormDocument($i++'/'.$file$file);
  471.                     $this->course->add_resource($doc);
  472.                 }
  473.             }
  474.  
  475.             closedir($dir);
  476.         }
  477.     }
  478. }
  479. ?>

Documentation generated on Thu, 12 Jun 2008 13:11:24 -0500 by phpDocumentor 1.4.1