ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilExportContainer.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once './Services/Export/classes/class.ilExportFileInfo.php';
5 include_once './Services/Export/classes/class.ilExport.php';
6 
7 
16 {
17  private $cont_export_dir = '';
18  private $cont_manifest_writer = null;
19  private $eo = null;
20 
21 
27  public function __construct(ilExportOptions $eo)
28  {
29  $this->eo = $eo;
30  parent::__construct();
31  }
32 
41  public function exportObject($a_type, $a_id, $a_target_release = "")
42  {
43  // if no target release specified, use latest major release number
44  if ($a_target_release == "")
45  {
46  $v = explode(".", ILIAS_VERSION_NUMERIC);
47  $a_target_release = $v[0].".".$v[1].".0";
48  }
49 
50  // Create base export directory
52  $export_dir = ilExport::_getExportDirectory($a_id, "xml", $a_type);
53  $ts = time();
54  $sub_dir = $ts."__".IL_INST_ID."__".$a_type."_".$a_id;
55 
56  $this->cont_export_dir = $export_dir.DIRECTORY_SEPARATOR.$sub_dir;
57  ilUtil::makeDirParents($this->cont_export_dir);
58 
59  $GLOBALS['ilLog']->write(__METHOD__.' using base directory: '.$this->export_run_dir);
60 
61  $this->manifestWriterBegin($a_type, $a_id, $a_target_release);
62  $this->addContainer();
63  $this->addSubitems($a_id,$a_type,$a_target_release);
64  $this->manifestWriterEnd($a_type, $a_id, $a_target_release);
65 
66  ilUtil::zip($this->cont_export_dir, $this->cont_export_dir.'.zip');
67  ilUtil::delDir($this->cont_export_dir);
68  }
69 
74  protected function manifestWriterBegin($a_type, $a_id, $a_target_release)
75  {
76  $GLOBALS['ilLog']->write(__METHOD__.': wrinting manifest');
77  include_once "./Services/Xml/classes/class.ilXmlWriter.php";
78  $this->cont_manifest_writer = new ilXmlWriter();
79  $this->cont_manifest_writer->xmlHeader();
80  $this->cont_manifest_writer->xmlStartTag(
81  'Manifest',
82  array(
83  "MainEntity" => $a_type,
84  "Title" => ilObject::_lookupTitle($a_id),
85  "TargetRelease" => $a_target_release,
86  "InstallationId" => IL_INST_ID,
87  "InstallationUrl" => ILIAS_HTTP_PATH)
88  );
89  }
90 
95  protected function addContainer()
96  {
97 
98  }
99 
100 
107  protected function addSubitems($a_id,$a_type,$a_target_release)
108  {
109  $GLOBALS['ilLog']->write(__METHOD__);
110  $set_number = 1;
111  foreach($this->eo->getSubitemsForExport() as $ref_id)
112  {
113  // get last export file
114  $obj_id = ilObject::_lookupObjId($ref_id);
115 
116  $expi = ilExportFileInfo::lookupLastExport($obj_id, 'xml',$a_target_release);
117 
118  if(!$expi instanceof ilExportFileInfo)
119  {
120  $GLOBALS['ilLog']->write(__METHOD__.': Cannot find export file for refId '.$ref_id.', type '.ilObject::_lookupType($a_id));
121  continue;
122  }
123 
124  $exp_dir = ilExport::_getExportDirectory($obj_id,'xml',ilObject::_lookupType($obj_id));
125  $exp_full = $exp_dir.DIRECTORY_SEPARATOR.$expi->getFilename();
126 
127  $GLOBALS['ilLog']->write(__METHOD__.': zip path '.$exp_full);
128 
129  // Unzip
130  ilUtil::unzip($exp_full,true,false);
131 
132  // create set directory
133  ilUtil::makeDirParents($this->cont_export_dir.DIRECTORY_SEPARATOR.'set_'.$set_number);
134 
135  // cut .zip
136  $new_path_rel = 'set_'.$set_number.DIRECTORY_SEPARATOR.$expi->getBasename();
137  $new_path_abs = $this->cont_export_dir.DIRECTORY_SEPARATOR.$new_path_rel;
138 
139  $GLOBALS['ilLog']->write(__METHOD__.': '.$new_path_rel.' '.$new_path_abs);
140 
141  // Move export
142  rename(
143  $exp_dir.DIRECTORY_SEPARATOR.$expi->getBasename(),
144  $new_path_abs
145  );
146 
147  $GLOBALS['ilLog']->write($exp_dir.DIRECTORY_SEPARATOR.$expi->getBasename().' -> '.$new_path_abs);
148 
149  // Delete latest container xml of source
150  if($a_id == $obj_id)
151  {
152  $expi->delete();
153  if(file_exists($exp_full))
154  {
155  $GLOBALS['ilLog']->write(__METHOD__.': Deleting'. $exp_full);
156  unlink($exp_full);
157  }
158  }
159 
160  $this->cont_manifest_writer->xmlElement(
161  'ExportSet',
162  array(
163  'Path' => $new_path_rel,
164  'Type' => ilObject::_lookupType($obj_id)
165  )
166  );
167 
168 
169  ++$set_number;
170  }
171  }
172 
180  protected function manifestWriterEnd($a_type, $a_id, $a_target_release)
181  {
182  $this->cont_manifest_writer->xmlEndTag('Manifest');
183  $GLOBALS['ilLog']->write(__METHOD__.': '.$this->cont_export_dir.DIRECTORY_SEPARATOR.'manifest.xml');
184  $this->cont_manifest_writer->xmlDumpFile($this->cont_export_dir.DIRECTORY_SEPARATOR.'manifest.xml',true);
185  }
186 }
187 ?>
static _createExportDirectory($a_obj_id, $a_export_type="xml", $a_obj_type="")
static makeDirParents($a_dir)
Create a new directory and all parent directories.
__construct(ilExportOptions $eo)
Constructor.
const ILIAS_VERSION_NUMERIC
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
static unzip($a_file, $overwrite=false, $a_flat=false)
unzip file
XML writer class.
static _lookupTitle($a_id)
lookup object title
manifestWriterEnd($a_type, $a_id, $a_target_release)
Write manifest footer.
$a_type
Definition: workflow.php:93
manifestWriterBegin($a_type, $a_id, $a_target_release)
Write container manifest.
static _lookupObjId($a_id)
static lookupLastExport($a_obj_id, $a_type, $a_version='')
Lookup last export.
Stores information of creation date and versions of export files
static zip($a_dir, $a_file, $compress_content=false)
zips given directory/file into given zip.file
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
addContainer()
Add container description.
addSubitems($a_id, $a_type, $a_target_release)
Add subitems.
$ref_id
Definition: sahs_server.php:39
static _getExportDirectory($a_obj_id, $a_type="xml", $a_obj_type="", $a_entity="")
Get export directory for an repository object.
exportObject($a_type, $a_id, $a_target_release="")
Export a container.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively