19declare(strict_types=1);
125 $this->db =
$DIC->database();
126 $this->
lng = $DIC->language();
127 $this->objDefinition =
$DIC[
'objDefinition'];
128 $this->tree =
$DIC->repositoryTree();
129 $this->
logger = $DIC->logger()->ac();
130 $this->validation =
true;
135 self::$cond_for_target_cache = [];
136 self::$cond_target_rows = [];
144 return $a_type ===
'st';
151 $obj_definition =
$DIC[
'objDefinition'];
159 $class = $obj_definition->getClassName($parent_type);
160 $class_name =
"il" . $class .
"ConditionController";
161 $location = $obj_definition->getLocation($parent_type);
162 $path_to_controller = implode(
'/', [
165 "class." . $class_name .
".php"
169 if ($class !==
"" && is_file($path_to_controller)) {
170 $controller =
new $class_name();
171 if ($controller->isContainerConditionController($parent_ref_id)) {
184 if ($controller !==
null) {
185 return (
bool) $controller->getConditionSetForRepositoryObject($a_target_ref_id)->getHiddenStatus();
196 $query =
'SELECT hidden_status FROM conditions ' .
197 'WHERE target_ref_id = ' .
$ilDB->quote($a_target_ref_id,
'integer');
200 return (
bool) $row->hidden_status;
225 $query =
"SELECT DISTINCT target_ref_id ref FROM conditions ";
229 $ref_ids[] = (
int) $row->ref;
245 $query =
"DELETE FROM conditions " .
246 "WHERE target_ref_id = " .
$ilDB->quote($a_target_ref_id,
'integer') .
" " .
247 "AND target_type != 'st' ";
254 $this->condition_reference_type = $a_type;
264 $this->error_message = $a_msg;
274 $this->target_ref_id = $a_target_ref_id;
284 $this->target_obj_id = $a_target_obj_id;
297 $this->target_type = $a_target_type;
310 $this->trigger_ref_id = $a_trigger_ref_id;
320 $this->trigger_obj_id = $a_trigger_obj_id;
333 $this->trigger_type = $a_trigger_type;
346 $this->
operator = $a_operator;
356 $this->value = $a_value;
369 $this->obligatory = $a_obl;
382 $this->hidden_status = $a_status;
392 $this->validation = $a_validate;
397 $trigger_types = array(
'crs',
'exc',
'tst',
'sahs',
'svy',
'lm',
'iass',
'prg',
'copa',
'lti',
'cmix');
402 foreach ($this->objDefinition->getAllRepositoryTypes() as $t) {
404 $trigger_types[] = $t;
408 foreach ($this->objDefinition->getPlugins() as $p_type => $p_info) {
410 $name =
'ilObj' . $p_info[
'class_name'] .
'Access';
411 $reflection =
new ReflectionClass($name);
412 if ($reflection->implementsInterface(
'ilConditionHandling')) {
413 $trigger_types[] = $p_type;
415 }
catch (ReflectionException
$e) {
416 $this->
logger->warning(
'Cannot create instance for ' . $name);
417 $this->
logger->warning($e->getMessage());
420 $active_triggers = array();
421 foreach ($trigger_types as $type) {
423 $active_triggers[] = $type;
426 return $active_triggers;
438 if ($a_type ===
'crsg') {
439 return [
'not_member'];
443 $full_class =
"ilObj" . $class .
"Access";
444 $reflection =
new ReflectionClass($full_class);
445 if ($reflection->implementsInterface(
'ilConditionHandling')) {
446 $operators = call_user_func(
447 array($full_class,
'getConditionOperators'),
459 array_unshift($operators, self::OPERATOR_LP);
471 $next_id = $this->db->nextId(
'conditions');
472 $query =
'INSERT INTO conditions (condition_id,target_ref_id,target_obj_id,target_type,' .
473 'trigger_ref_id,trigger_obj_id,trigger_type,operator,value,ref_handling,obligatory,hidden_status) ' .
475 $this->db->quote($next_id,
'integer') .
',' .
482 $this->db->quote($this->
getOperator(),
'text') .
"," .
483 $this->db->quote($this->
getValue(),
'text') .
", " .
489 $res = $this->db->manipulate($query);
491 if ($this->validation && !$this->
validate()) {
500 $query =
"SELECT * FROM conditions " .
501 "WHERE target_ref_id = " . $this->db->quote($this->
getTargetRefId(),
'integer') .
" " .
502 "AND target_obj_id = " . $this->db->quote($this->
getTargetObjId(),
'integer') .
" " .
503 "AND trigger_ref_id = " . $this->db->quote($this->
getTriggerRefId(),
'integer') .
" " .
504 "AND trigger_obj_id = " . $this->db->quote($this->
getTriggerObjId(),
'integer') .
" " .
505 "AND operator = " . $this->db->quote($this->
getOperator(),
'text');
506 $res = $this->db->query($query);
507 return (
bool)
$res->numRows();
512 $query =
"UPDATE conditions SET " .
513 "target_ref_id = " . $this->db->quote($this->
getTargetRefId(),
'integer') .
", " .
514 "operator = " . $this->db->quote($this->
getOperator(),
'text') .
", " .
515 "value = " . $this->db->quote($this->
getValue(),
'text') .
", " .
517 'obligatory = ' . $this->db->quote($this->
getObligatory(),
'integer') .
' ' .
518 "WHERE condition_id = " . $this->db->quote($a_id,
'integer');
519 $res = $this->db->manipulate($query);
524 $query =
'UPDATE conditions SET ' .
525 'hidden_status = ' . $this->db->quote($a_status,
'integer') .
' ' .
526 'WHERE target_ref_id = ' . $this->db->quote($this->
getTargetRefId(),
'integer');
527 $this->db->manipulate($query);
538 $query =
"UPDATE conditions SET " .
539 'obligatory = ' .
$ilDB->quote($a_status,
'integer') .
' ' .
540 "WHERE condition_id = " .
$ilDB->quote($a_id,
'integer');
548 public function delete(
int $a_ref_id):
void
550 $query =
"DELETE FROM conditions WHERE " .
551 "target_ref_id = " . $this->db->quote($a_ref_id,
'integer') .
" " .
552 "OR trigger_ref_id = " . $this->db->quote($a_ref_id,
'integer');
553 $res = $this->db->manipulate($query);
562 $query =
"DELETE FROM conditions WHERE " .
563 "target_obj_id = " . $this->db->quote($a_obj_id,
'integer') .
" " .
564 "OR trigger_obj_id = " . $this->db->quote($a_obj_id,
'integer');
565 $res = $this->db->manipulate($query);
570 $query =
"DELETE FROM conditions " .
571 "WHERE condition_id = " . $this->db->quote($a_id,
'integer');
572 $res = $this->db->manipulate($query);
583 $query =
'select count(*) num from conditions ' .
588 return (
int) $row->num;
602 $query =
"SELECT * FROM conditions " .
603 "WHERE trigger_obj_id = " .
$ilDB->quote($a_trigger_id,
'integer') .
" " .
604 " AND trigger_type = " .
$ilDB->quote($a_trigger_obj_type,
'text');
610 $tmp_array[
'id'] = (
int) $row->condition_id;
611 $tmp_array[
'target_ref_id'] = (
int) $row->target_ref_id;
612 $tmp_array[
'target_obj_id'] = (
int) $row->target_obj_id;
613 $tmp_array[
'target_type'] = (
string) $row->target_type;
614 $tmp_array[
'trigger_ref_id'] = (
int) $row->trigger_ref_id;
615 $tmp_array[
'trigger_obj_id'] = (
int) $row->trigger_obj_id;
616 $tmp_array[
'trigger_type'] = (string) $row->trigger_type;
617 $tmp_array[
'operator'] = (
string) $row->operator;
618 $tmp_array[
'value'] = (string) $row->value;
619 $tmp_array[
'ref_handling'] = (
int) $row->ref_handling;
620 $tmp_array[
'obligatory'] = (bool) $row->obligatory;
621 $tmp_array[
'hidden_status'] = (
bool) $row->hidden_status;
622 $conditions[] = $tmp_array;
632 public static function _getEffectiveConditionsOfTarget(
633 int $a_target_ref_id,
634 int $a_target_obj_id,
635 string $a_target_type =
""
638 if ($controller !==
null) {
640 $set = $controller->getConditionSetForRepositoryObject($a_target_ref_id);
643 foreach ($set->getConditions() as
$c) {
644 $obligatory = $set->getAllObligatory() ||
$c->getObligatory();
645 $trigger =
$c->getTrigger();
647 "target_ref_id" => $a_target_ref_id,
648 "target_obj_id" => $a_target_obj_id,
649 "target_type" => $a_target_type,
650 "trigger_ref_id" => $trigger->getRefId(),
651 "trigger_obj_id" => $trigger->getObjId(),
652 "trigger_type" => $trigger->getType(),
653 "operator" =>
$c->getOperator(),
654 "value" =>
$c->getValue(),
657 "num_obligatory" => $set->getNumObligatory(),
658 "hidden_status" => $set->getHiddenStatus()
672 int $a_target_ref_id,
673 int $a_target_obj_id,
674 string $a_target_type =
""
681 if ($a_target_type ===
"") {
686 if (isset(self::$cond_for_target_cache[$a_target_ref_id .
":" . $a_target_obj_id .
":" .
688 return self::$cond_for_target_cache[$a_target_ref_id .
":" . $a_target_obj_id .
":" .
693 if (isset(self::$cond_target_rows[$a_target_type .
":" . $a_target_obj_id])) {
694 $rows = self::$cond_target_rows[$a_target_type .
":" . $a_target_obj_id];
697 $query =
"SELECT * FROM conditions " .
698 "WHERE target_obj_id = " .
$ilDB->quote($a_target_obj_id,
'integer') .
" " .
699 " AND target_type = " .
$ilDB->quote($a_target_type,
'text');
705 $item[
'condition_id'] = (
int) $row[
'condition_id'];
706 $item[
'target_ref_id'] = (
int) $row[
'target_ref_id'];
707 $item[
'target_obj_id'] = (
int) $row[
'target_obj_id'];
708 $item[
'trigger_ref_id'] = (
int) $row[
'trigger_ref_id'];
709 $item[
'trigger_obj_id'] = (
int) $row[
'trigger_obj_id'];
710 $item[
'target_type'] = (string) $row[
'target_type'];
711 $item[
'trigger_type'] = (string) $row[
'trigger_type'];
712 $item[
'operator'] = (string) $row[
'operator'];
713 $item[
'value'] = (string) $row[
'value'];
714 $item[
'ref_handling'] = (
int) $row[
'ref_handling'];
715 $item[
'obligatory'] = (bool) $row[
'obligatory'];
716 $item[
'num_obligatory'] = (
int) $row[
'num_obligatory'];
717 $item[
'hidden_status'] = (bool) $row[
'hidden_status'];
725 foreach ($rows as $row) {
726 if (($row[
"ref_handling"] == self::UNIQUE_CONDITIONS) && $row[
"target_ref_id"] != $a_target_ref_id) {
730 $row[
"id"] = $row[
"condition_id"];
731 $conditions[] = $row;
734 self::$cond_for_target_cache[$a_target_ref_id .
":" . $a_target_obj_id .
":" .
735 $a_target_type] = $conditions;
748 if (is_array($a_obj_ids) && count($a_obj_ids) > 0) {
749 $res =
$ilDB->query(
"SELECT * FROM conditions " .
750 "WHERE " .
$ilDB->in(
"target_obj_id", $a_obj_ids,
false,
"integer") .
751 " AND target_type = " .
$ilDB->quote($a_type,
'text'));
755 $item[
'condition_id'] = (
int) $row[
'condition_id'];
756 $item[
'target_ref_id'] = (
int) $row[
'target_ref_id'];
757 $item[
'target_obj_id'] = (
int) $row[
'target_obj_id'];
758 $item[
'trigger_ref_id'] = (
int) $row[
'trigger_ref_id'];
759 $item[
'trigger_obj_id'] = (
int) $row[
'trigger_obj_id'];
760 $item[
'target_type'] = (string) $row[
'target_type'];
761 $item[
'trigger_type'] = (string) $row[
'trigger_type'];
762 $item[
'operator'] = (string) $row[
'operator'];
763 $item[
'value'] = (string) $row[
'value'];
764 $item[
'ref_handling'] = (
int) $row[
'ref_handling'];
765 $item[
'obligatory'] = (bool) $row[
'obligatory'];
766 $item[
'num_obligatory'] = (
int) $row[
'num_obligatory'];
767 $item[
'hidden_status'] = (bool) $row[
'hidden_status'];
768 self::$cond_target_rows[$a_type .
":" . $row[
"target_obj_id"]][] = $item;
771 foreach ($a_obj_ids as $obj_id) {
772 if (!isset(self::$cond_target_rows[$a_type .
":" . $obj_id])) {
773 self::$cond_target_rows[$a_type .
":" . $obj_id] = array();
785 $query =
"SELECT * FROM conditions " .
786 "WHERE condition_id = " .
$ilDB->quote($a_id,
'integer');
790 $tmp_array[
'id'] = (
int) $row->condition_id;
791 $tmp_array[
'target_ref_id'] = (
int) $row->target_ref_id;
792 $tmp_array[
'target_obj_id'] = (
int) $row->target_obj_id;
793 $tmp_array[
'target_type'] = (
string) $row->target_type;
794 $tmp_array[
'trigger_ref_id'] = (
int) $row->trigger_ref_id;
795 $tmp_array[
'trigger_obj_id'] = (
int) $row->trigger_obj_id;
796 $tmp_array[
'trigger_type'] = (string) $row->trigger_type;
797 $tmp_array[
'operator'] = (
string) $row->operator;
798 $tmp_array[
'value'] = (string) $row->value;
799 $tmp_array[
'ref_handling'] = (
int) $row->ref_handling;
800 $tmp_array[
'obligatory'] = (bool) $row->obligatory;
801 $tmp_array[
'hidden_status'] = (
bool) $row->hidden_status;
802 $tmp_array[
'num_obligatory'] = (
int) $row->num_obligatory;
817 $ilUser =
$DIC[
'ilUser'];
818 $objDefinition =
$DIC[
'objDefinition'];
819 $a_usr_id = $a_usr_id ?: $ilUser->getId();
822 if ($condition[
'operator'] === self::OPERATOR_LP) {
825 switch ($condition[
'trigger_type']) {
828 (
int) $condition[
'trigger_obj_id'],
829 (
string) $condition[
'operator'],
830 (
string) $condition[
'value'],
834 $class = $objDefinition->
getClassName($condition[
'trigger_type']);
835 $full_class =
"ilObj" . $class .
"Access";
837 if (!(is_a($full_class,
"ilConditionHandling",
true))) {
841 $fullfilled = call_user_func(
842 array($full_class,
'checkCondition'),
843 (
int) $condition[
'trigger_obj_id'],
844 (
string) $condition[
'operator'],
845 (
string) $condition[
'value'],
852 int $a_target_ref_id,
853 int $a_target_obj_id,
854 string $a_obj_type =
''
856 $conditions = self::_getEffectiveConditionsOfTarget($a_target_ref_id, $a_target_obj_id);
859 foreach ($conditions as $con) {
860 if ($con[
'obligatory']) {
869 int $a_target_ref_id,
870 int $a_target_obj_id,
871 string $a_obj_type =
''
873 $conditions = self::_getPersistedConditionsOfTarget($a_target_ref_id, $a_target_obj_id);
876 foreach ($conditions as $con) {
877 if ($con[
'obligatory']) {
891 $query =
'SELECT max(num_obligatory) obl from conditions WHERE ' .
892 'target_ref_id = ' .
$ilDB->quote($a_target_ref_id,
'integer') .
' ' .
893 'AND target_obj_id = ' .
$ilDB->quote($a_target_obj_id,
'integer') .
' ' .
894 'GROUP BY (num_obligatory)';
899 $obl = (
int) $row->obl;
905 int $a_target_ref_id,
906 int $a_target_obj_id,
907 string $a_target_obj_type =
''
914 $all = self::_getEffectiveConditionsOfTarget($a_target_ref_id, $a_target_obj_id, $a_target_obj_type);
915 $opt = self::getEffectiveOptionalConditionsOfTarget($a_target_ref_id, $a_target_obj_id, $a_target_obj_type);
918 if (isset($all[0])) {
919 $set_obl = $all[0][
'num_obligatory'];
924 $set_obl < count($all) &&
925 $set_obl > (count($all) - count($opt) + 1)) {
930 $result = count($all) - count($opt) + 1;
932 $result = count($all);
938 int $a_target_ref_id,
939 int $a_target_obj_id,
940 string $a_target_obj_type =
'',
941 bool $a_force_update =
false
950 $all = self::_getPersistedConditionsOfTarget($a_target_ref_id, $a_target_obj_id, $a_target_obj_type);
951 $opt = self::getPersistedOptionalConditionsOfTarget($a_target_ref_id, $a_target_obj_id, $a_target_obj_type);
954 if (isset($all[0])) {
955 $set_obl = $all[0][
'num_obligatory'];
960 $set_obl < count($all) &&
961 $set_obl > (count($all) - count($opt) + 1)) {
966 $result = count($all) - count($opt) + 1;
968 $result = count($all);
970 if ($a_force_update) {
971 self::saveNumberOfRequiredTriggers($a_target_ref_id, $a_target_obj_id, $result);
982 $query =
'UPDATE conditions ' .
983 'SET num_obligatory = ' .
$ilDB->quote($a_num,
'integer') .
' ' .
984 'WHERE target_ref_id = ' .
$ilDB->quote($a_target_ref_id,
'integer') .
' ' .
985 'AND target_obj_id = ' .
$ilDB->quote($a_target_obj_id,
'integer');
987 $ilDB->manipulate($query);
995 int $a_target_ref_id,
997 string $a_target_type =
"",
1002 $ilUser =
$DIC[
'ilUser'];
1003 $tree =
$DIC[
'tree'];
1004 $logger =
$DIC->logger()->ac();
1006 $a_usr_id = $a_usr_id ?: $ilUser->getId();
1007 $conditions = self::_getEffectiveConditionsOfTarget(
1012 if (!count($conditions)) {
1021 $optional = self::getEffectiveOptionalConditionsOfTarget($a_target_ref_id, $a_target_id, $a_target_type);
1022 $num_required = self::calculateEffectiveRequiredTriggers($a_target_ref_id, $a_target_id, $a_target_type);
1024 foreach ($conditions as $condition) {
1025 if ($tree->
isDeleted($condition[
'trigger_ref_id'])) {
1028 $check = self::_checkCondition($condition, $a_usr_id);
1034 if ($condition[
'obligatory']) {
1039 return $passed >= $num_required;
1049 if ($trigger_obj !==
null && $target_obj !==
null) {
1051 $this->target_obj_id = $target_obj->getId();
1053 if ($this->checkCircle($this->getTargetRefId(), $target_obj->getId())) {
1054 $this->setErrorMessage($this->
lng->txt(
'condition_circle_created'));
1056 unset($trigger_obj, $target_obj);
1066 foreach (self::_getPersistedConditionsOfTarget($a_ref_id, $a_obj_id) as $condition) {
1067 if ($condition[
'trigger_obj_id'] == $this->target_obj_id) {
1068 $this->circle =
true;
1072 $this->checkCircle($condition[
'trigger_ref_id'], $condition[
'trigger_obj_id']);
1074 return $this->circle;
1077 public static function cloneDependencies(
int $a_src_ref_id,
int $a_target_ref_id,
int $a_copy_id): void
1080 $mappings = $cwo->getMappings();
1083 $conditions = self::_getPersistedConditionsOfTarget(
1087 foreach ($conditions as $con) {
1088 if ($mappings[$con[
'trigger_ref_id']] ??
false) {
1094 $newCondition->setTargetRefId($a_target_ref_id);
1095 $newCondition->setTargetObjId($target_obj);
1096 $newCondition->setTargetType($target_typ);
1098 $trigger_ref = $mappings[$con[
'trigger_ref_id']];
1102 $newCondition->setTriggerRefId($trigger_ref);
1103 $newCondition->setTriggerObjId($trigger_obj);
1104 $newCondition->setTriggerType($trigger_typ);
1105 $newCondition->setOperator($con[
'operator']);
1106 $newCondition->setValue($con[
'value']);
1107 $newCondition->setReferenceHandlingType($con[
'ref_handling']);
1108 $newCondition->setObligatory($con[
'obligatory']);
1111 $newCondition->setHiddenStatus(self::lookupPersistedHiddenStatusByTarget($a_src_ref_id));
1113 if ($newCondition->storeCondition()) {
1117 self::saveNumberOfRequiredTriggers(
1120 $con[
'num_obligatory']
1129 self::calculatePersistedRequiredTriggers(
INTERNAL CLASS: Please do not use in consumer code.
getTargetType()
get target obj type
const string OPERATOR_FAILED
static getPersistedOptionalConditionsOfTarget(int $a_target_ref_id, int $a_target_obj_id, string $a_obj_type='')
static array $cond_target_rows
static _getPersistedConditionsOfTarget(int $a_target_ref_id, int $a_target_obj_id, string $a_target_type="")
get all persisted conditions of target object
static preloadPersistedConditionsForTargetRecords(string $a_type, array $a_obj_ids)
setTargetType(string $a_target_type)
set target object type
static array $cond_for_target_cache
const string OPERATOR_NOT_FINISHED
static getConditionController(int $a_target_ref_id)
checkCircle(int $a_ref_id, int $a_obj_id)
deleteByObjId(int $a_obj_id)
delete all trigger and target entries This method is called from ilObject::delete() if an object is r...
getTriggerType()
get trigger obj type
static saveNumberOfRequiredTriggers(int $a_target_ref_id, int $a_target_obj_id, int $a_num)
setErrorMessage(string $a_msg)
const int UNIQUE_CONDITIONS
getOperatorsByTriggerType(string $a_type)
setTriggerType(string $a_trigger_type)
set trigger object type
static lookupEffectiveHiddenStatusByTarget(int $a_target_ref_id)
Lookup hidden status (also take container control into account)
getReferenceHandlingType()
static calculateEffectiveRequiredTriggers(int $a_target_ref_id, int $a_target_obj_id, string $a_target_obj_type='')
getObligatory()
Get obligatory status.
updateHiddenStatus(bool $a_status)
storeCondition()
store new condition in database
static _isReferenceHandlingOptional(string $a_type)
static _checkCondition(array $condition, int $a_usr_id=0)
checks wether a single condition is fulfilled every trigger object type must implement a static metho...
setOperator(string $a_operator)
const string OPERATOR_FINISHED
setHiddenStatus(bool $a_status)
static _getDistinctTargetRefIds()
static _getPersistedConditionsOfTrigger(string $a_trigger_obj_type, int $a_trigger_id)
Get all persisted conditions of trigger object Note: This only gets persisted conditions NOT (dynamic...
const string OPERATOR_RESULT_RANGE_PERCENTAGE
setValue(string $a_value)
const int SHARED_CONDITIONS
enableAutomaticValidation(bool $a_validate=true)
static cloneDependencies(int $a_src_ref_id, int $a_target_ref_id, int $a_copy_id)
static _adjustMovedObjectConditions(int $a_ref_id)
In the moment it is not allowed to create preconditions on objects that are located outside of a cour...
const string OPERATOR_ACCREDITED_OR_PASSED
deleteCondition(int $a_id)
static _checkAllConditionsOfTarget(int $a_target_ref_id, int $a_target_id, string $a_target_type="", int $a_usr_id=0)
checks wether all conditions of a target object are fulfilled
const string OPERATOR_NOT_MEMBER
static getEffectiveOptionalConditionsOfTarget(int $a_target_ref_id, int $a_target_obj_id, string $a_obj_type='')
setTriggerRefId(int $a_trigger_ref_id)
setTargetRefId(int $a_target_ref_id)
setObligatory(bool $a_obl)
Set obligatory status.
updateCondition(int $a_id)
setReferenceHandlingType(int $a_type)
const string OPERATOR_PASSED
static lookupObligatoryConditionsOfTarget(int $a_target_ref_id, int $a_target_obj_id)
static _getCondition(int $a_id)
static updateObligatory(int $a_id, bool $a_status)
Toggle condition obligatory status.
static _deleteTargetConditionsByRefId(int $a_target_ref_id)
Delete conditions by target ref id Note: only conditions on the target type are deleted Conditions on...
static getNumberOfConditionsOfTrigger(string $a_trigger_obj_type, int $a_trigger_id)
get all conditions of trigger object
static calculatePersistedRequiredTriggers(int $a_target_ref_id, int $a_target_obj_id, string $a_target_obj_type='', bool $a_force_update=false)
static lookupPersistedHiddenStatusByTarget(int $a_target_ref_id)
setTriggerObjId(int $a_trigger_obj_id)
int $condition_reference_type
ilObjectDefinition $objDefinition
setTargetObjId(int $a_target_obj_id)
static _getInstance(int $a_copy_id)
static _hasUserCompleted(int $a_obj_id, int $a_user_id)
Lookup user object completion.
Component logger with individual log levels by component id.
static _checkCondition(int $trigger_obj_id, string $operator, $value, int $a_usr_id=0)
static _enabledLearningProgress()
parses the objects.xml it handles the xml-description of all ilias objects
getClassName(string $obj_name)
static getInstanceByRefId(int $ref_id, bool $stop_on_error=true)
get an instance of an Ilias object by reference id
static isSupportedObjectType(string $type)
static _lookupType(int $id, bool $reference=false)
static _lookupObjId(int $ref_id)
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
isDeleted(int $a_node_id)
This is a wrapper for isSaved() with a more useful name.
getParentId(int $a_node_id)
get parent id of given node
Interface for containers that take over control of conditions for repository object targets.
quote($value, string $type)
query(string $query)
Run a (read-only) Query on the database.