ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilCourseObjectiveMaterials.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2001 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 
24 
34 {
35  var $db = null;
36 
37  var $objective_id = null;
38  var $lms;
39 
40  public function __construct($a_objective_id)
41  {
42  global $ilDB;
43 
44  $this->db =& $ilDB;
45 
46  $this->objective_id = $a_objective_id;
47 
48  $this->__read();
49  }
50 
60  public function cloneDependencies($a_new_objective,$a_copy_id)
61  {
62  global $ilObjDataCache,$ilLog;
63 
64  include_once('Services/CopyWizard/classes/class.ilCopyWizardOptions.php');
65  $cwo = ilCopyWizardOptions::_getInstance($a_copy_id);
66  $mappings = $cwo->getMappings();
67  #$ilLog->write(__METHOD__.': 1');
68  foreach($this->getMaterials() as $material)
69  {
70  #$ilLog->write(__METHOD__.': 2');
71  // Copy action omit ?
72  if(!isset($mappings["$material[ref_id]"]) or !$mappings["$material[ref_id]"])
73  {
74  continue;
75  }
76  #$ilLog->write(__METHOD__.': 3');
77  $material_ref_id = $material['ref_id'];
78  $material_rbac_obj_id = $ilObjDataCache->lookupObjId($material_ref_id);
79  $material_obj_id = $material['obj_id'];
80  $new_ref_id = $mappings[$material_ref_id];
81  $new_rbac_obj_id = $ilObjDataCache->lookupObjId($new_ref_id);
82  #$ilLog->write(__METHOD__.': 4');
83 
84  // Link
85  if($new_rbac_obj_id == $material_rbac_obj_id)
86  {
87  #$ilLog->write(__METHOD__.': 5');
88  $ilLog->write(__METHOD__.': Material has been linked. Keeping object id.');
89  $new_obj_id = $material_obj_id;
90  }
91  elseif($material['type'] == 'st')
92  {
93  #$ilLog->write(__METHOD__.': 6');
94  // Chapter assignment
95  $new_material_info = isset($mappings[$material_ref_id.'_'.$material_obj_id]) ?
96  $mappings[$material_ref_id.'_'.$material_obj_id] :
97  array();
98  $new_material_arr = explode('_',$new_material_info);
99  if(!isset($new_material_arr[1]) or !$new_material_arr[1])
100  {
101  $ilLog->write(__METHOD__.': No mapping found for chapter: '.$material_obj_id);
102  continue;
103  }
104  $new_obj_id = $new_material_arr[1];
105  $ilLog->write(__METHOD__.': New material id is: '.$new_obj_id);
106  }
107  else
108  {
109  #$ilLog->write(__METHOD__.': 7');
110  // Any type
111  $new_obj_id = $ilObjDataCache->lookupObjId($mappings[$material_ref_id]);
112  }
113 
114  #$ilLog->write(__METHOD__.': 8');
115  $new_material = new ilCourseObjectiveMaterials($a_new_objective);
116  #$ilLog->write(__METHOD__.': 8.1');
117  $new_material->setLMRefId($new_ref_id);
118  #$ilLog->write(__METHOD__.': 8.2');
119  $new_material->setLMObjId($new_obj_id);
120  #$ilLog->write(__METHOD__.': 8.3');
121  $new_material->setType($material['type']);
122  #$ilLog->write(__METHOD__.': 8.4');
123  $new_material->add();
124  #$ilLog->write(__METHOD__.': 9');
125 
126  }
127  }
128 
137  public static function _getAssignedMaterials($a_objective_id)
138  {
139  global $ilDB;
140 
141  $query = "SELECT DISTINCT(ref_id) ref_id FROM crs_objective_lm ".
142  "WHERE objective_id = ".$ilDB->quote($a_objective_id ,'integer')." ";
143  $res = $ilDB->query($query);
144  while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
145  {
146  $ref_ids[] = $row->ref_id;
147  }
148  return $ref_ids ? $ref_ids : array();
149  }
150 
151 
152 
163  public static function _getAssignableMaterials($a_container_id)
164  {
165  global $tree,$ilDB;
166 
167  $all_materials = $tree->getSubTree($tree->getNodeData($a_container_id),true);
168  $all_materials = ilUtil::sortArray($all_materials,'title','asc');
169 
170  // Filter
171  foreach($all_materials as $material)
172  {
173  switch($material['type'])
174  {
175  case 'tst':
176  case 'fold':
177  case 'grp':
178  case 'rolf':
179  case 'crs':
180  case 'sess':
181  case 'itgr':
182  continue;
183 
184  default:
185  $assignable[] = $material;
186  break;
187  }
188  }
189  return $assignable ? $assignable : array();
190  }
191 
200  public static function _getAllAssignedMaterials($a_container_id)
201  {
202  global $ilDB;
203 
204  $query = "SELECT DISTINCT(com.ref_id) ref_id FROM crs_objectives co ".
205  "JOIN crs_objective_lm com ON co.objective_id = com.objective_id ".
206  "JOIN object_reference obr ON com.ref_id = obr.ref_id ".
207  "JOIN object_data obd ON obr.obj_id = obd.obj_id ".
208  "WHERE co.crs_id = ".$ilDB->quote($a_container_id,'integer')." ".
209  "ORDER BY obd.title ";
210 
211  $res = $ilDB->query($query);
212  while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
213  {
214  $ref_ids[] = $row->ref_id;
215  }
216  return $ref_ids ? $ref_ids : array();
217  }
218 
219  public function getMaterials()
220  {
221  return $this->lms ? $this->lms : array();
222  }
223 
224  function getChapters()
225  {
226  foreach($this->lms as $lm_data)
227  {
228  if($lm_data['type'] == 'st')
229  {
230  $chapters[] = $lm_data;
231  }
232  if($lm_data['type'] == 'pg')
233  {
234  $chapters[] = $lm_data;
235  }
236  }
237  return $chapters ? $chapters : array();
238  }
239 
240  function getLM($lm_id)
241  {
242  return $this->lms[$lm_id] ? $this->lms[$lm_id] : array();
243  }
244 
245  function getObjectiveId()
246  {
247  return $this->objective_id;
248  }
249 
250  function setLMRefId($a_ref_id)
251  {
252  $this->lm_ref_id = $a_ref_id;
253  }
254  function getLMRefId()
255  {
256  return $this->lm_ref_id ? $this->lm_ref_id : 0;
257  }
258  function setLMObjId($a_obj_id)
259  {
260  $this->lm_obj_id = $a_obj_id;
261  }
262  function getLMObjId()
263  {
264  return $this->lm_obj_id ? $this->lm_obj_id : 0;
265  }
266  function setType($a_type)
267  {
268  $this->type = $a_type;
269  }
270  function getType()
271  {
272  return $this->type;
273  }
274 
283  public function isAssigned($a_ref_id)
284  {
285  global $ilDB;
286 
287  $query = "SELECT * FROM crs_objective_lm ".
288  "WHERE ref_id = ".$this->db->quote($a_ref_id ,'integer')." ".
289  "AND objective_id = ".$this->db->quote($this->getObjectiveId() ,'integer')." ".
290  "AND type != 'st' AND type != 'pg' ";
291  $res = $this->db->query($query);
292  return $res->numRows() ? true : false;
293  }
294 
303  public function isChapterAssigned($a_ref_id,$a_obj_id)
304  {
305  global $ilDB;
306 
307  $query = "SELECT * FROM crs_objective_lm ".
308  "WHERE ref_id = ".$this->db->quote($a_ref_id ,'integer')." ".
309  "AND obj_id = ".$this->db->quote($a_obj_id ,'integer')." ".
310  "AND objective_id = ".$this->db->quote($this->getObjectiveId() ,'integer')." ".
311  "AND (type = 'st' OR type = 'pg')";
312  $res = $this->db->query($query);
313  return $res->numRows() ? true : false;
314  }
315  function checkExists()
316  {
317  global $ilDB;
318 
319  if($this->getLMObjId())
320  {
321  $query = "SELECT * FROM crs_objective_lm ".
322  "WHERE objective_id = ".$ilDB->quote($this->getObjectiveId() ,'integer')." ".
323  "AND ref_id = ".$ilDB->quote($this->getLMRefId() ,'integer')." ".
324  "AND obj_id = ".$ilDB->quote($this->getLMObjId() ,'integer')." ";
325  }
326  else
327  {
328  $query = "SELECT * FROM crs_objective_lm ".
329  "WHERE objective_id = ".$ilDB->quote($this->getObjectiveId() ,'integer')." ".
330  "AND ref_id = ".$ilDB->quote($this->getLMRefId() ,'integer')." ";
331  }
332 
333  $res = $this->db->query($query);
334 
335  return $res->numRows() ? true : false;
336  }
337 
338  function add()
339  {
340  global $ilDB;
341 
342  $next_id = $ilDB->nextId('crs_objective_lm');
343  $query = "INSERT INTO crs_objective_lm (lm_ass_id,objective_id,ref_id,obj_id,type) ".
344  "VALUES( ".
345  $ilDB->quote($next_id, 'integer').", ".
346  $ilDB->quote($this->getObjectiveId() ,'integer').", ".
347  $ilDB->quote($this->getLMRefId() ,'integer').", ".
348  $ilDB->quote($this->getLMObjId() ,'integer').", ".
349  $ilDB->quote($this->getType() ,'text').
350  ")";
351  $res = $ilDB->manipulate($query);
352 
353  return true;
354  }
355  function delete($lm_id)
356  {
357  global $ilDB;
358 
359  if(!$lm_id)
360  {
361  return false;
362  }
363 
364  $query = "DELETE FROM crs_objective_lm ".
365  "WHERE lm_ass_id = ".$ilDB->quote($lm_id ,'integer')." ";
366  $res = $ilDB->manipulate($query);
367 
368  return true;
369  }
370 
371  function deleteAll()
372  {
373  global $ilDB;
374 
375  $query = "DELETE FROM crs_objective_lm ".
376  "WHERE objective_id = ".$ilDB->quote($this->getObjectiveId() ,'integer')." ";
377  $res = $ilDB->manipulate($query);
378  return true;
379  }
380 
381  // PRIVATE
382  function __read()
383  {
384  global $tree,$ilDB;
385 
386  include_once('Modules/Course/classes/class.ilCourseObjective.php');
387  $container_ref_ids = ilObject::_getAllReferences(ilCourseObjective::_lookupContainerIdByObjectiveId($this->objective_id));
388  $container_ref_id = current($container_ref_ids);
389 
390  $this->lms = array();
391  $query = "SELECT lm_ass_id,lm.ref_id,lm.obj_id,lm.type FROM crs_objective_lm lm ".
392  "JOIN object_reference obr ON lm.ref_id = obr.ref_id ".
393  "JOIN object_data obd ON obr.obj_id = obd.obj_id ".
394  "LEFT JOIN lm_data lmd ON lmd.obj_id = lm.obj_id ".
395  "WHERE objective_id = ".$ilDB->quote($this->getObjectiveId(),'integer')." ".
396  "ORDER BY obd.title,lmd.title";
397 
398  $res = $this->db->query($query);
399  while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
400  {
401  if(!$tree->isInTree($row->ref_id) or !$tree->isGrandChild($container_ref_id,$row->ref_id))
402  {
403  $this->delete($row->lm_ass_id);
404  continue;
405  }
406  $lm['ref_id'] = $row->ref_id;
407  $lm['obj_id'] = $row->obj_id;
408  $lm['type'] = $row->type;
409  $lm['lm_ass_id'] = $row->lm_ass_id;
410 
411  $this->lms[$row->lm_ass_id] = $lm;
412  }
413  return true;
414  }
415 
416 }
417 ?>