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
5include_once("./Services/Component/classes/class.ilPlugin.php");
6
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}
An exception for terminatinating execution or to throw for unit testing.
const IL_COMP_SERVICE
Abstract parent class for all advanced md claiming plugin classes.
static getDBSubstitution($a_obj_type, $a_include_field_data=false)
Get substitution DB data for object type.
static deleteDBField($a_field_id)
Delete field db entry.
static getDBFieldLastPosition($a_record_id)
Get last position of record.
static removeDBFieldSubstitution($a_obj_type, $a_field_id)
Remove field substitution entry in DB.
static hasDBFieldSubstitution($a_obj_type, $a_field_id)
Is substitution active for field in object type.
slotInit()
Object initialization done by slot.
static updateDBField($a_field_id, $a_title, $a_description=null, $a_searchable=false, array $a_definition=null)
Update field db entry.
static deleteDBRecord($a_record_id)
Delete record db entry.
static updateDBRecord($a_record_id, $a_title, $a_description, $a_active, array $a_obj_types)
Update record db entry.
static createDBRecord($a_title, $a_description, $a_active, array $a_obj_types)
Create record db entry.
static hasDBField($a_field_id)
Check if field has db entry.
static isValidObjType($a_obj_type, $a_is_substitution=false)
Validate object type.
static hasDBRecord($a_record_id)
Check if record has db entry.
static createDBField($a_record_id, $a_type, $a_title, $a_description=null, $a_searchable=false, array $a_definition=null)
Create field db entry.
static saveRecordObjTypes($a_record_id, array $a_obj_types)
Save object type assignments for record.
checkPermission($a_user_id, $a_context_type, $a_context_id, $a_action_id, $a_action_sub_id)
Check permission.
static setDBFieldSubstitution($a_obj_type, $a_field_id, $a_bold=false, $a_newline=false)
Update field substitution entry in DB.
static setDBSubstitution($a_obj_type, $a_show_description, $a_show_field_names)
Set substitution DB entry (for object type)
$valid
$type
foreach($_POST as $key=> $value) $res
global $ilDB
$a_context_id
Definition: workflow.php:97
$a_type
Definition: workflow.php:92
$a_context_type
Definition: workflow.php:96