ILIAS  release_4-4 Revision
All Data Structures Namespaces Files Functions Variables Modules Pages
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 
6 require_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  // pc filelist
265  include_once("./Modules/File/classes/class.ilObjFile.php");
266  $file_ids = ilObjFile::_getFilesOfObject(
267  $a_page->getParentType().":pg", $a_page->getId(), 0, $a_page->getLanguage());
268  self::saveFileUsage($a_page, $a_domdoc);
269  foreach($file_ids as $file) // check, whether file object can be deleted
270  {
271  if (ilObject::_exists($file))
272  {
273  $file_obj = new ilObjFile($file, false);
274  $usages = $file_obj->getUsages();
275  if (count($usages) == 0) // delete, if no usage exists
276  {
277  if ($file_obj->getMode() == "filelist") // non-repository object
278  {
279  $file_obj->delete();
280  }
281  }
282  }
283  }
284 
285  }
286 
292  static function beforePageDelete($a_page)
293  {
294  $files = self::collectFileItems($a_page, $a_page->getDomDoc());
295 
296  // delete all file usages
297  include_once("./Modules/File/classes/class.ilObjFile.php");
298  ilObjFile::_deleteAllUsages($a_page->getParentType().":pg", $a_page->getId(), false,
299  $a_page->getLanguage());
300 
301  include_once("./Modules/File/classes/class.ilObjFile.php");
302  foreach ($files as $file_id)
303  {
304  if (ilObject::_exists($file_id))
305  {
306  $file_obj = new ilObjFile($file_id, false);
307  $file_obj->delete();
308  }
309  }
310  }
311 
320  static function afterPageHistoryEntry($a_page, DOMDocument $a_old_domdoc, $a_old_xml, $a_old_nr)
321  {
322  self::saveFileUsage($a_page, $a_old_domdoc, $a_old_nr);
323  }
324 
328  static function saveFileUsage($a_page, $a_domdoc, $a_old_nr = 0)
329  {
330  $file_ids = self::collectFileItems($a_page, $a_domdoc);
331  include_once("./Modules/File/classes/class.ilObjFile.php");
332  ilObjFile::_deleteAllUsages($a_page->getParentType().":pg", $a_page->getId(), $a_old_nr, $a_page->getLanguage());
333  foreach($file_ids as $file_id)
334  {
335  ilObjFile::_saveUsage($file_id, $a_page->getParentType().":pg", $a_page->getId(), $a_old_nr,
336  $a_page->getLanguage());
337  }
338  }
339 
343  static function collectFileItems($a_page, $a_domdoc)
344  {
345  $xpath = new DOMXPath($a_domdoc);
346  $nodes = $xpath->query('//FileItem/Identifier');
347  $file_ids = array();
348  foreach($nodes as $node)
349  {
350  $id_arr = explode("_", $node->getAttribute("Entry"));
351  $file_id = $id_arr[count($id_arr) - 1];
352  if ($file_id > 0 && ($id_arr[1] == "" || $id_arr[1] == IL_INST_ID || $id_arr[1] == 0))
353  {
354  $file_ids[$file_id] = $file_id;
355  }
356  }
357  // file items in download links
358  $xpath = new DOMXPath($a_domdoc);
359  $nodes = $xpath->query("//IntLink[@Type='File']");
360  foreach($nodes as $node)
361  {
362  $t = $node->getAttribute("Target");
363  if (substr($t, 0, 9) == "il__dfile")
364  {
365  $id_arr = explode("_", $t);
366  $file_id = $id_arr[count($id_arr) - 1];
367  $file_ids[$file_id] = $file_id;
368  }
369  }
370  return $file_ids;
371  }
372 
373 }
374 ?>
print $file
getAllClasses()
Get all style classes.
static saveFileUsage($a_page, $a_domdoc, $a_old_nr=0)
Save file usages.
static getLangVars()
Get lang vars needed for editing.
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data
_deleteAllUsages($a_type, $a_id, $a_usage_hist_nr=0, $a_usage_lang="-")
static delete all usages of
init()
Init page content component.
setType($a_type)
Set Type.
getFileList()
Get list of files.
static beforePageDelete($a_page)
Before page is being deleted.
deleteFileItems($a_ids)
Delete file items.
_getFilesOfObject($a_type, $a_id, $a_usage_hist_nr=0, $a_usage_lang="-")
get all files of an object
Class ilPageContent.
setListTitle($a_title, $a_language)
static afterPageUpdate($a_page, DOMDocument $a_domdoc, $a_xml, $a_creation)
After page has been updated (or created)
_saveUsage($a_file_id, $a_type, $a_id, $a_usage_hist_nr=0, $a_usage_lang="-")
save usage
create(&$a_pg_obj, $a_hier_id, $a_pc_id="")
static afterPageHistoryEntry($a_page, DOMDocument $a_old_domdoc, $a_old_xml, $a_old_nr)
After page history entry has been created.
static collectFileItems($a_page, $a_domdoc)
Get all file items that are used within the page.
Class ilObjFile.
const IL_INSERT_AFTER
saveStyleClasses($a_class)
Save style classes of file items.
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element) ...
appendItem($a_id, $a_location, $a_format)
Class ilPCFileList.
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...
savePositions($a_pos)
Save positions of file items.