ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilSCORM2004DeleteData.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
13 {
14  public function removeCMIDataForPackage($packageId)
15  {
16  global $ilDB;
17 
18  $res = $ilDB->queryF('
19  SELECT cmi_node.cmi_node_id
20  FROM cmi_node, cp_node
21  WHERE cp_node.slm_id = %s AND cmi_node.cp_node_id = cp_node.cp_node_id',
22  array('integer'),
23  array($packageId)
24  );
25  while($data = $ilDB->fetchAssoc($res))
26  {
27  $cmi_node_values[] = $data['cmi_node_id'];
28  }
29  self::removeCMIDataForNodes($cmi_node_values);
30 
31  //custom
32  $query = 'DELETE FROM cmi_custom WHERE obj_id = %s';
33  $ilDB->manipulateF($query, array('integer'), array($packageId));
34 
35  //g_objective
36  $query = 'DELETE FROM cmi_gobjective WHERE scope_id = %s';
37  $ilDB->manipulateF($query, array('integer'), array($packageId));
38 
39  $s_globalObjectiveId=self::getGlobalToSystemObjectiveIdStringForPackage($packageId);
40  if ($s_globalObjectiveId != "") {
41  $ilDB->manipulateF(
42  'DELETE FROM cmi_gobjective WHERE scope_id = %s AND objective_id in ('.$s_globalObjectiveId.')',
43  array('integer'),
44  array(0)
45  );
46  }
47  }
48 
49  public function removeCMIDataForUser($user_id)
50  {
51  global $ilDB;
52 
53  //get all cmi_nodes to delete
54  $res = $ilDB->queryF('
55  SELECT cmi_node.cmi_node_id
56  FROM cmi_node, cp_node
57  WHERE cmi_node.user_id = %s AND cmi_node.cp_node_id = cp_node.cp_node_id',
58  array('integer'),
59  array($user_id)
60  );
61 
62  while($data = $ilDB->fetchAssoc($res))
63  {
64  $cmi_node_values[] = $data['cmi_node_id'];
65  }
66  self::removeCMIDataForNodes($cmi_node_values);
67 
68  //custom
69  $ilDB->manipulateF(
70  'DELETE FROM cmi_custom WHERE user_id = %s',
71  array('integer'),
72  array($user_id)
73  );
74 
75  //gobjective
76  $ilDB->manipulateF(
77  'DELETE FROM cmi_gobjective WHERE user_id = %s',
78  array('integer'),
79  array($user_id)
80  );
81  }
82 
83  public function removeCMIDataForUserAndPackage($user_id,$packageId)
84  {
85  global $ilDB;
86 
87  //get all cmi_nodes to delete
88  $res = $ilDB->queryF('
89  SELECT cmi_node.cmi_node_id
90  FROM cmi_node, cp_node
91  WHERE cmi_node.user_id = %s AND cmi_node.cp_node_id = cp_node.cp_node_id AND cp_node.slm_id = %s',
92  array('integer','integer'),
93  array($user_id,$packageId)
94  );
95  while($data = $ilDB->fetchAssoc($res))
96  {
97  $cmi_node_values[] = $data['cmi_node_id'];
98  }
99  self::removeCMIDataForNodes($cmi_node_values);
100 
101  //custom
102  $ilDB->manipulateF(
103  'DELETE FROM cmi_custom WHERE user_id = %s AND obj_id = %s',
104  array('integer','integer'),
105  array($user_id,$packageId)
106  );
107 
108  //gobjective
109  $ilDB->manipulateF(
110  'DELETE FROM cmi_gobjective WHERE user_id = %s AND scope_id = %s',
111  array('integer','integer'),
112  array($user_id,$packageId)
113  );
114 
115  $s_globalObjectiveId=self::getGlobalToSystemObjectiveIdStringForPackage($packageId);
116  if ($s_globalObjectiveId != "") {
117  $ilDB->manipulateF(
118  'DELETE FROM cmi_gobjective WHERE user_id = %s AND scope_id = %s AND objective_id in ('.$s_globalObjectiveId.')',
119  array('integer','integer'),
120  array($user_id,0)
121  );
122  }
123  }
124 
125  public function removeCMIDataForNodes($cmi_node_values)
126  {
127  global $ilDB;
128 
129  //cmi interaction nodes
130  $cmi_inode_values = array();
131 
132  $query = 'SELECT cmi_interaction_id FROM cmi_interaction WHERE '
133  . $ilDB->in('cmi_interaction.cmi_node_id', $cmi_node_values, false, 'integer');
134  $res = $ilDB->query($query);
135  while($data = $ilDB->fetchAssoc($res))
136  {
137  $cmi_inode_values[] = $data['cmi_interaction_id'];
138  }
139 
140  //response
141  $query = 'DELETE FROM cmi_correct_response WHERE '
142  . $ilDB->in('cmi_correct_response.cmi_interaction_id', $cmi_inode_values, false, 'integer');
143  $ilDB->manipulate($query);
144 
145  //objective interaction
146  $query = 'DELETE FROM cmi_objective WHERE '
147  . $ilDB->in('cmi_objective.cmi_interaction_id', $cmi_inode_values, false, 'integer');
148  $ilDB->manipulate($query);
149 
150  //objective
151  $query = 'DELETE FROM cmi_objective WHERE '
152  . $ilDB->in('cmi_objective.cmi_node_id', $cmi_node_values, false, 'integer');
153  $ilDB->manipulate($query);
154 
155  //interaction
156  $query = 'DELETE FROM cmi_interaction WHERE '
157  . $ilDB->in('cmi_interaction.cmi_node_id', $cmi_node_values, false, 'integer');
158  $ilDB->manipulate($query);
159 
160  //comment
161  $query = 'DELETE FROM cmi_comment WHERE '
162  . $ilDB->in('cmi_comment.cmi_node_id', $cmi_node_values, false, 'integer');
163  $ilDB->manipulate($query);
164 
165  //node
166  $query = 'DELETE FROM cmi_node WHERE '
167  . $ilDB->in('cmi_node.cmi_node_id', $cmi_node_values, false, 'integer');
168  $ilDB->manipulate($query);
169 
170  }
171 
172  public function getGlobalToSystemObjectiveIdStringForPackage($packageId) {
173  global $ilDB;
174 
175  $existing_key_template = "";
176  $global_to_system = 1;
177 
178  $res = $ilDB->queryF('SELECT global_to_system FROM cp_package WHERE obj_id = %s',
179  array('integer'),
180  array($packageId)
181  );
182  while($data = $ilDB->fetchAssoc($res))
183  {
184  $global_to_system = $data['global_to_system'];
185  }
186  if ($global_to_system == 0) return "";
187 
188  $res = $ilDB->queryF('
189  SELECT targetobjectiveid
190  FROM cp_mapinfo, cp_node
191  WHERE cp_node.slm_id = %s
192  AND cp_node.nodename = %s
193  AND cp_mapinfo.cp_node_id = cp_node.cp_node_id',
194  array('integer', 'text'),
195  array($packageId, 'mapInfo')
196  );
197  while($data = $ilDB->fetchAssoc($res))
198  {
199  $existing_key_template .= "'".$data['targetobjectiveid']."',";
200  }
201  //remove trailing ','
202  $existing_key_template = substr($existing_key_template, 0, strlen($existing_key_template) - 1);
203 
204  return $existing_key_template;
205  }
206 }
207 ?>