ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilGlossaryTerm.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
13{
14 var $ilias;
15 var $lng;
16 var $tpl;
17
18 var $id;
20 var $term;
24
29 function __construct($a_id = 0)
30 {
31 global $lng, $ilias, $tpl;
32
33 $this->lng = $lng;
34 $this->ilias = $ilias;
35 $this->tpl = $tpl;
36
37 $this->id = $a_id;
38 $this->type = "term";
39 if ($a_id != 0)
40 {
41 $this->read();
42 }
43 }
44
48 function read()
49 {
50 global $ilDB;
51
52 $q = "SELECT * FROM glossary_term WHERE id = ".
53 $ilDB->quote($this->id, "integer");
54 $term_set = $ilDB->query($q);
55 $term_rec = $ilDB->fetchAssoc($term_set);
56
57 $this->setTerm($term_rec["term"]);
58 $this->setImportId($term_rec["import_id"]);
59 $this->setLanguage($term_rec["language"]);
60 $this->setGlossaryId($term_rec["glo_id"]);
61
62 }
63
71 static function _getIdForImportId($a_import_id)
72 {
73 global $ilDB;
74
75 if ($a_import_id == "")
76 {
77 return 0;
78 }
79
80 $q = "SELECT * FROM glossary_term WHERE import_id = ".
81 $ilDB->quote($a_import_id, "text").
82 " ORDER BY create_date DESC";
83 $term_set = $ilDB->query($q);
84 while ($term_rec = $ilDB->fetchAssoc($term_set))
85 {
87
88 $ref_ids = ilObject::_getAllReferences($glo_id); // will be 0 if import of lm is in progress (new import)
89 if (count($ref_ids) == 0 || ilObject::_hasUntrashedReference($glo_id))
90 {
91 return $term_rec["id"];
92 }
93 }
94
95 return 0;
96 }
97
98
106 static function _exists($a_id)
107 {
108 global $ilDB;
109
110 include_once("./Services/Link/classes/class.ilInternalLink.php");
111 if (is_int(strpos($a_id, "_")))
112 {
114 }
115
116 $q = "SELECT * FROM glossary_term WHERE id = ".
117 $ilDB->quote($a_id, "integer");
118 $obj_set = $ilDB->query($q);
119 if ($obj_rec = $ilDB->fetchAssoc($obj_set))
120 {
121 return true;
122 }
123 else
124 {
125 return false;
126 }
127
128 }
129
130
136 function setId($a_id)
137 {
138 $this->id = $a_id;
139 }
140
141
147 function getId()
148 {
149 return $this->id;
150 }
151
157 function setGlossary(&$a_glossary)
158 {
159 $this->glossary = $a_glossary;
160 $this->setGlossaryId($a_glossary->getId());
161 }
162
163
169 function setGlossaryId($a_glo_id)
170 {
171 $this->glo_id = $a_glo_id;
172 }
173
174
180 function getGlossaryId()
181 {
182 return $this->glo_id;
183 }
184
185
191 function setTerm($a_term)
192 {
193 $this->term = $a_term;
194 }
195
196
202 function getTerm()
203 {
204 return $this->term;
205 }
206
207
213 function setLanguage($a_language)
214 {
215 $this->language = $a_language;
216 }
217
222 function getLanguage()
223 {
224 return $this->language;
225 }
226
227
231 function setImportId($a_import_id)
232 {
233 $this->import_id = $a_import_id;
234 }
235
236
240 function getImportId()
241 {
242 return $this->import_id;
243 }
244
245
249 function create()
250 {
251 global $ilDB;
252
253 $this->setId($ilDB->nextId("glossary_term"));
254 $ilDB->manipulate("INSERT INTO glossary_term (id, glo_id, term, language, import_id, create_date, last_update)".
255 " VALUES (".
256 $ilDB->quote($this->getId(), "integer").", ".
257 $ilDB->quote($this->getGlossaryId(), "integer").", ".
258 $ilDB->quote($this->term, "text").", ".
259 $ilDB->quote($this->language, "text").",".
260 $ilDB->quote($this->getImportId(), "text").",".
261 $ilDB->now().", ".
262 $ilDB->now().")");
263 }
264
265
269 function delete()
270 {
271 global $ilDB;
272
273 require_once("./Modules/Glossary/classes/class.ilGlossaryDefinition.php");
275 foreach($defs as $def)
276 {
277 $def_obj = new ilGlossaryDefinition($def["id"]);
278 $def_obj->delete();
279 }
280
281 // delete term references
282 include_once("./Modules/Glossary/classes/class.ilGlossaryTermReferences.php");
284
285 // delete glossary_term record
286 $ilDB->manipulate("DELETE FROM glossary_term ".
287 " WHERE id = ".$ilDB->quote($this->getId(), "integer"));
288 }
289
290
294 function update()
295 {
296 global $ilDB;
297
298 $ilDB->manipulate("UPDATE glossary_term SET ".
299 " glo_id = ".$ilDB->quote($this->getGlossaryId(), "integer").", ".
300 " term = ".$ilDB->quote($this->getTerm(), "text").", ".
301 " import_id = ".$ilDB->quote($this->getImportId(), "text").", ".
302 " language = ".$ilDB->quote($this->getLanguage(), "text").", ".
303 " last_update = ".$ilDB->now()." ".
304 " WHERE id = ".$ilDB->quote($this->getId(), "integer"));
305 }
306
310 static function _lookGlossaryID($term_id)
311 {
312 global $ilDB;
313
314 $query = "SELECT * FROM glossary_term WHERE id = ".
315 $ilDB->quote($term_id, "integer");
316 $obj_set = $ilDB->query($query);
317 $obj_rec = $ilDB->fetchAssoc($obj_set);
318
319 return $obj_rec["glo_id"];
320 }
321
325 static function _lookGlossaryTerm($term_id)
326 {
327 global $ilDB;
328
329 $query = "SELECT * FROM glossary_term WHERE id = ".
330 $ilDB->quote($term_id, "integer");
331 $obj_set = $ilDB->query($query);
332 $obj_rec = $ilDB->fetchAssoc($obj_set);
333
334 return $obj_rec["term"];
335 }
336
340 static function _lookLanguage($term_id)
341 {
342 global $ilDB;
343
344 $query = "SELECT * FROM glossary_term WHERE id = ".
345 $ilDB->quote($term_id, "integer");
346 $obj_set = $ilDB->query($query);
347 $obj_rec = $ilDB->fetchAssoc($obj_set);
348
349 return $obj_rec["language"];
350 }
351
360 static function getTermList($a_glo_id, $searchterm = "", $a_first_letter = "", $a_def = "",
361 $a_tax_node = 0, $a_add_amet_fields = false, array $a_amet_filter = null, $a_include_references = false)
362 {
363 global $ilDB;
364
365 $join = $in = "";
366
367 $terms = array();
368
369 // get all term ids under taxonomy node (if given)
370 if ($a_tax_node > 1)
371 {
372 include_once("./Services/Taxonomy/classes/class.ilObjTaxonomy.php");
373 $tax_ids = ilObjTaxonomy::getUsageOfObject($a_glo_id);
374 if (count($tax_ids) > 0)
375 {
376 $items = ilObjTaxonomy::getSubTreeItems("glo", $a_glo_id, "term", $tax_ids[0], $a_tax_node);
377 $sub_tree_ids = array();
378 foreach ($items as $i)
379 {
380 $sub_tree_ids[] = $i["item_id"];
381 }
382 $in = " AND ".$ilDB->in("gt.id", $sub_tree_ids, false, "integer");
383 }
384 }
385
386 if ($a_def != "")
387 {
388 // meta glossary?
389 if (is_array($a_glo_id))
390 {
391 $glo_where = $ilDB->in("page_object.parent_id", $a_glo_id, false, "integer");
392 }
393 else
394 {
395 $glo_where = " page_object.parent_id = ".$ilDB->quote($a_glo_id, "integer");
396 }
397
398 $join = " JOIN glossary_definition gd ON (gd.term_id = gt.id)".
399 " JOIN page_object ON (".
400 $glo_where.
401 " AND page_object.parent_type = ".$ilDB->quote("gdf", "text").
402 " AND page_object.page_id = gd.id".
403 " AND ".$ilDB->like("page_object.content", "text", "%".$a_def."%").
404 ")";
405 }
406
407 $searchterm = (!empty ($searchterm))
408 ? " AND ".$ilDB->like("term", "text", "%".$searchterm."%")." "
409 : "";
410
411 if ($a_first_letter != "")
412 {
413 $searchterm.= " AND ".$ilDB->upper($ilDB->substr("term", 1, 1))." = ".$ilDB->upper($ilDB->quote($a_first_letter, "text"))." ";
414 }
415
416 // include references
417 $where_glo_id_or = "";
418 if ($a_include_references)
419 {
420 $join.= " LEFT JOIN glo_term_reference tr ON (gt.id = tr.term_id) ";
421 if (is_array($a_glo_id))
422 {
423 $where_glo_id_or = " OR ".$ilDB->in("tr.glo_id", $a_glo_id, false, "integer");
424 }
425 else
426 {
427 $where_glo_id_or = " OR tr.glo_id = ".$ilDB->quote($a_glo_id, "integer");
428 }
429 }
430
431 // meta glossary
432 if (is_array($a_glo_id))
433 {
434 $where = "(".$ilDB->in("gt.glo_id", $a_glo_id, false, "integer").$where_glo_id_or.")";
435 }
436 else
437 {
438 $where = "(gt.glo_id = ".$ilDB->quote($a_glo_id, "integer").$where_glo_id_or.")";
439 }
440
441 $where.= $in;
442
443
444 $q = "SELECT DISTINCT(gt.term), gt.id, gt.glo_id, gt.language FROM glossary_term gt ".$join." WHERE ".$where.$searchterm." ORDER BY term";
445
446 //echo $q; exit;
447
448 $term_set = $ilDB->query($q);
449 $glo_ids = array();
450 while ($term_rec = $ilDB->fetchAssoc($term_set))
451 {
452 $terms[] = array("term" => $term_rec["term"],
453 "language" => $term_rec["language"], "id" => $term_rec["id"], "glo_id" => $term_rec["glo_id"]);
454 $glo_ids[] = $term_rec["glo_id"];
455 }
456
457 // add advanced metadata
458 if ($a_add_amet_fields || is_array($a_amet_filter))
459 {
460 include_once("./Services/AdvancedMetaData/classes/class.ilAdvancedMDValues.php");
461 $terms = ilAdvancedMDValues::queryForRecords($glo_ids, "term", $terms, "glo_id", "id", $a_amet_filter);
462 }
463 return $terms;
464 }
465
474 static function getFirstLetters($a_glo_id, $a_tax_node = 0)
475 {
476 global $ilDB;
477
478 $terms = array();
479
480 // meta glossary
481 if (is_array($a_glo_id))
482 {
483 $where = $ilDB->in("glo_id", $a_glo_id, false, "integer");
484 }
485 else
486 {
487 $where = " glo_id = ".$ilDB->quote($a_glo_id, "integer")." ";
488
489 // get all term ids under taxonomy node (if given)
490 if ($a_tax_node > 1)
491 {
492 include_once("./Services/Taxonomy/classes/class.ilObjTaxonomy.php");
493 $tax_ids = ilObjTaxonomy::getUsageOfObject($a_glo_id);
494 if (count($tax_ids) > 0)
495 {
496 $items = ilObjTaxonomy::getSubTreeItems("glo", $a_glo_id, "term", $tax_ids[0], $a_tax_node);
497 $sub_tree_ids = array();
498 foreach ($items as $i)
499 {
500 $sub_tree_ids[] = $i["item_id"];
501 }
502 $in = " AND ".$ilDB->in("id", $sub_tree_ids, false, "integer");
503 }
504 }
505
506 $where.= $in;
507 }
508
509 $q = "SELECT DISTINCT ".$ilDB->upper($ilDB->substr("term", 1, 1))." let FROM glossary_term WHERE ".$where." ORDER BY let";
510 $let_set = $ilDB->query($q);
511
512 $lets = array();
513 while ($let_rec = $ilDB->fetchAssoc($let_set))
514 {
515 $let[$let_rec["let"]] = $let_rec["let"];
516 }
517 return $let;
518 }
519
523 function exportXML(&$a_xml_writer, $a_inst)
524 {
525
526 $attrs = array();
527 $attrs["Language"] = $this->getLanguage();
528 $attrs["Id"] = "il_".IL_INST_ID."_git_".$this->getId();
529 $a_xml_writer->xmlStartTag("GlossaryItem", $attrs);
530
531 $attrs = array();
532 $a_xml_writer->xmlElement("GlossaryTerm", $attrs, $this->getTerm());
533
535
536 foreach($defs as $def)
537 {
538 $definition = new ilGlossaryDefinition($def["id"]);
539 $definition->exportXML($a_xml_writer, $a_inst);
540 }
541
542 $a_xml_writer->xmlEndTag("GlossaryItem");
543 }
544
551 static function getNumberOfUsages($a_term_id)
552 {
553 return count(ilGlossaryTerm::getUsages($a_term_id));
554 }
555
562 static function getUsages($a_term_id)
563 {
564 include_once("./Services/Link/classes/class.ilInternalLink.php");
565 $usages = (ilInternalLink::_getSourcesOfTarget("git", $a_term_id, 0));
566
567 include_once("./Modules/Glossary/classes/class.ilGlossaryTermReferences.php");
569 {
570 $usages["glo:termref:".$glo_id.":-"] = array(
571 "type" => "glo:termref",
572 "id" => $glo_id,
573 "lang" => "-"
574 );
575 }
576
577 return $usages;
578 }
579
586 static function _copyTerm($a_term_id, $a_glossary_id)
587 {
588 $old_term = new ilGlossaryTerm($a_term_id);
589
590 // copy the term
591 $new_term = new ilGlossaryTerm();
592 $new_term->setTerm($old_term->getTerm());
593 $new_term->setLanguage($old_term->getLanguage());
594 $new_term->setGlossaryId($a_glossary_id);
595 $new_term->create();
596
597 // copy the definitions
598 include_once("./Modules/Glossary/classes/class.ilGlossaryDefinition.php");
599 $def_list = ilGlossaryDefinition::getDefinitionList($a_term_id);
600 foreach ($def_list as $def)
601 {
602 $old_def = new ilGlossaryDefinition($def["id"]);
603
604 $new_def = new ilGlossaryDefinition();
605 $new_def->setShortText($old_def->getShortText());
606 $new_def->setNr($old_def->getNr());
607 $new_def->setTermId($new_term->getId());
608 $new_def->create();
609
610 // copy meta data
611 include_once("Services/MetaData/classes/class.ilMD.php");
612 $md = new ilMD($old_term->getGlossaryId(),
613 $old_def->getPageObject()->getId(),
614 $old_def->getPageObject()->getParentType());
615 $new_md = $md->cloneMD($a_glossary_id,
616 $new_def->getPageObject()->getId(),
617 $old_def->getPageObject()->getParentType());
618
619
620 $new_page = $new_def->getPageObject();
621 $old_def->getPageObject()->copy($new_page->getId(), $new_page->getParentType(), $new_page->getParentId(), true);
622
623 // page content
624 //$new_def->getPageObject()->setXMLContent($old_def->getPageObject()->copyXmlContent(true));
625 //$new_def->getPageObject()->buildDom();
626 //$new_def->getPageObject()->update();
627
628 }
629
630 // adv metadata
631 include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php');
632 include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php');
633 $old_recs = ilAdvancedMDRecord::_getSelectedRecordsByObject("glo", $old_term->getGlossaryId(), "term");
634 $new_recs = ilAdvancedMDRecord::_getSelectedRecordsByObject("glo", $a_glossary_id, "term");
635 foreach($old_recs as $old_record_obj)
636 {
637 reset($new_recs);
638 foreach ($new_recs as $new_record_obj)
639 {
640 if ($old_record_obj->getRecordId() == $new_record_obj->getRecordId())
641 {
642 foreach (ilAdvancedMDFieldDefinition::getInstancesByRecordId($old_record_obj->getRecordId()) as $def)
643 {
644 // now we need to copy $def->getFieldId() values from old term to new term
645 // how?
646 // clone values
647
648 $source_primary = array("obj_id"=>array("integer", $old_term->getGlossaryId()));
649 $source_primary["sub_type"] = array("text", "term");
650 $source_primary["sub_id"] = array("integer", $old_term->getId());
651 $source_primary["field_id"] = array("integer", $def->getFieldId());
652 $target_primary = array("obj_id"=>array("integer", $new_term->getGlossaryId()));
653 $target_primary["sub_type"] = array("text", "term");
654 $target_primary["sub_id"] = array("integer", $new_term->getId());
655
656 ilADTFactory::getInstance()->initActiveRecordByType();
658 "adv_md_values",
659 array(
660 "obj_id" => "integer",
661 "sub_type" => "text",
662 "sub_id" => "integer",
663 "field_id" => "integer"
664 ),
665 $source_primary,
666 $target_primary,
667 array("disabled"=>"integer"));
668
669 }
670 }
671 }
672 }
673
674
675 return $new_term->getId();
676 }
677
684 static function getTermsOfGlossary($a_glo_id)
685 {
686 global $ilDB;
687
688 $set = $ilDB->query("SELECT id FROM glossary_term WHERE ".
689 " glo_id = ".$ilDB->quote($a_glo_id, "integer")
690 );
691 $ids = array();
692 while ($rec = $ilDB->fetchAssoc($set))
693 {
694 $ids[] = $rec["id"];
695 }
696 return $ids;
697 }
698}
699
700?>
if(php_sapi_name() !='cli') $in
Definition: Utf8Test.php:37
An exception for terminatinating execution or to throw for unit testing.
static cloneByPrimary($a_table, array $a_primary_def, array $a_source_primary, array $a_target_primary, array $a_additional=null)
Clone values by (partial) primary key.
static getInstance()
Get singleton.
static getInstancesByRecordId($a_record_id, $a_only_searchable=false)
Get definitions by record id.
static _getSelectedRecordsByObject($a_obj_type, $a_obj_id, $a_sub_type="")
Get selected records by object.
static queryForRecords($a_obj_id, $a_subtype, $a_records, $a_obj_id_key, $a_obj_subid_key, array $a_amet_filter=null)
Query data for given object records.
Class ilGlossaryDefinition.
static getDefinitionList($a_term_id)
static
static lookupReferencesOfTerm($a_term_id)
Lookup references of a term.
static deleteReferencesOfTerm($a_term_id)
Delete all references of a term.
Class ilGlossaryTerm.
getId()
get term id (= glossary item id)
static getNumberOfUsages($a_term_id)
Get number of usages.
setLanguage($a_language)
set language
create()
create new glossary term
static _lookGlossaryID($term_id)
get glossary id form term id
static getTermList($a_glo_id, $searchterm="", $a_first_letter="", $a_def="", $a_tax_node=0, $a_add_amet_fields=false, array $a_amet_filter=null, $a_include_references=false)
Get all terms for given set of glossary ids.
static _copyTerm($a_term_id, $a_glossary_id)
Copy a term to a glossary.
getGlossaryId()
get glossary id
update()
update glossary term
setGlossaryId($a_glo_id)
set glossary id
static getUsages($a_term_id)
Get number of usages.
static _lookGlossaryTerm($term_id)
get glossary term
static _exists($a_id)
checks wether a glossary term with specified id exists or not
__construct($a_id=0)
Constructor @access public.
setId($a_id)
set glossary term id (= glossary item id)
static getFirstLetters($a_glo_id, $a_tax_node=0)
Get all terms for given set of glossary ids.
setGlossary(&$a_glossary)
set glossary object
read()
read glossary term data
getLanguage()
get language
static _lookLanguage($term_id)
lookup term language
exportXML(&$a_xml_writer, $a_inst)
export xml
getImportId()
get import id
setTerm($a_term)
set term
setImportId($a_import_id)
set import id
static getTermsOfGlossary($a_glo_id)
Get terms of glossary.
static _getIdForImportId($a_import_id)
get current term id for import id (static)
static getUsageOfObject($a_obj_id, $a_include_titles=false)
Get usage of object.
static getSubTreeItems($a_comp, $a_obj_id, $a_item_type, $a_tax_id, $a_node)
Get all assigned items under a node.
static _getAllReferences($a_id)
get all reference ids of object
static _hasUntrashedReference($a_obj_id)
checks wether an object has at least one reference that is not in trash
redirection script todo: (a better solution should control the processing via a xml file)
global $ilDB