ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilHistory.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
10 class ilHistory
11 {
12 
31  public static function _createEntry(
32  $a_obj_id,
33  $a_action,
34  $a_info_params = "",
35  $a_obj_type = "",
36  $a_user_comment = "",
37  $a_update_last = false
38  ) {
39  global $DIC;
40 
41  $ilDB = $DIC->database();
42  $ilUser = $DIC->user();
43 
44  if ($a_obj_type == "") {
45  $a_obj_type = ilObject::_lookupType($a_obj_id);
46  }
47 
48  if (is_array($a_info_params)) {
49  foreach ($a_info_params as $key => $param) {
50  $a_info_params[$key] = str_replace(",", "&#044;", $param);
51  }
52  $a_info_params = implode(",", $a_info_params);
53  }
54 
55  // get last entry of object
56  $last_entry_sql = "SELECT * FROM history WHERE " .
57  " obj_id = " . $ilDB->quote($a_obj_id, "integer") . " AND " .
58  " obj_type = " . $ilDB->quote($a_obj_type, "text") . " ORDER BY hdate DESC";
59  $last_entry_set = $ilDB->query($last_entry_sql);
60  $last_entry = $ilDB->fetchAssoc($last_entry_set);
61 
62  // note: insert is forced if last entry already has a comment and a
63  // new comment is given too OR
64  // if entry should not be updated OR
65  // if current action or user id are not equal with last entry
66  if (($a_user_comment != "" && $last_entry["user_comment"] != "")
67  || !$a_update_last || $a_action != $last_entry["action"]
68  || $ilUser->getId() != $last_entry["usr_id"]) {
69  $id = $ilDB->nextId("history");
70  $ilDB->insert("history", array(
71  "id" => array("integer", $id),
72  "obj_id" => array("integer", $a_obj_id),
73  "obj_type" => array("text", $a_obj_type),
74  "action" => array("text", $a_action),
75  "hdate" => array("timestamp", ilUtil::now()),
76  "usr_id" => array("integer", $ilUser->getId()),
77  "info_params" => array("text", $a_info_params),
78  "user_comment" => array("clob", $a_user_comment)
79  ));
80 
81  /*$query = "INSERT INTO history (id, obj_id, obj_type, action, hdate, usr_id, info_params, user_comment) VALUES ".
82  "(".
83  $ilDB->quote($id).", ".
84  $ilDB->quote($a_obj_id).", ".
85  $ilDB->quote($a_obj_type).", ".
86  $ilDB->quote($a_action).", ".
87  "now(), ".
88  $ilDB->quote($ilUser->getId()).", ".
89  $ilDB->quote($a_info_params).", ".
90  $ilDB->quote($a_user_comment).
91  ")";
92  $ilDB->query($query);*/
93  } else {
94  // if entry should be updated, update user comment only
95  // if it is set (this means, user comment has been empty
96  // because if old and new comment are given, an INSERT is forced
97  // see if statement above)
98  //$uc_str = ($a_user_comment != "")
99  // ? ", user_comment = ".$ilDB->quote($a_user_comment)
100  // : "";
101  /*$query = "UPDATE history SET ".
102  " hdate = now() ".
103  $uc_str.
104  " WHERE id = ".$ilDB->quote($last_entry["id"]);
105  $ilDB->query($query);*/
106 
107  $fields = array(
108  "hdate" => array("timestamp", ilUtil::now())
109  );
110  if ($a_user_comment != "") {
111  $fields["user_comment"] = array("clob", $a_user_comment);
112  }
113 
114  $ilDB->update("history", $fields, array(
115  "id" => array("integer", $id)
116  ));
117  }
118  }
119 
128  public static function _getEntriesForObject($a_obj_id, $a_obj_type = "")
129  {
130  global $DIC;
131 
132  $ilDB = $DIC->database();
133 
134  if ($a_obj_type == "") {
135  $a_obj_type = ilObject::_lookupType($a_obj_id);
136  }
137 
138  $query = "SELECT * FROM history WHERE obj_id = " .
139  $ilDB->quote($a_obj_id, "integer") . " AND " .
140  "obj_type = " . $ilDB->quote($a_obj_type, "text") .
141  " ORDER BY hdate DESC";
142 
143  $hist_set = $ilDB->query($query);
144 
145  $hist_items = array();
146  while ($hist_rec = $ilDB->fetchAssoc($hist_set)) {
147  $hist_items[] = array("date" => $hist_rec["hdate"],
148  "user_id" => $hist_rec["usr_id"],
149  "obj_id" => $hist_rec["obj_id"],
150  "obj_type" => $hist_rec["obj_type"],
151  "action" => $hist_rec["action"],
152  "info_params" => $hist_rec["info_params"],
153  "user_comment" => $hist_rec["user_comment"],
154  "hist_entry_id" => $hist_rec["id"],
155  "title" => $hist_rec["title"]);
156  }
157 
158  if ($a_obj_type == "lm") {
159  $query = "SELECT h.*, l.title as title FROM history h, lm_data l WHERE " .
160  " l.lm_id = " . $ilDB->quote($a_obj_id, "integer") . " AND " .
161  " l.obj_id = h.obj_id AND " .
162  " (h.obj_type=" . $ilDB->quote($a_obj_type . ":pg", "text") . " OR h.obj_type=" . $ilDB->quote($a_obj_type . ":st", "text") . ") " .
163  " ORDER BY h.hdate DESC";
164 
165  $hist_set = $ilDB->query($query);
166  while ($hist_rec = $ilDB->fetchAssoc($hist_set)) {
167  $hist_items[] = array("date" => $hist_rec["hdate"],
168  "user_id" => $hist_rec["usr_id"],
169  "obj_id" => $hist_rec["obj_id"],
170  "obj_type" => $hist_rec["obj_type"],
171  "action" => $hist_rec["action"],
172  "info_params" => $hist_rec["info_params"],
173  "user_comment" => $hist_rec["user_comment"],
174  "hist_entry_id" => $hist_rec["id"],
175  "title" => $hist_rec["title"]);
176  }
177  usort($hist_items, array("ilHistory", "_compareHistArray"));
178  $hist_items2 = array_reverse($hist_items);
179  return $hist_items2;
180  }
181 
182  return $hist_items;
183  }
184 
185  public static function _compareHistArray($a, $b)
186  {
187  if ($a["date"] == $b["date"]) {
188  return 0;
189  }
190  return ($a["date"] < $b["date"]) ? -1 : 1;
191  }
192 
200  public static function _removeEntriesForObject($a_obj_id)
201  {
202  global $DIC;
203 
204  $ilDB = $DIC->database();
205 
206  $q = "DELETE FROM history WHERE obj_id = " .
207  $ilDB->quote($a_obj_id, "integer");
208  $r = $ilDB->manipulate($q);
209 
210  return true;
211  }
212 
220  public static function _copyEntriesForObject($a_src_id, $a_dst_id)
221  {
222  global $DIC;
223 
224  $ilDB = $DIC->database();
225 
226  $q = "SELECT * FROM history WHERE obj_id = " .
227  $ilDB->quote($a_src_id, "integer");
228  $r = $ilDB->query($q);
229 
230  while ($row = $ilDB->fetchObject($r)) {
231  $id = $ilDB->nextId("history");
232  $ilDB->insert("history", array(
233  "id" => array("integer", $id),
234  "obj_id" => array("integer", $a_dst_id),
235  "obj_type" => array("text", $row->obj_type),
236  "action" => array("text", $row->action),
237  "hdate" => array("timestamp", ilUtil::now()),
238  "usr_id" => array("integer", $row->usr_id),
239  "info_params" => array("text", $row->info_params),
240  "user_comment" => array("clob", $row->user_comment)
241  ));
242 
243  /*
244  $q = "INSERT INTO history (obj_id, obj_type, action, hdate, usr_id, info_params, user_comment) VALUES ".
245  "(".
246  $ilDB->quote($a_dst_id).", ".
247  $ilDB->quote($row->obj_type).", ".
248  $ilDB->quote($row->action).", ".
249  $ilDB->quote($row->hdate).", ".
250  $ilDB->quote($row->usr_id).", ".
251  $ilDB->quote($row->info_params).", ".
252  $ilDB->quote($row->user_comment).
253  ")";
254 
255  $ilDB->query($q);*/
256  }
257 
258  return true;
259  }
260 
266  public static function _getEntryByHistoryID($a_hist_entry_id)
267  {
268  global $DIC;
269 
270  $ilDB = $DIC->database();
271 
272  $q = "SELECT * FROM history WHERE id = " .
273  $ilDB->quote($a_hist_entry_id, "integer");
274  $r = $ilDB->query($q);
275 
276  return $ilDB->fetchAssoc($r);
277  }
278 
284  public static function _removeEntryByHistoryID($a_hist_entry_id)
285  {
286  global $DIC;
287 
288  $ilDB = $DIC->database();
289 
290  $q = "DELETE FROM history WHERE id = " .
291  $ilDB->quote($a_hist_entry_id, "integer");
292  $ilDB->manipulate($q);
293  }
294 
301  public static function _changeUserId($a_hist_entry_id, $new_user_id)
302  {
303  global $DIC;
304 
305  $ilDB = $DIC->database();
306 
307  $ilDB->update(
308  "history",
309  array("usr_id" => array("integer", $new_user_id)),
310  array("id" => array("integer", $a_hist_entry_id))
311  );
312  }
313 } // END class.ilHistory
static _removeEntryByHistoryID($a_hist_entry_id)
Removes a single entry from the history.
static _changeUserId($a_hist_entry_id, $new_user_id)
Changes the user id of the specified history entry.
global $DIC
Definition: saml.php:7
if(!array_key_exists('StateId', $_REQUEST)) $id
static _compareHistArray($a, $b)
static now()
Return current timestamp in Y-m-d H:i:s format.
static _createEntry( $a_obj_id, $a_action, $a_info_params="", $a_obj_type="", $a_user_comment="", $a_update_last=false)
Creates a new history entry for an object.
static _getEntryByHistoryID($a_hist_entry_id)
returns a single history entry
This class methods for maintain history enties for objects.
$r
Definition: example_031.php:79
static _copyEntriesForObject($a_src_id, $a_dst_id)
copy all history entries for an object
$ilUser
Definition: imgupload.php:18
$query
static _getEntriesForObject($a_obj_id, $a_obj_type="")
get all history entries for an object
static _lookupType($a_id, $a_reference=false)
lookup object type
$row
global $ilDB
static _removeEntriesForObject($a_obj_id)
remove all history entries for an object
$key
Definition: croninfo.php:18