123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- <?php
- /* For licensing terms, see /license.txt */
- require_once 'LinkCategory.class.php';
- require_once 'Announcement.class.php';
- require_once 'Event.class.php';
- /**
- * A course-object to use in Export/Import/Backup/Copy
- * @author Bart Mollet <bart.mollet@hogent.be>
- * @package chamilo.backup
- */
- class Course
- {
- public $resources;
- public $code;
- public $path;
- public $destination_path;
- public $destination_db;
- public $encoding;
- /**
- * Create a new Course-object
- */
- public function __construct()
- {
- $this->resources = array();
- $this->code = '';
- $this->path = '';
- $this->backup_path = '';
- $this->encoding = api_get_system_encoding();
- }
- /**
- * Check if a resource links to the given resource
- */
- public function is_linked_resource(& $resource_to_check)
- {
- foreach ($this->resources as $type => $resources) {
- if (is_array($resources)) {
- foreach ($resources as $resource) {
- if ($resource->links_to($resource_to_check) ) {
- return true;
- }
- if ($type == RESOURCE_LEARNPATH && get_class($resource)=='CourseCopyLearnpath') {
- if ($resource->has_item($resource_to_check)) {
- return true;
- }
- }
- }
- }
- }
- return false;
- }
- /**
- * Add a resource from a given type to this course
- */
- public function add_resource(& $resource)
- {
- $this->resources[$resource->get_type()][$resource->get_id()] = $resource;
- }
- /**
- * Does this course has resources?
- * @param int $resource_type Check if this course has resources of the
- * given type. If no type is given, check if course has resources of any
- * type.
- */
- public function has_resources($resource_type = null)
- {
- if( $resource_type != null) {
- return isset($this->resources[$resource_type]) && is_array($this->resources[$resource_type]) && (count(
- $this->resources[$resource_type]
- ) > 0);
- }
- return (count($this->resources) > 0);
- }
- /**
- * @inheritdoc
- */
- public function show()
- { /*
- echo '<pre>';
- print_r($this);
- echo '</pre>';*/
- }
- /**
- * Returns sample text based on the imported course content.
- * This sample text is to be used for course language or encoding detection if there is missing (meta)data in the archive.
- * @return string The resulting sample text extracted from some common resources' data fields.
- */
- public function get_sample_text()
- {
- $sample_text = '';
- foreach ($this->resources as $type => & $resources) {
- if (count($resources) > 0) {
- foreach ($resources as $id => & $resource) {
- $title = '';
- $description = '';
- switch ($type) {
- case RESOURCE_ANNOUNCEMENT:
- $title = $resource->title;
- $description = $resource->content;
- break;
- case RESOURCE_DOCUMENT:
- $title = $resource->title;
- $description = $resource->comment;
- break;
- case RESOURCE_EVENT:
- $title = $resource->title;
- $description = $resource->content;
- break;
- case RESOURCE_FORUM:
- $title = $resource->title;
- $description = $resource->description;
- break;
- case RESOURCE_FORUMCATEGORY:
- $title = $resource->title;
- $description = $resource->description;
- break;
- case RESOURCE_FORUMPOST:
- $title = $resource->title;
- $description = $resource->text;
- break;
- case RESOURCE_FORUMTOPIC:
- $title = $resource->title;
- break;
- case RESOURCE_GLOSSARY:
- $title = $resource->name;
- $description = $resource->description;
- break;
- case RESOURCE_LEARNPATH:
- $title = $resource->name;
- $description = $resource->description;
- break;
- case RESOURCE_LINK:
- $title = $resource->title;
- $description = $resource->description;
- break;
- case RESOURCE_LINKCATEGORY:
- $title = $resource->title;
- $description = $resource->description;
- break;
- case RESOURCE_QUIZ:
- $title = $resource->title;
- $description = $resource->description;
- break;
- case RESOURCE_TEST_CATEGORY:
- $title = $resource->title;
- $description = $resource->description;
- break;
- case RESOURCE_QUIZQUESTION:
- $title = $resource->question;
- $description = $resource->description;
- break;
- case RESOURCE_SCORM:
- $title = $resource->title;
- break;
- case RESOURCE_SURVEY:
- $title = $resource->title;
- $description = $resource->subtitle;
- break;
- case RESOURCE_SURVEYQUESTION:
- $title = $resource->survey_question;
- $description = $resource->survey_question_comment;
- break;
- case RESOURCE_TOOL_INTRO:
- $description = $resource->intro_text;
- break;
- case RESOURCE_WIKI:
- $title = $resource->title;
- $description = $resource->content;
- break;
- case RESOURCE_THEMATIC:
- $title = $resource->title;
- $description = $resource->content;
- break;
- case RESOURCE_ATTENDANCE:
- $title = $resource->params['name'];
- $description = $resource->params['description'];
- break;
- case RESOURCE_WORK:
- $title = $resource->title;
- $description = $resource->description;
- break;
- default:
- break;
- }
- $title = api_html_to_text($title);
- $description = api_html_to_text($description);
- if (!empty($title)) {
- $sample_text .= $title."\n";
- }
- if (!empty($description)) {
- $sample_text .= $description."\n";
- }
- if (!empty($title) || !empty($description)) {
- $sample_text .= "\n";
- }
- }
- }
- }
- return $sample_text;
- }
- /**
- * Converts to the system encoding all the language-sensitive fields in the imported course.
- */
- public function to_system_encoding()
- {
- if (api_equal_encodings($this->encoding, api_get_system_encoding())) {
- return;
- }
- foreach ($this->resources as $type => & $resources) {
- if (count($resources) > 0) {
- foreach ($resources as & $resource) {
- switch ($type) {
- case RESOURCE_ANNOUNCEMENT:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->content = api_to_system_encoding($resource->content, $this->encoding);
- break;
- case RESOURCE_DOCUMENT:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->comment = api_to_system_encoding($resource->comment, $this->encoding);
- break;
- case RESOURCE_EVENT:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->content = api_to_system_encoding($resource->content, $this->encoding);
- break;
- case RESOURCE_FORUM:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->description = api_to_system_encoding($resource->description, $this->encoding);
- break;
- case RESOURCE_FORUMCATEGORY:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->description = api_to_system_encoding($resource->description, $this->encoding);
- break;
- case RESOURCE_FORUMPOST:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->text = api_to_system_encoding($resource->text, $this->encoding);
- $resource->poster_name = api_to_system_encoding($resource->poster_name, $this->encoding);
- break;
- case RESOURCE_FORUMTOPIC:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->topic_poster_name = api_to_system_encoding($resource->topic_poster_name, $this->encoding);
- $resource->title_qualify = api_to_system_encoding($resource->title_qualify, $this->encoding);
- break;
- case RESOURCE_GLOSSARY:
- $resource->name = api_to_system_encoding($resource->name, $this->encoding);
- $resource->description = api_to_system_encoding($resource->description, $this->encoding);
- break;
- case RESOURCE_LEARNPATH:
- $resource->name = api_to_system_encoding($resource->name, $this->encoding);
- $resource->description = api_to_system_encoding($resource->description, $this->encoding);
- $resource->content_maker = api_to_system_encoding($resource->content_maker, $this->encoding);
- $resource->content_license = api_to_system_encoding($resource->content_license, $this->encoding);
- break;
- case RESOURCE_LINK:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->description = api_to_system_encoding($resource->description, $this->encoding);
- break;
- case RESOURCE_LINKCATEGORY:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->description = api_to_system_encoding($resource->description, $this->encoding);
- break;
- case RESOURCE_QUIZ:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->description = api_to_system_encoding($resource->description, $this->encoding);
- break;
- case RESOURCE_QUIZQUESTION:
- $resource->question = api_to_system_encoding($resource->question, $this->encoding);
- $resource->description = api_to_system_encoding($resource->description, $this->encoding);
- if (is_array($resource->answers) && count($resource->answers) > 0) {
- foreach ($resource->answers as $index => & $answer) {
- $answer['answer'] = api_to_system_encoding($answer['answer'], $this->encoding);
- $answer['comment'] = api_to_system_encoding($answer['comment'], $this->encoding);
- }
- }
- break;
- case RESOURCE_TEST_CATEGORY:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->description = api_to_system_encoding($resource->description, $this->encoding);
- break;
- case RESOURCE_SCORM:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- break;
- case RESOURCE_SURVEY:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->subtitle = api_to_system_encoding($resource->subtitle, $this->encoding);
- $resource->author = api_to_system_encoding($resource->author, $this->encoding);
- $resource->intro = api_to_system_encoding($resource->intro, $this->encoding);
- $resource->surveythanks = api_to_system_encoding($resource->surveythanks, $this->encoding);
- break;
- case RESOURCE_SURVEYQUESTION:
- $resource->survey_question = api_to_system_encoding($resource->survey_question, $this->encoding);
- $resource->survey_question_comment = api_to_system_encoding($resource->survey_question_comment, $this->encoding);
- break;
- case RESOURCE_TOOL_INTRO:
- $resource->intro_text = api_to_system_encoding($resource->intro_text, $this->encoding);
- break;
- case RESOURCE_WIKI:
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->content = api_to_system_encoding($resource->content, $this->encoding);
- $resource->reflink = api_to_system_encoding($resource->reflink, $this->encoding);
- break;
- case RESOURCE_WORK:
- $resource->url = api_to_system_encoding($resource->url, $this->encoding);
- $resource->title = api_to_system_encoding($resource->title, $this->encoding);
- $resource->description = api_to_system_encoding($resource->description, $this->encoding);
- break;
- default:
- break;
- }
- }
- }
- }
- $this->encoding = api_get_system_encoding();
- }
- /**
- * Serialize the course with the best serializer available
- */
- public static function serialize($course)
- {
- if (extension_loaded('igbinary')) {
- return igbinary_serialize($course);
- } else {
- return serialize($course);
- }
- }
- /**
- * Unserialize the course with the best serializer available
- */
- public static function unserialize($course)
- {
- if (extension_loaded('igbinary')) {
- return igbinary_unserialize($course);
- } else {
- return unserialize($course);
- }
- }
- }
|