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 
36  const COPY_WIZARD_OMIT = 1;
37  const COPY_WIZARD_COPY = 2;
38  const COPY_WIZARD_LINK = 3;
39 
40  const OWNER_KEY = -3;
41  const DISABLE_SOAP = -4;
42  const ROOT_NODE = -5;
43  const DISABLE_TREE_COPY = -6;
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 
370  public function fetchFirstDependenciesNode()
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 
425  public function dropFirstDependenciesNode()
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 }
fetchFirstNodeById($a_id)
Get first node of stored tree.
storeTree($a_source_id)
Save tree Stores two copies of the tree structure: id 0 is used for recursive call of cloneObject() i...
readTree($a_source_id)
Purge ommitted node recursively.
saveOwner($a_user_id)
Save owner for copy.
getRequiredSteps()
Get required steps.
fetchFirstNode()
Fetch first node for cloneObject.
disableSOAP()
Disable soap calls.
checkOwner($a_user_id)
check owner
fetchFirstDependenciesNode()
Fetch first dependencies node.
addEntry($a_source_id, $a_options)
Add new entry.
$steps
Definition: latex.php:3
__construct($a_copy_id=0)
Private Constructor (Singleton class)
saveRoot($a_root)
Save root node id.
isSOAPEnabled()
Check if SOAP calls are disabled.
static _isFinished($a_copy_id)
check if copy is finished
static _getInstance($a_copy_id)
Get instance of copy wizard options.
appendMapping($a_source_id, $a_target_id)
Add mapping of source -> target.
foreach($_POST as $key=> $value) $res
isTreeCopyDisabled()
Check if tree copy is enabled.
disableTreeCopy()
Disable copying of tree.
static _allocateCopyId()
Allocate a copy for further entries.
initContainer($a_source_id, $a_target_id)
Init container Add copy entry.
$query
isRootNode($a_root)
Is root node.
Create styles array
The data for the language used.
dropFirstDependenciesNode()
Drop first node (for cloneDependencies())
dropFirstNodeById($a_id)
Drop first node by id.
getOptions($a_source_id)
Get entry by source.
global $ilDB
deleteAll()
Delete all entries.
dropFirstNode()
Drop first node (for cloneObject())