ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilPCFileList.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5
6require_once("./Services/COPage/classes/class.ilPageContent.php");
7
19{
21
25 function init()
26 {
27 $this->setType("flst");
28 }
29
30 function setNode(&$a_node)
31 {
32 parent::setNode($a_node); // this is the PageContent node
33 $this->list_node =& $a_node->first_child(); // this is the Table node
34 }
35
36 function create(&$a_pg_obj, $a_hier_id, $a_pc_id = "")
37 {
38 $this->node = $this->createPageContentNode();
39 $a_pg_obj->insertContent($this, $a_hier_id, IL_INSERT_AFTER, $a_pc_id);
40 $this->list_node =& $this->dom->create_element("FileList");
41 $this->list_node =& $this->node->append_child($this->list_node);
42 }
43
44 /*
45 function addItems($a_nr)
46 {
47 for ($i=1; $i<=$a_nr; $i++)
48 {
49 $new_item =& $this->dom->create_element("ListItem");
50 $new_item =& $this->list_node->append_child($new_item);
51 }
52 }*/
53
54 function appendItem($a_id, $a_location, $a_format)
55 {
56 // File Item
57 $new_item =& $this->dom->create_element("FileItem");
58 $new_item =& $this->list_node->append_child($new_item);
59
60 // Identifier
61 $id_node =& $this->dom->create_element("Identifier");
62 $id_node =& $new_item->append_child($id_node);
63 $id_node->set_attribute("Catalog", "ILIAS");
64 $id_node->set_attribute("Entry", "il__file_".$a_id);
65
66 // Location
67 $loc_node =& $this->dom->create_element("Location");
68 $loc_node =& $new_item->append_child($loc_node);
69 $loc_node->set_attribute("Type", "LocalFile");
70 $loc_node->set_content($a_location);
71
72 // Format
73 $form_node =& $this->dom->create_element("Format");
74 $form_node =& $new_item->append_child($form_node);
75 $form_node->set_content($a_format);
76 }
77
78 function setListTitle($a_title, $a_language)
79 {
81 $this->list_node, "Title", array("FileItem"),
82 $a_title, array("Language" => $a_language));
83 }
84
85 function getListTitle()
86 {
87 $chlds =& $this->list_node->child_nodes();
88 for($i=0; $i<count($chlds); $i++)
89 {
90 if ($chlds[$i]->node_name() == "Title")
91 {
92 return $chlds[$i]->get_content();
93 }
94 }
95 return "";
96 }
97
98 function getLanguage()
99 {
100 $chlds =& $this->list_node->child_nodes();
101 for($i=0; $i<count($chlds); $i++)
102 {
103 if ($chlds[$i]->node_name() == "Title")
104 {
105 return $chlds[$i]->get_attribute("Language");
106 }
107 }
108 return "";
109 }
110
114 function getFileList()
115 {
116 $files = array();
117
118 // File Item
119 $childs = $this->list_node->child_nodes();
120 for ($i=0; $i<count($childs); $i++)
121 {
122 if ($childs[$i]->node_name() == "FileItem")
123 {
124 $id = $entry = "";
125 $pc_id = $childs[$i]->get_attribute("PCID");
126 $hier_id = $childs[$i]->get_attribute("HierId");
127 $class = $childs[$i]->get_attribute("Class");
128
129 // Identifier
130 $id_node = $childs[$i]->first_child();
131 if ($id_node->node_name() == "Identifier")
132 {
133 $entry = $id_node->get_attribute("Entry");
134 if (substr($entry, 0, 9) == "il__file_")
135 {
136 $id = substr($entry, 9);
137 }
138 }
139 $files[] = array("entry" => $entry, "id" => $id,
140 "pc_id" => $pc_id, "hier_id" => $hier_id,
141 "class" => $class);
142 }
143 }
144
145 return $files;
146 }
147
151 function deleteFileItems($a_ids)
152 {
153 $files = array();
154
155 // File Item
156 $childs = $this->list_node->child_nodes();
157
158 for ($i=0; $i<count($childs); $i++)
159 {
160 if ($childs[$i]->node_name() == "FileItem")
161 {
162 $id = $entry = "";
163 $pc_id = $childs[$i]->get_attribute("PCID");
164 $hier_id = $childs[$i]->get_attribute("HierId");
165
166 if (in_array($hier_id.":".$pc_id, $a_ids))
167 {
168 $childs[$i]->unlink($childs[$i]);
169 }
170 }
171 }
172 }
173
177 function savePositions($a_pos)
178 {
179 asort($a_pos);
180
181 // File Item
182 $childs = $this->list_node->child_nodes();
183 $nodes = array();
184 for ($i=0; $i<count($childs); $i++)
185 {
186 if ($childs[$i]->node_name() == "FileItem")
187 {
188 $id = $entry = "";
189 $pc_id = $childs[$i]->get_attribute("PCID");
190 $hier_id = $childs[$i]->get_attribute("HierId");
191 $nodes[$hier_id.":".$pc_id] = $childs[$i];
192 $childs[$i]->unlink($childs[$i]);
193 }
194 }
195
196 foreach($a_pos as $k => $v)
197 {
198 if (is_object($nodes[$k]))
199 {
200 $nodes[$k] = $this->list_node->append_child($nodes[$k]);
201 }
202 }
203 }
204
208 function getAllClasses()
209 {
210 $classes = array();
211
212 // File Item
213 $childs = $this->list_node->child_nodes();
214
215 for ($i=0; $i<count($childs); $i++)
216 {
217 if ($childs[$i]->node_name() == "FileItem")
218 {
219 $classes[$childs[$i]->get_attribute("HierId").":".
220 $childs[$i]->get_attribute("PCID")] = $childs[$i]->get_attribute("Class");
221 }
222 }
223
224 return $classes;
225 }
226
230 function saveStyleClasses($a_class)
231 {
232 // File Item
233 $childs = $this->list_node->child_nodes();
234 for ($i=0; $i<count($childs); $i++)
235 {
236 if ($childs[$i]->node_name() == "FileItem")
237 {
238 $childs[$i]->set_attribute("Class",
239 $a_class[$childs[$i]->get_attribute("HierId").":".
240 $childs[$i]->get_attribute("PCID")]);
241 }
242 }
243 }
244
249 static function getLangVars()
250 {
251 return array("ed_edit_files", "ed_insert_filelist", "pc_flist");
252 }
253
262 static function afterPageUpdate($a_page, DOMDocument $a_domdoc, $a_xml, $a_creation)
263 {
264 if (!$a_page->getImportMode())
265 {
266 // pc filelist
267 include_once("./Modules/File/classes/class.ilObjFile.php");
269 $a_page->getParentType().":pg", $a_page->getId(), 0, $a_page->getLanguage());
270 self::saveFileUsage($a_page, $a_domdoc);
271
272 foreach($file_ids as $file) // check, whether file object can be deleted
273 {
275 {
276 $file_obj = new ilObjFile($file, false);
277 $usages = $file_obj->getUsages();
278 if (count($usages) == 0) // delete, if no usage exists
279 {
280 if ($file_obj->getMode() == "filelist") // non-repository object
281 {
282 $file_obj->delete();
283 }
284 }
285 }
286 }
287 }
288
289 }
290
296 static function beforePageDelete($a_page)
297 {
298 $files = self::collectFileItems($a_page, $a_page->getDomDoc());
299
300 // delete all file usages
301 include_once("./Modules/File/classes/class.ilObjFile.php");
302 ilObjFile::_deleteAllUsages($a_page->getParentType().":pg", $a_page->getId(), false,
303 $a_page->getLanguage());
304
305 include_once("./Modules/File/classes/class.ilObjFile.php");
306 foreach ($files as $file_id)
307 {
308 if (ilObject::_exists($file_id))
309 {
310 $file_obj = new ilObjFile($file_id, false);
311 $file_obj->delete();
312 }
313 }
314 }
315
324 static function afterPageHistoryEntry($a_page, DOMDocument $a_old_domdoc, $a_old_xml, $a_old_nr)
325 {
326 self::saveFileUsage($a_page, $a_old_domdoc, $a_old_nr);
327 }
328
332 static function saveFileUsage($a_page, $a_domdoc, $a_old_nr = 0)
333 {
334 $file_ids = self::collectFileItems($a_page, $a_domdoc);
335 include_once("./Modules/File/classes/class.ilObjFile.php");
336 ilObjFile::_deleteAllUsages($a_page->getParentType().":pg", $a_page->getId(), $a_old_nr, $a_page->getLanguage());
337 foreach($file_ids as $file_id)
338 {
339 ilObjFile::_saveUsage($file_id, $a_page->getParentType().":pg", $a_page->getId(), $a_old_nr,
340 $a_page->getLanguage());
341 }
342 }
343
347 static function collectFileItems($a_page, $a_domdoc)
348 {
349 $xpath = new DOMXPath($a_domdoc);
350 $nodes = $xpath->query('//FileItem/Identifier');
351 $file_ids = array();
352 foreach($nodes as $node)
353 {
354 $id_arr = explode("_", $node->getAttribute("Entry"));
355 $file_id = $id_arr[count($id_arr) - 1];
356 if ($file_id > 0 && ($id_arr[1] == "" || $id_arr[1] == IL_INST_ID || $id_arr[1] == 0))
357 {
358 $file_ids[$file_id] = $file_id;
359 }
360 }
361 // file items in download links
362 $xpath = new DOMXPath($a_domdoc);
363 $nodes = $xpath->query("//IntLink[@Type='File']");
364 foreach($nodes as $node)
365 {
366 $t = $node->getAttribute("Target");
367 if (substr($t, 0, 9) == "il__dfile")
368 {
369 $id_arr = explode("_", $t);
370 $file_id = $id_arr[count($id_arr) - 1];
371 $file_ids[$file_id] = $file_id;
372 }
373 }
374 return $file_ids;
375 }
376
377}
378?>
print $file
const IL_INSERT_AFTER
setFirstOptionalElement(&$doc, &$parent_node, $a_node_name, $a_successors, $a_content, $a_attributes, $a_remove_childs=true)
searches for an element $a_node_name within the childs of $parent_node if no node is found,...
Class ilObjFile.
static _getFilesOfObject($a_type, $a_id, $a_usage_hist_nr=0, $a_usage_lang="-")
get all files of an object
static _saveUsage($a_file_id, $a_type, $a_id, $a_usage_hist_nr=0, $a_usage_lang="-")
save usage
static _deleteAllUsages($a_type, $a_id, $a_usage_hist_nr=0, $a_usage_lang="-")
static delete all usages of
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data@access public
static _lookupType($a_id, $a_reference=false)
lookup object type
Class ilPCFileList.
static afterPageHistoryEntry($a_page, DOMDocument $a_old_domdoc, $a_old_xml, $a_old_nr)
After page history entry has been created.
appendItem($a_id, $a_location, $a_format)
static getLangVars()
Get lang vars needed for editing.
create(&$a_pg_obj, $a_hier_id, $a_pc_id="")
static collectFileItems($a_page, $a_domdoc)
Get all file items that are used within the page.
static beforePageDelete($a_page)
Before page is being deleted.
getAllClasses()
Get all style classes.
static afterPageUpdate($a_page, DOMDocument $a_domdoc, $a_xml, $a_creation)
After page has been updated (or created)
saveStyleClasses($a_class)
Save style classes of file items.
savePositions($a_pos)
Save positions of file items.
setNode(&$a_node)
Set xml node of page content.
deleteFileItems($a_ids)
Delete file items.
init()
Init page content component.
static saveFileUsage($a_page, $a_domdoc, $a_old_nr=0)
Save file usages.
getFileList()
Get list of files.
setListTitle($a_title, $a_language)
Class ilPageContent.
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element)
setType($a_type)
Set Type.