ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilNote.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 define("IL_NOTE_PRIVATE", 1);
5 define("IL_NOTE_PUBLIC", 2);
6 
7 define("IL_NOTE_UNLABELED", 0);
8 define("IL_NOTE_IMPORTANT", 1);
9 define("IL_NOTE_QUESTION", 2);
10 define("IL_NOTE_PRO", 3);
11 define("IL_NOTE_CONTRA", 4);
12 
24 class ilNote
25 {
26 
30  function ilNote($a_id = 0)
31  {
32  if ($a_id > 0)
33  {
34  $this->id = $a_id;
35  $this->read();
36  }
37  }
38 
44  function setId($a_id)
45  {
46  $this->id = $a_id;
47  }
48 
54  function getId()
55  {
56  return $this->id;
57  }
58 
69  function setObject($a_obj_type, $a_rep_obj_id, $a_obj_id = 0)
70  {
71  $this->rep_obj_id = $a_rep_obj_id;
72  $this->obj_id = $a_obj_id;
73  $this->obj_type = $a_obj_type;
74  }
75 
76  function getObject()
77  {
78  return array("rep_obj_id" => $this->rep_obj_id,
79  "obj_id" => $this->obj_id,
80  "obj_type" => $this->obj_type);
81  }
82 
83 
89  function setType($a_type)
90  {
91  $this->type = $a_type;
92  }
93 
99  function getType()
100  {
101  return $this->type;
102  }
103 
109  function setAuthor($a_user_id)
110  {
111  $this->author = $a_user_id;
112  }
113 
119  function getAuthor()
120  {
121  return $this->author;
122  }
123 
129  function setText($a_text)
130  {
131  $this->text = $a_text;
132  }
133 
139  function getText()
140  {
141  return $this->text;
142  }
143 
149  function setSubject($a_subject)
150  {
151  $this->subject = $a_subject;
152  }
153 
159  function getSubject()
160  {
161  return $this->subject;
162  }
163 
169  function setCreationDate($a_date)
170  {
171  $this->creation_date = $a_date;
172  }
173 
179  function getCreationDate()
180  {
181  return $this->creation_date;
182  }
183 
189  function setUpdateDate($a_date)
190  {
191  $this->update_date = $a_date;
192  }
193 
199  function getUpdateDate()
200  {
201  return $this->update_date;
202  }
203 
210  function setLabel($a_label)
211  {
212  return $this->label = $a_label;
213  }
214 
221  function getLabel()
222  {
223  return $this->label;
224  }
225 
226  function create()
227  {
228  global $ilDB;
229 
230  $this->id = $ilDB->nextId("note");
231  /*$q = "INSERT INTO note (id, rep_obj_id, obj_id, obj_type, type,".
232  "author, note_text, subject, label, creation_date) VALUES (".
233  $ilDB->quote($this->id, "integer").",".
234  $ilDB->quote((int) $this->rep_obj_id, "integer").",".
235  $ilDB->quote((int) $this->obj_id, "integer").",".
236  $ilDB->quote((string) $this->obj_type, "text").",".
237  $ilDB->quote((int) $this->type, "integer").",".
238  $ilDB->quote((int) $this->author, "integer").",".
239  $ilDB->quote((string) $this->text, "clob").",".
240  $ilDB->quote((string) $this->subject, "text").",".
241  $ilDB->quote((int) $this->label, "integer").",".
242  $ilDB->now().")";
243  $ilDB->manipulate($q);*/
244 
245  $ilDB->insert("note", array(
246  "id" => array("integer", $this->id),
247  "rep_obj_id" => array("integer", (int) $this->rep_obj_id),
248  "obj_id" => array("integer", (int) $this->obj_id),
249  "obj_type" => array("text", (string) $this->obj_type),
250  "type" => array("integer", (int) $this->type),
251  "author" => array("integer", (int) $this->author),
252  "note_text" => array("clob", (string) $this->text),
253  "subject" => array("text", (string) $this->subject),
254  "label" => array("integer", (int) $this->label),
255  "creation_date" => array("timestamp", ilUtil::now())
256  ));
257 
258  $this->creation_date = ilNote::_lookupCreationDate($this->getId());
259  }
260 
261  function update()
262  {
263  global $ilDB;
264 
265  /*$q = "UPDATE note SET ".
266  "rep_obj_id = ".$ilDB->quote((int) $this->rep_obj_id, "integer").",".
267  "obj_id = ".$ilDB->quote((int) $this->obj_id, "integer").",".
268  "obj_type = ".$ilDB->quote((string) $this->obj_type, "text").",".
269  "type = ".$ilDB->quote((int) $this->type, "integer").",".
270  "author = ".$ilDB->quote((int) $this->author,"integer").",".
271  "note_text = ".$ilDB->quote((string) $this->text, "clob").",".
272  "subject = ".$ilDB->quote((string) $this->subject, "text").",".
273  "update_date = ".$ilDB->now().",".
274  "label = ".$ilDB->quote((int) $this->label, "integer").
275  "WHERE id =".$ilDB->quote((int) $this->getId(), "integer");
276  $ilDB->manipulate($q);*/
277  $ilDB->update("note", array(
278  "rep_obj_id" => array("integer", (int) $this->rep_obj_id),
279  "obj_id" => array("integer", (int) $this->obj_id),
280  "obj_type" => array("text", (string) $this->obj_type),
281  "type" => array("integer", (int) $this->type),
282  "author" => array("integer", (int) $this->author),
283  "note_text" => array("clob", (string) $this->text),
284  "subject" => array("text", (string) $this->subject),
285  "label" => array("integer", (int) $this->label),
286  "update_date" => array("timestamp", ilUtil::now())
287  ), array(
288  "id" => array("integer", $this->getId())
289  ));
290 
291  $this->update_date = ilNote::_lookupUpdateDate($this->getId());
292  }
293 
294  function read()
295  {
296  global $ilDB;
297 
298  $q = "SELECT * FROM note WHERE id = ".
299  $ilDB->quote((int) $this->getId(), "integer");
300  $set = $ilDB->query($q);
301  $note_rec = $ilDB->fetchAssoc($set);
302  $this->setAllData($note_rec);
303  }
304 
308  function delete()
309  {
310  global $ilDB;
311 
312  $q = "DELETE FROM note WHERE id = ".
313  $ilDB->quote((int) $this->getId(), "integer");
314  $ilDB->manipulate($q);
315  }
316 
320  function setAllData($a_note_rec)
321  {
322  $this->setId($a_note_rec["id"]);
323  $this->setObject($a_note_rec["obj_type"], $a_note_rec["rep_obj_id"], $a_note_rec["obj_id"]);
324  $this->setType($a_note_rec["type"]);
325  $this->setAuthor($a_note_rec["author"]);
326  $this->setText($a_note_rec["note_text"]);
327  $this->setSubject($a_note_rec["subject"]);
328  $this->setLabel($a_note_rec["label"]);
329  $this->setCreationDate($a_note_rec["creation_date"]);
330  $this->setUpdateDate($a_note_rec["update_date"]);
331  }
332 
336  function _lookupCreationDate($a_id)
337  {
338  global $ilDB;
339 
340  $q = "SELECT * FROM note WHERE id = ".
341  $ilDB->quote((int) $this->getId(), "integer");
342  $set = $ilDB->query($q);
343  $note_rec = $ilDB->fetchAssoc($set);
344 
345  return $note_rec["creation_date"];
346  }
347 
351  function _lookupUpdateDate($a_id)
352  {
353  global $ilDB;
354 
355  $q = "SELECT * FROM note WHERE id = ".
356  $ilDB->quote((int) $this->getId(), "integer");
357  $set = $ilDB->query($q);
358  $note_rec = $ilDB->fetchAssoc($set);
359 
360  return $note_rec["update_date"];
361  }
362 
366  function _getNotesOfObject($a_rep_obj_id, $a_obj_id, $a_obj_type,
367  $a_type = IL_NOTE_PRIVATE, $a_incl_sub = false, $a_filter = "",
368  $a_all_public = "y")
369  {
370  global $ilDB, $ilUser;
371 
372  $author_where = ($a_type == IL_NOTE_PRIVATE || $a_all_public == "n")
373  ? " AND author = ".$ilDB->quote((int) $ilUser->getId(), "integer")
374  : "";
375 
376  $sub_where = (!$a_incl_sub)
377  ? " AND obj_id = ".$ilDB->quote((int) $a_obj_id, "integer").
378  " AND obj_type = ".$ilDB->quote((string) $a_obj_type, "text")
379  : "";
380 
381  $q = "SELECT * FROM note WHERE ".
382  " rep_obj_id = ".$ilDB->quote((int) $a_rep_obj_id, "integer").
383  $sub_where.
384  " AND type = ".$ilDB->quote((int) $a_type, "integer").
385  $author_where.
386  " ORDER BY creation_date DESC";
387 
388  $set = $ilDB->query($q);
389  $notes = array();
390  while($note_rec = $ilDB->fetchAssoc($set))
391  {
392  if ($a_filter != "")
393  {
394  if (!is_array($a_filter))
395  {
396  $a_filter = array($a_filter);
397  }
398  if (!in_array($note_rec["id"], $a_filter))
399  {
400  continue;
401  }
402  }
403  $cnt = count($notes);
404  $notes[$cnt] = new ilNote();
405  $notes[$cnt]->setAllData($note_rec);
406  }
407 
408  return $notes;
409  }
410 
415  {
416  global $ilDB, $ilUser;
417 
418  $q = "SELECT * FROM note WHERE ".
419  " type = ".$ilDB->quote((int) IL_NOTE_PRIVATE, "integer").
420  " AND author = ".$ilDB->quote((int) $ilUser->getId(), "integer").
421  " ORDER BY creation_date DESC";
422 
423  $ilDB->quote($q);
424  $set = $ilDB->query($q);
425  $notes = array();
426  while($note_rec = $ilDB->fetchAssoc($set))
427  {
428  $cnt = count($notes);
429  $notes[$cnt] = new ilNote();
430  $notes[$cnt]->setAllData($note_rec);
431  }
432 
433  return $notes;
434  }
435 
439  function _getRelatedObjectsOfUser($a_mode)
440  {
441  global $ilDB, $ilUser;
442 
443  if ($a_mode == ilPDNotesGUI::PRIVATE_NOTES)
444  {
445  $q = "SELECT DISTINCT rep_obj_id FROM note WHERE ".
446  " type = ".$ilDB->quote((int) IL_NOTE_PRIVATE, "integer").
447  " AND author = ".$ilDB->quote($ilUser->getId(), "integer").
448  " ORDER BY rep_obj_id";
449 
450  $ilDB->quote($q);
451  $set = $ilDB->query($q);
452  $reps = array();
453  while($rep_rec = $ilDB->fetchAssoc($set))
454  {
455  $reps[] = array("rep_obj_id" => $rep_rec["rep_obj_id"]);
456  }
457  }
458  else
459  {
460  // all objects where the user wrote at least one comment
461  $q = "SELECT DISTINCT rep_obj_id FROM note WHERE ".
462  " type = ".$ilDB->quote((int) IL_NOTE_PUBLIC, "integer").
463  " AND author = ".$ilDB->quote($ilUser->getId(), "integer").
464  " ORDER BY rep_obj_id";
465 
466  $set = $ilDB->query($q);
467  $reps = array();
468  while($rep_rec = $ilDB->fetchAssoc($set))
469  {
470  $reps[] = array("rep_obj_id" => $rep_rec["rep_obj_id"]);
471  }
472 
473  // additionally all objects on the personal desktop of the user
474  // that have at least on comment
475  $dis = ilObjUser::_lookupDesktopItems($ilUser->getId());
476  $obj_ids = array();
477  foreach($dis as $di)
478  {
479  $obj_ids[] = $di["obj_id"];
480  }
481  if (count($obj_ids) > 0)
482  {
483  $q = "SELECT DISTINCT rep_obj_id FROM note WHERE ".
484  $ilDB->in("rep_obj_id", $obj_ids, false, "integer");
485 
486  $set = $ilDB->query($q);
487  while($rec = $ilDB->fetchAssoc($set))
488  {
489  $add = true;
490  reset($reps);
491  foreach ($reps as $r)
492  {
493  if ($r["rep_obj_id"] == $rec["rep_obj_id"])
494  {
495  $add = false;
496  }
497  }
498  if ($add)
499  {
500  $reps[] = array("rep_obj_id" => $rec["rep_obj_id"]);
501  }
502  }
503  }
504  }
505 
506  return $reps;
507  }
508 
516  static function getUserCount($a_rep_obj_id, $a_obj_id, $a_type)
517  {
518  global $ilDB;
519 
520  $set = $ilDB->queryF("SELECT count(DISTINCT author) cnt FROM note WHERE ".
521  "rep_obj_id = %s AND obj_id = %s AND obj_type = %s",
522  array("integer", "integer", "text"),
523  array((int)$a_rep_obj_id, (int)$a_obj_id, (string)$a_type));
524  $rec = $ilDB->fetchAssoc($set);
525 
526  return (int) $rec["cnt"];
527  }
528 
529 }
530 ?>