ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilAdvancedMDClaimingPlugin.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 
5 include_once("./Services/Component/classes/class.ilPlugin.php");
6 
15 abstract class ilAdvancedMDClaimingPlugin extends ilPlugin
16 {
17  //
18  // plugin slot
19  //
20 
21  final public function getComponentType()
22  {
23  return IL_COMP_SERVICE;
24  }
25 
26  final public function getComponentName()
27  {
28  return "AdvancedMetaData";
29  }
30 
31  final public function getSlot()
32  {
33  return "AdvancedMDClaiming";
34  }
35 
36  final public function getSlotId()
37  {
38  return "amdc";
39  }
40 
41  final protected function slotInit()
42  {
43  require_once "Services/AdvancedMetaData/classes/class.ilAdvancedMDPermissionHelper.php";
44  }
45 
46 
47  //
48  // permission
49  //
50 
61  abstract public function checkPermission($a_user_id, $a_context_type, $a_context_id, $a_action_id, $a_action_sub_id);
62 
63 
64  //
65  // db update helper
66  //
67 
74  public static function hasDBRecord($a_record_id)
75  {
76  global $ilDB;
77 
78  $set = $ilDB->query("SELECT record_id FROM adv_md_record" .
79  " WHERE record_id = " . $ilDB->quote($a_record_id, "integer"));
80  return (bool) $ilDB->numRows($set);
81  }
82 
92  public static function createDBRecord($a_title, $a_description, $a_active, array $a_obj_types)
93  {
94  global $ilDB;
95 
96  $record_id = $ilDB->nextId("adv_md_record");
97 
98  $fields = array(
99  "record_id" => array("integer", $record_id),
100  "import_id" => array("text", 'il_' . IL_INST_ID . '_adv_md_record_' . $record_id),
101  "title" => array("text", trim($a_title)),
102  "description" => array("text", trim($a_description)),
103  "active" => array("integer", (int) $a_active)
104  );
105  $ilDB->insert("adv_md_record", $fields);
106 
107  self::saveRecordObjTypes($record_id, $a_obj_types);
108 
109  return $record_id;
110  }
111 
119  protected static function isValidObjType($a_obj_type, $a_is_substitution = false)
120  {
121  // ecs not supported yet
122  $valid = array("crs", "cat", "book", "wiki", "glo", "orgu", "prg");
123 
124  if (!$a_is_substitution) {
125  $valid[] = "orgu";
126  $valid[] = "prg";
127  }
128 
129  return in_array($a_obj_type, $valid);
130  }
131 
138  protected static function saveRecordObjTypes($a_record_id, array $a_obj_types)
139  {
140  global $ilDB;
141 
142  foreach ($a_obj_types as $type) {
143  if (!is_array($type)) {
144  $type = strtolower(trim($type));
145  $subtype = "-";
146  } else {
147  $subtype = strtolower(trim($type[1]));
148  $type = strtolower(trim($type[0]));
149  }
150 
151  if (self::isValidObjType($type)) {
152  $fields = array(
153  "record_id" => array("integer", $a_record_id),
154  "obj_type" => array("text", $type),
155  "sub_type" => array("text", $subtype)
156  );
157  $ilDB->insert("adv_md_record_objs", $fields);
158  }
159  }
160  }
161 
172  public static function updateDBRecord($a_record_id, $a_title, $a_description, $a_active, array $a_obj_types)
173  {
174  global $ilDB;
175 
176  if (self::hasDBRecord($a_record_id)) {
177  $fields = array(
178  "title" => array("text", trim($a_title)),
179  "description" => array("text", trim($a_description)),
180  "active" => array("integer", (int) $a_active)
181  );
182  $ilDB->update(
183  "adv_md_record",
184  $fields,
185  array("record_id" => array("integer", $a_record_id))
186  );
187 
188  $ilDB->manipulate("DELETE FROM adv_md_record_objs" .
189  " WHERE record_id = " . $ilDB->quote($a_record_id, "integer"));
190 
191  self::saveRecordObjTypes($a_record_id, $a_obj_types);
192 
193  return true;
194  }
195 
196  return false;
197  }
198 
205  public static function deleteDBRecord($a_record_id)
206  {
207  global $ilDB;
208 
209  if (self::hasDBRecord($a_record_id)) {
210  $ilDB->manipulate("DELETE FROM adv_md_record" .
211  " WHERE record_id = " . $ilDB->quote($a_record_id, "integer"));
212  return true;
213  }
214 
215  return false;
216  }
217 
224  public static function hasDBField($a_field_id)
225  {
226  global $ilDB;
227 
228  $set = $ilDB->query("SELECT field_id FROM adv_mdf_definition" .
229  " WHERE field_id = " . $ilDB->quote($a_field_id, "integer"));
230  return (bool) $ilDB->numRows($set);
231  }
232 
233 
241  protected static function getDBFieldLastPosition($a_record_id)
242  {
243  global $ilDB;
244 
245  $sql = "SELECT max(position) pos" .
246  " FROM adv_mdf_definition" .
247  " WHERE record_id = " . $ilDB->quote($a_record_id, "integer");
248  $set = $ilDB->query($sql);
249  if ($ilDB->numRows($set)) {
250  $pos = $ilDB->fetchAssoc($set);
251  return (int) $pos["pos"];
252  }
253 
254  return 0;
255  }
256 
268  public static function createDBField($a_record_id, $a_type, $a_title, $a_description = null, $a_searchable = false, array $a_definition = null)
269  {
270  global $ilDB;
271 
272  if (!self::hasDBRecord($a_record_id)) {
273  return;
274  }
275 
276  $field_id = $ilDB->nextId("adv_mdf_definition");
277 
278  // validating type
279  $a_type = (int) $a_type;
280  if ($a_type < 1 || $a_type > 8) {
281  return;
282  }
283 
284  $pos = self::getDBFieldLastPosition($a_record_id)+1;
285 
286  $fields = array(
287  "record_id" => array("integer", $a_record_id),
288  "field_id" => array("integer", $field_id),
289  "import_id" => array("text", "il_" . IL_INST_ID . "_adv_md_field_" . $field_id),
290  "field_type" => array("integer", $a_type),
291  "position" => array("integer", $pos),
292  "title" => array("text", trim($a_title)),
293  "description" => array("text", trim($a_description)),
294  "searchable" => array("integer", (int) $a_searchable)
295  );
296  if ($a_definition) {
297  $fields["field_values"] = array("text", serialize($a_definition));
298  }
299  $ilDB->insert("adv_mdf_definition", $fields);
300 
301  return $field_id;
302  }
303 
314  public static function updateDBField($a_field_id, $a_title, $a_description = null, $a_searchable = false, array $a_definition = null)
315  {
316  global $ilDB;
317 
318  if (self::hasDBField($a_field_id)) {
319  $fields = array(
320  "field_id" => array("integer", $a_field_id),
321  "title" => array("text", trim($a_title)),
322  "description" => array("text", trim($a_description)),
323  "searchable" => array("integer", (int) $a_searchable)
324  );
325  if ($a_definition) {
326  $fields["field_values"] = array("text", serialize($a_definition));
327  }
328  $ilDB->update(
329  "adv_mdf_definition",
330  $fields,
331  array("field_id" => array("integer", $a_field_id))
332  );
333  return true;
334  }
335 
336  return false;
337  }
338 
345  public static function deleteDBField($a_field_id)
346  {
347  global $ilDB;
348 
349  if (self::hasDBField($a_field_id)) {
350  $ilDB->manipulate("DELETE FROM adv_mdf_definition" .
351  " WHERE field_id = " . $ilDB->quote($a_field_id, "integer"));
352  return true;
353  }
354 
355  return false;
356  }
357 
365  protected static function getDBSubstitution($a_obj_type, $a_include_field_data = false)
366  {
367  global $ilDB;
368 
369  $set = $ilDB->query("SELECT * FROM adv_md_substitutions" .
370  " WHERE obj_type = " . $ilDB->quote($a_obj_type, "text"));
371  if ($ilDB->numRows($set)) {
372  $res = $ilDB->fetchAssoc($set);
373  $res["hide_description"] = array("integer", (bool) $res["hide_description"]);
374  $res["hide_field_names"] = array("integer", (bool) $res["hide_field_names"]);
375 
376  if ($a_include_field_data) {
377  $res["substitution"] = array("text", (array) unserialize($res["substitution"]));
378  } else {
379  unset($res["substitution"]);
380  }
381  unset($res["obj_type"]);
382 
383  return $res;
384  }
385  }
386 
395  public static function setDBSubstitution($a_obj_type, $a_show_description, $a_show_field_names)
396  {
397  global $ilDB;
398 
399  if (self::isValidObjType($a_obj_type, true)) {
400  $fields = self::getDBSubstitution($a_obj_type);
401 
402  $create = false;
403  if (!$fields) {
404  $create = true;
405  $fields = array("obj_type" => array("text", $a_obj_type));
406  }
407 
408  $fields["hide_description"] = array("integer", !(bool) $a_show_description);
409  $fields["hide_field_names"] = array("integer", !(bool) $a_show_field_names);
410 
411  if ($create) {
412  $ilDB->insert("adv_md_substitutions", $fields);
413  } else {
414  $ilDB->update(
415  "adv_md_substitutions",
416  $fields,
417  array("obj_type" => array("text", $a_obj_type))
418  );
419  }
420 
421  return true;
422  }
423  return false;
424  }
425 
433  public static function hasDBFieldSubstitution($a_obj_type, $a_field_id)
434  {
435  if (self::isValidObjType($a_obj_type, true)) {
436  $fields = self::getDBSubstitution($a_obj_type, true);
437  $fields = $fields["substitution"][1];
438  foreach ($fields as $field) {
439  if ($field["field_id"] == $a_field_id) {
440  return true;
441  }
442  }
443  return false;
444  }
445  }
446 
456  public static function setDBFieldSubstitution($a_obj_type, $a_field_id, $a_bold = false, $a_newline = false)
457  {
458  global $ilDB;
459 
460  if (self::isValidObjType($a_obj_type, true)) {
461  $fields = self::getDBSubstitution($a_obj_type, true);
462  if (!$fields) {
463  self::setDBSubstitution($a_obj_type, true, true);
464  $fields = array();
465  } else {
466  $fields = $fields["substitution"][1];
467  }
468 
469  $found = false;
470  foreach ($fields as $idx => $field) {
471  if ($field["field_id"] == $a_field_id) {
472  $fields[$idx]["bold"] = (bool) $a_bold;
473  $fields[$idx]["newline"] = (bool) $a_newline;
474  $found = true;
475  break;
476  }
477  }
478  if (!$found) {
479  $fields[] = array(
480  "field_id" => $a_field_id
481  ,"bold" => (bool) $a_bold
482  ,"newline" => (bool) $a_newline
483  );
484  }
485 
486  $fields = array("substitution"=>array("text", serialize($fields)));
487  $ilDB->update(
488  "adv_md_substitutions",
489  $fields,
490  array("obj_type" => array("text", $a_obj_type))
491  );
492  }
493  return false;
494  }
495 
503  public static function removeDBFieldSubstitution($a_obj_type, $a_field_id)
504  {
505  global $ilDB;
506 
507  if (self::isValidObjType($a_obj_type, true)) {
508  $fields = self::getDBSubstitution($a_obj_type, true);
509  if (!$fields) {
510  return true;
511  } else {
512  $fields = $fields["substitution"][1];
513  }
514 
515  $found = false;
516  foreach ($fields as $idx => $field) {
517  if ($field["field_id"] == $a_field_id) {
518  unset($fields[$idx]);
519  $found = true;
520  break;
521  }
522  }
523  if ($found) {
524  $fields = array("substitution"=>array("text", serialize($fields)));
525  $ilDB->update(
526  "adv_md_substitutions",
527  $fields,
528  array("obj_type" => array("text", $a_obj_type))
529  );
530  }
531  return true;
532  }
533  return false;
534  }
535 }
$type
$valid
static hasDBField($a_field_id)
Check if field has db entry.
static saveRecordObjTypes($a_record_id, array $a_obj_types)
Save object type assignments for record.
$a_context_id
Definition: workflow.php:97
static updateDBRecord($a_record_id, $a_title, $a_description, $a_active, array $a_obj_types)
Update record db entry.
static deleteDBRecord($a_record_id)
Delete record db entry.
static isValidObjType($a_obj_type, $a_is_substitution=false)
Validate object type.
Abstract parent class for all advanced md claiming plugin classes.
static setDBSubstitution($a_obj_type, $a_show_description, $a_show_field_names)
Set substitution DB entry (for object type)
static getDBFieldLastPosition($a_record_id)
Get last position of record.
$a_type
Definition: workflow.php:92
static setDBFieldSubstitution($a_obj_type, $a_field_id, $a_bold=false, $a_newline=false)
Update field substitution entry in DB.
foreach($_POST as $key=> $value) $res
static getDBSubstitution($a_obj_type, $a_include_field_data=false)
Get substitution DB data for object type.
Create styles array
The data for the language used.
static createDBRecord($a_title, $a_description, $a_active, array $a_obj_types)
Create record db entry.
$a_context_type
Definition: workflow.php:96
static deleteDBField($a_field_id)
Delete field db entry.
static updateDBField($a_field_id, $a_title, $a_description=null, $a_searchable=false, array $a_definition=null)
Update field db entry.
static removeDBFieldSubstitution($a_obj_type, $a_field_id)
Remove field substitution entry in DB.
global $ilDB
checkPermission($a_user_id, $a_context_type, $a_context_id, $a_action_id, $a_action_sub_id)
Check permission.
static createDBField($a_record_id, $a_type, $a_title, $a_description=null, $a_searchable=false, array $a_definition=null)
Create field db entry.
static hasDBFieldSubstitution($a_obj_type, $a_field_id)
Is substitution active for field in object type.
const IL_COMP_SERVICE
static hasDBRecord($a_record_id)
Check if record has db entry.