ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilCopyWizardOptions.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2006 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
33{
34 private static $instances = null;
35
39
40 const OWNER_KEY = -3;
41 const DISABLE_SOAP = -4;
42 const ROOT_NODE = -5;
44
45 private $db;
46
47 private $copy_id;
48 private $source_id;
49 private $options = array();
50
58 private function __construct($a_copy_id = 0)
59 {
60 global $ilDB;
61
62 $this->db = $ilDB;
63 $this->copy_id = $a_copy_id;
64
65 if ($this->copy_id) {
66 $this->read();
67 }
68 }
69
78 public static function _getInstance($a_copy_id)
79 {
80 if (is_array(self::$instances) and isset(self::$instances[$a_copy_id])) {
81 return self::$instances[$a_copy_id];
82 }
83 return self::$instances[$a_copy_id] = new ilCopyWizardOptions($a_copy_id);
84 }
85
86
91 public function getRequiredSteps()
92 {
93 $steps = 0;
94 if (is_array($this->options) && array_key_exists(0, $this->options) && is_array($this->options[0])) {
95 $steps += count($this->options[0]);
96 }
97 if (is_array($this->options) && array_key_exists(-1, $this->options) && is_array($this->options[-1])) {
98 $steps += count($this->options[-1]);
99 }
100 return $steps;
101 }
102
103
112 public static function _isFinished($a_copy_id)
113 {
114 global $ilDB;
115
116 $query = "SELECT * FROM copy_wizard_options " .
117 "WHERE copy_id = " . $ilDB->quote($a_copy_id, 'integer') . " ";
118 $res = $ilDB->query($query);
119 return $res->numRows() ? false : true;
120 }
121
129 public static function _allocateCopyId()
130 {
131 global $ilDB;
132
133 $query = "SELECT MAX(copy_id) latest FROM copy_wizard_options ";
134 $res = $ilDB->query($query);
136
137 $ilDB->insert("copy_wizard_options", array(
138 "copy_id" => array("integer", ((int) $row->latest) + 1),
139 "source_id" => array("integer", 0)
140 ));
141 return ((int) $row->latest) + 1;
142 }
143
151 public function saveOwner($a_user_id)
152 {
153 global $ilDB;
154
155 $ilDB->insert("copy_wizard_options", array(
156 "copy_id" => array("integer", $this->getCopyId()),
157 "source_id" => array("integer", self::OWNER_KEY),
158 "options" => array('clob',serialize(array($a_user_id)))
159 ));
160
161 return true;
162 }
163
171 public function saveRoot($a_root)
172 {
173 global $ilDB;
174
175 $ilDB->insert("copy_wizard_options", array(
176 "copy_id" => array("integer", $this->getCopyId()),
177 "source_id" => array("integer", self::ROOT_NODE),
178 "options" => array('clob',serialize(array($a_root)))
179 ));
180
181 return true;
182 }
183
191 public function isRootNode($a_root)
192 {
193 return in_array($a_root, $this->getOptions(self::ROOT_NODE));
194 }
195
203 public function disableSOAP()
204 {
205 global $ilDB;
206
207 $this->options[self::DISABLE_SOAP] = 1;
208
209 $ilDB->insert("copy_wizard_options", array(
210 "copy_id" => array("integer", $this->getCopyId()),
211 "source_id" => array("integer", self::DISABLE_SOAP),
212 "options" => array('clob',serialize(array(1)))
213 ));
214 }
215
221 public function disableTreeCopy()
222 {
223 global $ilDB;
224
225 $this->options[self::DISABLE_TREE_COPY] = 1;
226
227 $ilDB->insert("copy_wizard_options", array(
228 "copy_id" => array("integer", $this->getCopyId()),
229 "source_id" => array("integer", self::DISABLE_TREE_COPY),
230 "options" => array('clob',serialize(array(1)))
231 ));
232 }
233
238 public function isTreeCopyDisabled()
239 {
240 if (isset($this->options[self::DISABLE_TREE_COPY]) and $this->options[self::DISABLE_TREE_COPY]) {
241 return true;
242 }
243 return false;
244 }
245
252 public function isSOAPEnabled()
253 {
254 if (isset($this->options[self::DISABLE_SOAP]) and $this->options[self::DISABLE_SOAP]) {
255 return false;
256 }
257 return true;
258 }
259
260
261
269 public function checkOwner($a_user_id)
270 {
271 return in_array($a_user_id, $this->getOptions(self::OWNER_KEY));
272 }
273
280 public function getCopyId()
281 {
282 return $this->copy_id;
283 }
284
285
294 public function initContainer($a_source_id, $a_target_id)
295 {
296 global $tree;
297
298 $mapping_source = $tree->getParentId($a_source_id);
299 $this->addEntry($a_source_id, array('type' => ilCopyWizardOptions::COPY_WIZARD_COPY));
300 $this->appendMapping($mapping_source, $a_target_id);
301 }
302
313 public function storeTree($a_source_id)
314 {
315 global $ilDB;
316
317 $this->tmp_tree = array();
318 $this->readTree($a_source_id);
319 $a_tree_structure = $this->tmp_tree;
320
321 $ilDB->update("copy_wizard_options", array(
322 "options" => array('clob',serialize($a_tree_structure))
323 ), array(
324 "copy_id" => array('integer',$this->getCopyId()),
325 "source_id" => array('integer',0
326 )));
327
328 $ilDB->insert('copy_wizard_options', array(
329 'copy_id' => array('integer',$this->getCopyId()),
330 'source_id' => array('integer',-1),
331 'options' => array('clob',serialize($a_tree_structure))
332 ));
333
334 return true;
335 }
336
343 private function fetchFirstNodeById($a_id)
344 {
345 $tree = $this->getOptions($a_id);
346 if (isset($tree[0]) and is_array($tree[0])) {
347 return $tree[0];
348 }
349 return false;
350 }
351
359 public function fetchFirstNode()
360 {
361 return $this->fetchFirstNodeById(0);
362 }
363
371 {
372 return $this->fetchFirstNodeById(-1);
373 }
374
381 public function dropFirstNodeById($a_id)
382 {
383 global $ilDB;
384
385 if (!isset($this->options[$a_id]) or !is_array($this->options[$a_id])) {
386 return false;
387 }
388
389 $this->options[$a_id] = array_slice($this->options[$a_id], 1);
390
391 $ilDB->update('copy_wizard_options', array(
392 'options' => array('clob',serialize($this->options[$a_id]))
393 ), array(
394 'copy_id' => array('integer',$this->getCopyId()),
395 'source_id' => array('integer',$a_id)));
396
397 $this->read();
398 // check for role_folder
399 if (($node = $this->fetchFirstNodeById($a_id)) === false) {
400 return true;
401 }
402 if ($node['type'] == 'rolf') {
403 $this->dropFirstNodeById($a_id);
404 }
405 return true;
406 }
407
414 public function dropFirstNode()
415 {
416 return $this->dropFirstNodeById(0);
417 }
418
426 {
427 return $this->dropFirstNodeById(-1);
428 }
429
437 public function getOptions($a_source_id)
438 {
439 if (isset($this->options[$a_source_id]) and is_array($this->options[$a_source_id])) {
440 return $this->options[$a_source_id];
441 }
442 return array();
443 }
444
453 public function addEntry($a_source_id, $a_options)
454 {
455 global $ilDB;
456
457 if (!is_array($a_options)) {
458 return false;
459 }
460
461 $query = "DELETE FROM copy_wizard_options " .
462 "WHERE copy_id = " . $this->db->quote($this->copy_id, 'integer') . " " .
463 "AND source_id = " . $this->db->quote($a_source_id, 'integer');
464 $res = $ilDB->manipulate($query);
465
466 $ilDB->insert('copy_wizard_options', array(
467 'copy_id' => array('integer',$this->copy_id),
468 'source_id' => array('integer',$a_source_id),
469 'options' => array('clob',serialize($a_options))
470 ));
471 return true;
472 }
473
482 public function appendMapping($a_source_id, $a_target_id)
483 {
484 global $ilDB;
485
486 $query = "SELECT * FROM copy_wizard_options " .
487 "WHERE copy_id = " . $this->db->quote($this->copy_id, 'integer') . " " .
488 "AND source_id = -2 ";
489 $res = $this->db->query($query);
490 $mappings = array();
491 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
492 $mappings = unserialize($row->options);
493 }
494 $mappings[$a_source_id] = $a_target_id;
495
496 $query = "DELETE FROM copy_wizard_options " .
497 "WHERE copy_id = " . $ilDB->quote($this->getCopyId(), 'integer') . " " .
498 "AND source_id = -2 ";
499 $res = $ilDB->manipulate($query);
500
501
502 $ilDB->insert('copy_wizard_options', array(
503 'copy_id' => array('integer',$this->getCopyId()),
504 'source_id' => array('integer',-2),
505 'options' => array('clob',serialize($mappings))
506 ));
507
508 return true;
509 }
510
517 public function getMappings()
518 {
519 if (isset($this->options[-2]) and is_array($this->options[-2])) {
520 return $this->options[-2];
521 }
522 return array();
523 }
524
531 public function deleteAll()
532 {
533 global $ilDB;
534
535 $query = "DELETE FROM copy_wizard_options " .
536 "WHERE copy_id = " . $this->db->quote($this->copy_id, 'integer');
537 $res = $ilDB->manipulate($query);
538 }
539
547 public function read()
548 {
549 global $ilDB;
550
551 $query = "SELECT * FROM copy_wizard_options " .
552 "WHERE copy_id = " . $this->db->quote($this->copy_id, 'integer');
553 $res = $this->db->query($query);
554
555 $this->options = array();
556 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
557 $this->options[$row->source_id] = unserialize($row->options);
558 }
559
560 return true;
561 }
562
570 private function readTree($a_source_id)
571 {
572 global $tree;
573
574 $this->tmp_tree[] = $tree->getNodeData($a_source_id);
575
576
577 foreach ($tree->getChilds($a_source_id) as $sub_nodes) {
578 $sub_node_ref_id = $sub_nodes['child'];
579 // check ommited, linked ...
580 $options = $this->options[$sub_node_ref_id];
581 if ($options['type'] == self::COPY_WIZARD_COPY or
582 $options['type'] == self::COPY_WIZARD_LINK) {
583 $this->readTree($sub_node_ref_id);
584 }
585 }
586 }
587}
$steps
Definition: latex.php:3
An exception for terminatinating execution or to throw for unit testing.
saveOwner($a_user_id)
Save owner for copy.
disableTreeCopy()
Disable copying of tree.
fetchFirstNode()
Fetch first node for cloneObject.
saveRoot($a_root)
Save root node id.
static _allocateCopyId()
Allocate a copy for further entries.
fetchFirstNodeById($a_id)
Get first node of stored tree.
dropFirstNodeById($a_id)
Drop first node by id.
disableSOAP()
Disable soap calls.
checkOwner($a_user_id)
check owner
readTree($a_source_id)
Purge ommitted node recursively.
dropFirstNode()
Drop first node (for cloneObject())
static _getInstance($a_copy_id)
Get instance of copy wizard options.
appendMapping($a_source_id, $a_target_id)
Add mapping of source -> target.
static _isFinished($a_copy_id)
check if copy is finished
deleteAll()
Delete all entries.
initContainer($a_source_id, $a_target_id)
Init container Add copy entry.
isRootNode($a_root)
Is root node.
fetchFirstDependenciesNode()
Fetch first dependencies node.
addEntry($a_source_id, $a_options)
Add new entry.
dropFirstDependenciesNode()
Drop first node (for cloneDependencies())
getOptions($a_source_id)
Get entry by source.
storeTree($a_source_id)
Save tree Stores two copies of the tree structure: id 0 is used for recursive call of cloneObject() i...
isTreeCopyDisabled()
Check if tree copy is enabled.
isSOAPEnabled()
Check if SOAP calls are disabled.
getRequiredSteps()
Get required steps.
__construct($a_copy_id=0)
Private Constructor (Singleton class)
$query
foreach($_POST as $key=> $value) $res
global $ilDB