1<?php
2/*
3    +-----------------------------------------------------------------------------+
4    | ILIAS open source                                                           |
5    +-----------------------------------------------------------------------------+
6    | Copyright (c) 1998-2001 ILIAS open source, University of Cologne            |
7    |                                                                             |
8    | This program is free software; you can redistribute it and/or               |
9    | modify it under the terms of the GNU General Public License                 |
10    | as published by the Free Software Foundation; either version 2              |
11    | of the License, or (at your option) any later version.                      |
12    |                                                                             |
13    | This program is distributed in the hope that it will be useful,             |
14    | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
15    | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
16    | GNU General Public License for more details.                                |
17    |                                                                             |
18    | You should have received a copy of the GNU General Public License           |
19    | along with this program; if not, write to the Free Software                 |
20    | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
21    +-----------------------------------------------------------------------------+
22*/
23
24/**
25* Export class for surveys
26*
27* @author Helmut Schottmüller <helmut.schottmueller@mac.com>
28* @version $Id$
29* @ingroup ModulesSurvey
30*/
31class ilSurveyExport
32{
33    public $db;			// database object
34    public $survey_obj;		// survey object
35    public $inst_id;		// installation id
36    public $mode;
37    public $subdir;
38    public $filename;
39    public $export_dir;
40
41    /**
42    * Constructor
43    * @access	public
44    */
45    public function __construct($a_survey_obj, $a_mode = "xml")
46    {
47        global $DIC;
48
49        $ilDB = $DIC->database();
50
51        $this->survey_obj = $a_survey_obj;
52
53        $this->db = $ilDB;
54        $this->mode = $a_mode;
55        $this->inst_id = IL_INST_ID;
56
57        $date = time();
58        switch ($this->mode) {
59            default:
60                $this->export_dir = $this->survey_obj->getExportDirectory();
61                $this->subdir = $date . "__" . $this->inst_id . "__" .
62                    "svy" . "_" . $this->survey_obj->getId();
63                $this->filename = $this->subdir . ".xml";
64                break;
65        }
66    }
67
68    public function getInstId()
69    {
70        return $this->inst_id;
71    }
72
73
74    /**
75    *   build export file (complete zip file)
76    *
77    *   @access public
78    *   @return
79    */
80    public function buildExportFile()
81    {
82        switch ($this->mode) {
83            default:
84                return $this->buildExportFileXML();
85                break;
86        }
87    }
88
89    /**
90    * build xml export file
91    */
92    public function buildExportFileXML()
93    {
94
95        // create directories
96        $this->survey_obj->createExportDirectory();
97        ilUtil::makeDir($this->export_dir . "/" . $this->subdir);
98        ilUtil::makeDir($this->export_dir . "/" . $this->subdir . "/objects");
99
100        // get Log File
101        $expDir = $this->survey_obj->getExportDirectory();
102        include_once "./Services/Logging/classes/class.ilLog.php";
103        $expLog = new ilLog($expDir, "export.log");
104        $expLog->delete();
105        $expLog->setLogFormat("");
106        $expLog->write(date("[y-m-d H:i:s] ") . "Start Export");
107
108        // write xml file
109        $xmlFile = fopen($this->export_dir . "/" . $this->subdir . "/" . $this->filename, "w");
110        fwrite($xmlFile, $this->survey_obj->toXML());
111        fclose($xmlFile);
112
113        // add media objects which were added with tiny mce
114        $this->exportXHTMLMediaObjects($this->export_dir . "/" . $this->subdir);
115
116        // zip the file
117        ilUtil::zip($this->export_dir . "/" . $this->subdir, $this->export_dir . "/" . $this->subdir . ".zip");
118
119        if (@file_exists($this->export_dir . "/" . $this->subdir . ".zip")) {
120            // remove export directory and contents
121            if (@is_dir($this->export_dir . "/" . $this->subdir)) {
122                ilUtil::delDir($this->export_dir . "/" . $this->subdir);
123            }
124        }
125        $expLog->write(date("[y-m-d H:i:s] ") . "Finished Export");
126
127        return $this->export_dir . "/" . $this->subdir . ".zip";
128    }
129
130    public function exportXHTMLMediaObjects($a_export_dir)
131    {
132        include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
133
134        $mobs = ilObjMediaObject::_getMobsOfObject("svy:html", $this->survey_obj->getId());
135        foreach ($mobs as $mob) {
136            $mob_obj = new ilObjMediaObject($mob);
137            $mob_obj->exportFiles($a_export_dir);
138            unset($mob_obj);
139        }
140        // #14850
141        foreach ($this->survey_obj->questions as $question_id) {
142            $mobs = ilObjMediaObject::_getMobsOfObject("spl:html", $question_id);
143            foreach ($mobs as $mob) {
144                $mob_obj = new ilObjMediaObject($mob);
145                $mob_obj->exportFiles($a_export_dir);
146                unset($mob_obj);
147            }
148        }
149    }
150}
151