19 declare(strict_types=1);
    79         $this->type_repository = 
$dic[
'model.Type.ilStudyProgrammeTypeRepository'];
    80         $this->auto_categories_repository = 
$dic[
'model.AutoCategories.ilStudyProgrammeAutoCategoriesRepository'];
    81         $this->auto_memberships_repository = 
$dic[
'model.AutoMemberships.ilStudyProgrammeAutoMembershipsRepository'];
    82         $this->membersourcereader_factory = 
$dic[
'model.AutoMemberships.ilStudyProgrammeMembershipSourceReaderFactory'];
    84         $this->settings_repository = 
$dic[
'model.Settings.ilStudyProgrammeSettingsRepository'];
    85         $this->assignment_repository = 
$dic[
'repo.assignment'];
    86         $this->events = 
$dic[
'ilStudyProgrammeEvents'];
    96         $ilUser = $DIC[
'ilUser'];
    97         $this->webdir = $DIC->filesystem()->web();
   100         $this->db = $DIC[
'ilDB'];
   101         $this->
lng = $DIC[
'lng'];
   106         $this->custom_icon_factory = $DIC[
'object.customicons.factory'];
   108         self::initStudyProgrammeCache();
   113         if (self::$study_programme_cache === null) {
   124         $this->parent = 
false;
   132         $this->children = null;
   140         $this->lp_children = null;
   146         if (count($refs) < 1) {
   147             throw new ilException(
"Could not find ref_id for programme with obj_id $obj_id");
   149         return (
int) array_shift($refs);
   164         if (self::$study_programme_cache === null) {
   165             self::initStudyProgrammeCache();
   167         return self::$study_programme_cache->getInstanceByRefId((
int) 
$ref_id);
   196         $obj->createReference();
   197         self::$study_programme_cache->addInstance($obj);
   213             throw new Exception(
"The given settings-object does not belong to this programme", 1);
   232         $this->assignment_repository->deleteAllAssignmentsForProgrammeId($this->
getId());
   240         $id = (
int) parent::create();
   252         $type_settings = $this->
getSettings()->getTypeSettings();
   254         if ($type_settings->getTypeId()) {
   258                 $this->type_repository->getAssignedAMDRecordIdsByType($type_settings->getTypeId())
   272     public function delete(): 
bool   275         if (!parent::delete()) {
   282             $this->auto_categories_repository->deleteFor($this->
getId());
   290         $this->events->raise(
'delete', [
'object' => $this, 
'obj_id' => $this->
getId()]);
   296         $sub_type_id = $this->
getSettings()->getTypeSettings()->getTypeId();
   299             $type = $this->type_repository->getType($sub_type_id);
   302         return !is_null(
$type) && count($this->type_repository->getAssignedAMDRecordIdsByType(
$type->getId(), 
true)) > 0;
   307         $new_obj = parent::cloneObject($target_ref_id, $copy_id, $omit_tree);
   333         return $this->
getSettings()->getAssessmentSettings()->getPoints();
   345             $settings->withAssessmentSettings(
$settings->getAssessmentSettings()->withPoints($points))
   372         if ($this->tree->isInTree($this->getRefId())) {
   374                 $this->settings_repository->update(
   378                 $this->settings_repository->update(
   382                 $this->settings_repository->update(
   391         return $this->
getSettings()->getAssessmentSettings()->getStatus();
   403             $settings->withAssessmentSettings(
$settings->getAssessmentSettings()->withStatus($a_status))
   419         $type_settings = $this->
getSettings()->getTypeSettings();
   420         if (!in_array($type_settings->getTypeId(), array(
"-", 
"0"))) {
   421             $subtype_id = $type_settings->getTypeId();
   422             return $this->type_repository->getType($subtype_id);
   430         $global_settings = 
new ilSetting(
'certificate');
   431         $global_active = (bool) $global_settings->get(
'active', 
'0');
   432         if (!$global_active) {
   437         return $certificate_template->isCurrentlyActive();
   453     public static function getAllChildren(
int $a_ref_id, 
bool $include_references = 
false): array
   456         $root = self::getInstanceByRefId($a_ref_id);
   457         $root_id = $root->getId();
   460             if ($prg->
getId() === $root_id) {
   464         }, $include_references);
   489     public function getChildren(
bool $include_references = 
false): array
   493         if ($this->children === null) {
   494             $ref_ids = $this->tree->getChildsByType($this->
getRefId(), 
"prg");
   498             $ref_ids = $sorting->sortItems(array(
'prg' => $ref_ids));
   499             $ref_ids = $ref_ids[
'prg'];
   501             $this->children = array_map(
static function ($node_data) {
   506         if ($include_references && $this->reference_children === null) {
   507             $this->reference_children = [];
   508             $ref_child_ref_ids = $this->tree->getChildsByType($this->
getRefId(), 
"prgr");
   509             foreach ($this->children as $prg) {
   512                         $this->tree->getChildsByType($prg->getRefId(), 
"prgr"),
   519                         static function (
$data) {
   520                             return (
int) 
$data[
'child'];
   522                         array_filter($ref_child_ref_ids, 
static function (
$data) {
   523                             return $data[
"deleted"] === null;
   528                 $this->reference_children[] =
   532         return $include_references ?
   533             array_merge($this->children, $this->reference_children) :
   545         if ($this->parent === 
false) {
   547             $parent_data = $this->tree->getParentNodeData($this->
getRefId());
   548             if ($parent_data[
"type"] !== 
"prg") {
   549                 $this->parent = null;
   551                 $this->parent = self::getInstanceByRefId($parent_data[
"ref_id"]);
   562                 static function (
$id) {
   570             static function ($prg_ref) use (
$tree) {
   586     public function getParents(
bool $include_references = 
false): array
   590         $queque = [$current];
   591         while ($element = array_shift($queque)) {
   592             $parent = $element->getParent();
   593             if (
$parent === null || $include_references) {
   595                     if ($this->tree->isDeleted($reference->getRefId())) {
   598                     $r_parent = $reference->getParent();
   599                     if (is_null($r_parent)) {
   602                     $queque[] = $r_parent;
   603                     $parents[] = $r_parent;
   610         return array_reverse($parents);
   618     public function hasChildren(
bool $include_references = 
false): bool
   631         return count($this->
getChildren($include_references));
   644         while ($cur = $cur->getParent()) {
   657         if (count($parents) < 1) {
   673         if ($this->lp_children === null) {
   674             $this->lp_children = array();
   676             $ref_ids = $this->tree->getChildsByType($this->
getRefId(), 
"crsr");
   680             $ref_ids = $sorting->sortItems(array(
'crs_ref' => $ref_ids));
   681             $ref_ids = $ref_ids[
'crs_ref'];
   683             $lp_children = array_map(
function ($node_data) {
   684                 $lp_obj = $this->object_factory->getInstanceByRefId((
int) $node_data[
"child"]);
   687                 return ($lp_obj instanceof $this) ? null : $lp_obj;
   690             $this->lp_children = array_filter($lp_children);
   703         return array_map(
static function ($child) {
   704             return $child->getId();
   727         if (!$this->tree->isInTree($this->getRefId())) {
   747         if ($fun($this) !== 
false) {
   748             foreach ($this->
getChildren($include_references) as $child) {
   749                 $child->applyToSubTreeNodes($fun, $include_references);
   759         $node_data = $this->tree->getNodeData($this->
getRefId());
   760         $crsrs = $this->tree->getSubTree($node_data, 
true, [
"crsr"]);
   762         $completed_crss = array();
   763         foreach ($crsrs as $ref) {
   773                 $containing_prg = self::getInstanceByRefId((
int) $ref[
"parent"]);
   774                 if ($containing_prg->isActive()) {
   775                     $completed_crss[] = [
   777                         , 
"prg_ref_id" => (
int) $ref[
"parent"]
   778                         , 
"prg_obj_id" => $containing_prg->getId()
   779                         , 
"crsr_ref_id" => (
int) $ref[
"child"]
   780                         , 
"crsr_id" => (
int) $ref[
"obj_id"]
   781                         , 
"crs_ref_id" => (
int) $crs_ref_id
   782                         , 
"crs_id" => (
int) $crs_id
   789         return $completed_crss;
   814         if ($this->tree->isInTree($a_prg->
getRefId())) {
   845             $this->settings_repository->update(
   863         parent::putInTree($parent_ref_id);
   866             $par = self::getInstanceByRefId($parent_ref_id);
   867             $par->nodeInserted($this);
   891         $node_data = $this->tree->getNodeData($a_prg->
getRefId());
   892         $this->tree->deleteTree($node_data);
   920         $rbacadmin = $DIC[
'rbacadmin'];
   927             $rbacadmin->adjustMovedObjectPermissions($this->
getRefId(), 
$parent->getRefId());
   935             $parent->clearLPChildrenCache();
   960         $this->members_cache = null;
   964                 "ilObjStudyProgramme::assignUser: Can't assign user to program '"   965                 . $this->
getId() . 
"', since it's not in active status."   969         if (is_null($acting_usr_id)) {
   973         $ass = $this->assignment_repository->createFor($this->
getId(), $usr_id, $acting_usr_id);
   975             ->initAssignmentDates();
   977         $ass = $ass->resetProgresses(
   982         $this->assignment_repository->store($ass);
   985             $this->events->userAssigned($ass);
   999         $this->members_cache = null;
  1002                 "ilObjStudyProgramme::removeAssignment: Assignment '"  1003                 . $assignment->
getId() . 
"' does not belong to study "  1004                 . 
"program '" . $this->
getId() . 
"'."  1008         $this->assignment_repository->delete($assignment);
  1010         $affected_node_ids = array_map(fn($pgs) => $pgs->getNodeId(), $assignment->
getProgresses());
  1011         foreach ($affected_node_ids as $node_obj_id) {
  1015         $this->events->userDeassigned($assignment);
  1021         return $this->assignment_repository->get($assignment_id);
  1026         $this->assignment_repository->storeExpiryInfoSentFor($ass);
  1031         $this->assignment_repository->resetExpiryInfoSentFor($ass);
  1036         $this->assignment_repository->storeRiskyToFailSentFor($ass);
  1041         $this->assignment_repository->resetRiskyToFailSentFor($ass);
  1070         $assignments = $this->assignment_repository->getAllForNodeIsContained(
  1075         usort($assignments, 
function ($a_one, $a_other) {
  1077                 $a_one->getLastChange()->format(
'Y-m-d'),
  1078                 $a_other->getLastChange()->format(
'Y-m-d')
  1081         return $assignments;
  1089         return $this->assignment_repository->getAllForNodeIsContained($this->
getId());
  1100             $usr_ids[] = $assignment->getUserId();
  1102         return array_unique($usr_ids);
  1110         if (!$this->members_cache) {
  1111             $this->members_cache = array_map(
  1112                 static function ($assignment) {
  1113                     return $assignment->getUserId();
  1115                 $this->assignment_repository->getByPrgId($this->
getId())
  1127         $count = $this->assignment_repository->countAllForNodeIsContained(
  1143         return $this->assignment_repository->getAllForSpecificNode($this->
getId(), [$usr_id]);
  1156         return $this->assignment_repository->getCertificateRelevantAssignmentIds(
  1175         foreach ($assignments as $ass) {
  1176             $this->assignment_repository->store($ass);
  1186         $filter = $filter->withValues([
  1187             'prg_status_hide_irrelevant' => 
true  1189         $count = $this->assignment_repository->countAllForNodeIsContained(
  1200             fn($ass) => $ass->getUserId(),
  1216         return $this->auto_categories_repository->getFor($this->
getId());
  1231         $ac = $this->auto_categories_repository->create(
  1235         $this->auto_categories_repository->update($ac);
  1244         $this->auto_categories_repository->delete($this->
getId(), $category_ids);
  1252         $this->auto_categories_repository->deleteFor($this->
getId());
  1260         foreach (self::getProgrammesMonitoringCategory($cat_ref_id) as $prg) {
  1263             $course_ref->setTargetRefId($crs_ref_id);
  1264             $course_ref->create();
  1265             $course_ref->createReference();
  1266             $course_ref->putInTree($prg->getRefId());
  1267             $course_ref->setPermissions($crs_ref_id);
  1269             $course_ref->update();
  1272             $lp->setMode($lp::LP_MODE_COURSE_REFERENCE);
  1284         foreach (self::getProgrammesMonitoringCategory($cat_ref_id) as $prg) {
  1285             foreach ($prg->getLPChildren() as $child) {
  1286                 if ((
int) $child->getTargetRefId() === $crs_ref_id) {
  1303                     static function (array $rec) {
  1304                         $values = array_values($rec);
  1305                         $prg_obj_id = (
int) array_shift($values);
  1308                         $prg_ref_id = (
int) array_shift($references);
  1310                         $prg = self::getInstanceByRefId($prg_ref_id);
  1311                         if ($prg->isAutoContentApplicable()) {
  1315                     $db::getProgrammesFor($cat_ref_id)
  1329         $valid_status = in_array(
  1343         return $valid_status && $crslnk_allowed;
  1357         return $this->auto_memberships_repository->getFor($this->
getId());
  1365         $ams = $this->auto_memberships_repository->create($this->
getId(), $type, $src_id, 
false);
  1366         $this->auto_memberships_repository->update($ams);
  1374         $this->auto_memberships_repository->delete($this->
getId(), $type, $src_id);
  1382         $this->auto_memberships_repository->deleteFor($this->
getId());
  1390         $ams = $this->auto_memberships_repository->create($this->
getId(), $type, $src_id, 
false);
  1391         $this->auto_memberships_repository->update($ams);
  1403             foreach ($member_ids as $usr_id) {
  1409         $ams = $this->auto_memberships_repository->create($this->
getId(), $type, $src_id, 
true);
  1410         $this->auto_memberships_repository->update($ams);
  1420         $source_reader = $this->membersourcereader_factory->getReaderFor($src_type, $src_id);
  1421         return $source_reader->getMemberIds();
  1432         $programmes = array_map(
  1433             static function ($rec) {
  1434                 $values = array_values($rec);
  1435                 $prg_obj_id = (
int) array_shift($values);
  1438                 $prg_ref_id = (
int) array_shift($references);
  1440                 $prg = self::getInstanceByRefId($prg_ref_id);
  1443             $db::getProgrammesFor($src_type, $src_id)
  1450         foreach (self::getProgrammesMonitoringMemberSource($src_type, $src_id) as $prg) {
  1451             if ($prg->isActive() &&
  1452                 !$prg->hasAssignmentsOfSingleProgramForUser($usr_id)) {
  1454                 $prg->assignUser($usr_id, $assigned_by);
  1463         foreach (self::getProgrammesMonitoringMemberSource($src_type, $src_id) as $prg) {
  1464             $assignments = $prg->getAssignmentsOfSingleProgramForUser($usr_id);
  1465             $next_membership_source = $prg->getApplicableMembershipSourceForUser($usr_id, $src_id);
  1467             foreach ($assignments as $assignment) {
  1468                 if (!$assignment->getProgressTree()->isInProgress()) {
  1473                     $next_membership_source !== null
  1474                     && $next_membership_source?->isEnabled()
  1475                     && $next_membership_source->getSourceId() !== $src_id
  1477                     $new_src_type = $next_membership_source->getSourceType();
  1479                     $assignment = $assignment->withLastChange($assigned_by, $now);
  1480                     $assignment_repository->
store($assignment);
  1483                     $assignment_repository->
delete($assignment);
  1495             if ($src_id !== $exclude_id
  1496                 && $ams->isEnabled()
  1499                 if (in_array($usr_id, $source_members)) {
  1540         $tree = $DIC[
'tree'];
  1542         if (count($node_data) === 0 || !array_key_exists(
'type', $node_data) || $node_data[
"type"] !== 
"prg") {
  1545         self::initStudyProgrammeCache();
  1546         $prg = self::getInstanceByRefId($node_data[
"child"]);
  1550         $prg->succeed($user_id, $obj_id);
  1555         $progress_node_id = $this->
getId();
  1556         if (is_null($ass)) {
  1557             $user_assignments = $this->assignment_repository
  1558                 ->getAllForNodeIsContained($progress_node_id, [$usr_id]);
  1560             $user_assignments = [$ass];
  1563         foreach ($user_assignments as $ass) {
  1564             $ass = $ass->succeed(
  1569             $this->assignment_repository->store($ass);
  1575         $customIcon = $this->custom_icon_factory->getByObjId($this->
getId(), $this->
getType());
  1578         if ($subtype && $subtype->getIconIdentifier()
  1579             && $src = $this->type_repository->getIconPathFS($subtype)
  1582             $tmp = 
'ico_' . $this->
getId();
  1585             $customIcon->saveFromTempFileName($tmp);
  1587             $customIcon->remove();
  1612             throw new ilException(
"Ref-Id '$ref_id' does not belong to a study programme object.");
  1621                 $possible_subobjects = $subobjects;
  1624                 $possible_subobjects = [
  1625                     "prg" => $subobjects[
"prg"],
  1626                     "prgr" => $subobjects[
"prgr"]
  1630                 $possible_subobjects = [
'crsr' => $subobjects[
'crsr']];
  1633                 throw new ilException(
"Undefined mode for study programme: '$mode'");
  1636         if (
$parent->hasAutomaticContentCategories()) {
  1637             $possible_subobjects = array_filter(
  1638                 $possible_subobjects,
  1639                 static function ($subtype) {
  1640                     return $subtype === 
'crsr';
  1642                 ARRAY_FILTER_USE_KEY
  1645         return $possible_subobjects;
  1651         return $this->ilUser->getId();
  1661         if (is_null($node_obj_id)) {
  1662             $node_obj_id = $this->
getId();
  1672         $progress_node_id = $this->
getId();
  1673         $assignment = $this->assignment_repository->get($assignment_id)
  1682         $this->assignment_repository->store($assignment);
  1690         $progress_node_id = $this->
getId();
  1691         $assignment = $this->assignment_repository->get($assignment_id)
  1699         $this->assignment_repository->store($assignment);
  1708         $progress_node_id = $this->
getId();
  1709         $assignment = $this->assignment_repository->get($assignment_id)
  1717         $this->assignment_repository->store($assignment);
  1726         $progress_node_id = $this->
getId();
  1727         $assignment = $this->assignment_repository->get($assignment_id)
  1735         $this->assignment_repository->store($assignment);
  1745         $progress_node_id = $this->
getId();
  1746         $assignment = $this->assignment_repository->get($assignment_id)
  1747             ->changeProgressDeadline(
  1755         $this->assignment_repository->store($assignment);
  1765         $progress_node_id = $this->
getId();
  1766         $assignment = $this->assignment_repository->get($assignment_id)
  1767             ->changeProgressValidityDate(
  1775         $this->assignment_repository->store($assignment);
  1785         $progress_node_id = $this->
getId();
  1786         $assignment = $this->assignment_repository->get($assignment_id)
  1787             ->changeAmountOfPoints(
  1795         $this->assignment_repository->store($assignment);
  1804         $assignment = $this->assignment_repository->get($assignment_id)
  1805             ->updatePlanFromRepository(
  1811         $this->assignment_repository->store($assignment);
  1821         $assignment = $this->assignment_repository->get($assignment_id);
  1822         foreach ($nodes as $nodeinfo) {
  1823             [$node_obj_id, $course_obj_id] = $nodeinfo;
  1825             $assignment = $assignment->succeed(
  1826                 $this->settings_repository,
  1832                 '%s, progress-id (%s/%s)',
  1833                 $assignment->getUserInformation()->getFullname(),
  1834                 $assignment->getId(),
  1835                 (string) $node_obj_id
  1837             $err_collection->add(
true, 
'acknowledged_course', $msg);
  1839         $this->assignment_repository->store($assignment);
  1860             return $lng->
txt(
"prg_status_in_progress");
  1863             return $lng->
txt(
"prg_status_completed");
  1866             return $lng->
txt(
"prg_status_accredited");
  1869             return $lng->
txt(
"prg_status_not_relevant");
  1872             return $lng->
txt(
"prg_status_failed");
  1874         throw new ilException(
"Unknown status: '$status'");
  1879         return \ilContainerPage::_exists(self::CP_TYPE, $this->
getId());
  1884             throw new \LogicException(
'will not create content page - it already exists.');
  1886         $new_page_object = new \ilContainerPage();
  1887         $new_page_object->setId($this->
getId());
  1888         $new_page_object->setParentId($this->
getId());
  1889         $new_page_object->createFromXML();
 getCompletedCourses(int $usr_id)
Get courses in this program that the given user already completed. 
 
setStatus(int $a_status)
Set the status of the node. 
 
getCertificateRelevantAssignmentIds(int ... $usr_ids)
 
static _hasUserCompleted(int $a_obj_id, int $a_user_id)
Lookup user object completion. 
 
adjustLPMode()
Adjust the lp mode to match current state of tree: 
 
addNode(ilObjStudyProgramme $a_prg)
Inserts another ilObjStudyProgramme in this object. 
 
clearLPChildrenCache()
Clear the cached lp children. 
 
static addCrsToProgrammes(int $crs_ref_id, int $cat_ref_id)
Check, if a category is under surveilllance and automatically add the course. 
 
getSubType()
Gets the SubType Object. 
 
static _lookupTitle(int $obj_id)
 
markRelevant(int $assignment_id, int $acting_usr_id, ilPRGMessageCollection $err_collection)
 
storeAutomaticContentCategory(int $category_ref_id)
Store a Category with auto-content for this StudyProgramme; a category can only be referenced once (p...
 
static getLogger(string $a_component_id)
Get component logger. 
 
getParent()
Get the parent ilObjStudyProgramme of this object. 
 
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
 
getApplicableMembershipSourceForUser(int $usr_id, ?int $exclude_id)
 
changeProgressValidityDate(int $assignment_id, int $acting_usr_id, ilPRGMessageCollection $err_collection, ?DateTimeImmutable $validity)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
isAutoContentApplicable()
AutoContent should only be available in active- or draft-mode, and only, if there is no sub-programme...
 
assignUser(int $usr_id, int $acting_usr_id=null, $raise_event=true)
Assign a user to this node at the study program. 
 
getMembers()
get usr_ids with any progress on this node 
 
unmarkAccredited(int $assignment_id, int $acting_usr_id, ilPRGMessageCollection $err_collection)
 
getAssignmentRepository()
 
ilStudyProgrammeMembershipSourceReaderFactory $membersourcereader_factory
 
getChildren(bool $include_references=false)
Get all ilObjStudyProgrammes that are direct children of this object. 
 
static getProgrammesMonitoringMemberSource(string $src_type, int $src_id)
Get all StudyProgrammes monitoring this membership-source. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
getLPChildren()
Get the leafs the study programme contains. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static _getAllReferences(int $id)
get all reference ids for object ID 
 
nodeInserted($prg)
Clears child cache and adds progress for new node. 
 
isDeleted(int $a_node_id)
This is a wrapper for isSaved() with a more useful name. 
 
__construct(int $id=0, bool $call_by_reference=true)
ATTENTION: After using the constructor the object won't be in the cache. 
 
static saveObjRecSelection(int $a_obj_id, string $a_sub_type="", array $a_records=null, bool $a_delete_before=true)
Save repository object record selection. 
 
static getInstanceByRefId($ref_id)
 
disableAutomaticMembershipSource(string $type, int $src_id)
Disable a membership source. 
 
applyToSubTreeNodes(Closure $fun, bool $include_references=false)
Apply the given Closure to every node in the subtree starting at this object. 
 
static getCreatableSubObjects(array $subobjects, $ref_id)
Filter the list of possible subobjects for the objects that actually could be created on a concrete n...
 
static initStudyProgrammeCache()
 
loadLanguageModule(string $a_module)
Load language module. 
 
deleteAssignmentsAndProgresses()
Delete all assignments from the DB. 
 
markNotRelevant(int $assignment_id, int $acting_usr_id, ilPRGMessageCollection $err_collection)
 
delete(ilPRGAssignment $assignment)
 
storeAutomaticMembershipSource(string $type, int $src_id)
Store a source to be monitored for automatic memberships. 
 
hasAssignmentOf(int $user_id)
Check whether user is assigned to this program or any node above. 
 
array $reference_children
 
storeRiskyToFailSentFor(ilPRGAssignment $ass)
 
storeExpiryInfoSentFor(ilPRGAssignment $ass)
 
getLocalMembers()
get usr_ids with assignment on this node 
 
getAssignmentsOf(int $user_id)
Get the assignments of user at this program or any node above. 
 
changeProgressDeadline(int $assignment_id, int $acting_usr_id, ilPRGMessageCollection $err_collection, ?DateTimeImmutable $deadline)
 
getAmountOfLPChildren()
Get the amount of leafs the study programme contains. 
 
enableAutomaticMembershipSource(string $type, int $src_id, bool $assign_now=false)
Enable a membership source. 
 
getRoot()
Get the ilObjStudyProgramme that is the root node of the tree this programme is in. 
 
static getProgrammesMonitoringCategory(int $cat_ref_id)
Get all (not OUTDATED) StudyProgrammes monitoring this category. 
 
static removeCrsFromProgrammes(int $crs_ref_id, int $cat_ref_id)
Check, if a category is under surveillance and automatically remove the deleted course. 
 
resetRiskyToFailSentFor(ilPRGAssignment $ass)
 
createReference()
creates reference for object 
 
removeNode(ilObjStudyProgramme $a_prg)
Remove a node from this object. 
 
hasAssignments()
Are there any assignments on this node or any node above? 
 
A Progress is the status of a user on a single node of an assignment; it is unique by assignment_id:u...
 
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
clearChildrenCache()
Clear the cached children. 
 
getAutomaticContentCategories()
Get configuration of categories with auto-content for this StudyProgramme;. 
 
getParentNodeData(int $a_node_id)
get data of parent node from tree and object_data 
 
resetExpiryInfoSentFor(ilPRGAssignment $ass)
 
deleteAllAutomaticContentCategories()
Delete all configuration of categories with auto-content for this StudyProgramme;. 
 
ilStudyProgrammeAutoMembershipsDBRepository $auto_memberships_repository
 
hasRelevantProgresses()
Are there any users that have a relevant progress on this programme? 
 
removeAssignment(ilPRGAssignment $assignment)
Remove an assignment from this program. 
 
static addMemberToProgrammes(string $src_type, int $src_id, int $usr_id)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
store(ilPRGAssignment $assignment)
 
getParents(bool $include_references=false)
Get all parents of the node, where the root of the program comes first. 
 
cloneObject(int $target_ref_id, int $copy_id=0, bool $omit_tree=false)
 
getAssignmentsOfSingleProgramForUser(int $usr_id)
Get assignments of user to this program-node only. 
 
static ilObjStudyProgrammeCache $study_programme_cache
 
getSpecificAssignment(int $assignment_id)
 
acknowledgeCourses(int $assignment_id, array $nodes, ilPRGMessageCollection $err_collection=null)
 
getProgresses(array &$ret=[], ilPRGProgress $pgs=null)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static _lookupObjectId(int $ref_id)
 
statusToRepr(int $status)
Get a user readable representation of a status. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
hasAssignmentsOfSingleProgramForUser(int $usr_id)
Get assignments of user to this program-node only. 
 
markAccredited(int $assignment_id, int $acting_usr_id, ilPRGMessageCollection $err_collection)
 
changeAmountOfPoints(int $assignment_id, int $acting_usr_id, ilPRGMessageCollection $err_collection, int $points)
 
static getDataDir()
get data directory (outside webspace) 
 
moveTo(ilObjStudyProgramme $new_parent)
Move this tree node to a new parent. 
 
succeed(int $usr_id, int $triggering_obj_id, ilPRGAssignment $ass=null)
 
const STATUS_NOT_RELEVANT
 
static removeMemberFromProgrammes(string $src_type, int $src_id, int $usr_id)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
getIdsOfUsersWithRelevantProgress()
 
static _lookupSourceIds(int $a_target_id)
Get ids of all container references that target the object with the given id. 
 
getMembersOfMembershipSource(string $src_type, int $src_id)
Get member-ids of a certain source. 
 
canBeCompleted(ilPRGProgress $progress)
 
setPoints(int $points)
Set the amount of points. 
 
updatePlanFromRepository(int $assignment_id, int $acting_usr_id, ilPRGMessageCollection $err_collection=null)
 
static getInstanceByObjId(int $obj_id)
 
getLastChange()
Get the timestamp of the last change on this program or sub program. 
 
ilStudyProgrammeEvents $events
 
getObjId()
Get the id of the study program. 
 
fetchCurrentlyUsedCertificate(int $objId)
 
hasAutomaticContentCategories()
 
static setProgressesCompletedIfParentIsProgrammeInLPCompletedMode(int $ref_id, int $obj_id, int $user_id)
Succeed all StudyProgramme(Nodes) where the object with the given id (a CRSR) is in a Programme with ...
 
ilPRGAssignmentDBRepository $assignment_repository
 
addMissingProgresses()
Add missing progress records for all assignments of this programm. 
 
getReferencesTo(ilObjStudyProgramme $prg)
 
Class ilStudyProgrammeType. 
 
static getAllChildren(int $a_ref_id, bool $include_references=false)
Get a list of all ilObjStudyProgrammes in the subtree starting at $a_ref_id. 
 
canBeRemoved()
Check weather a node can be removed. 
 
Assignments are relations of users to a PRG; They hold progress-information for (sub-)nodes of the PR...
 
getAutomaticMembershipSources()
Get sources for auto-memberships. 
 
getDepth()
Get the depth of this StudyProgramme in the tree starting at the topmost StudyProgramme (not root nod...
 
hasChildren(bool $include_references=false)
Does this StudyProgramme have other ilObjStudyProgrammes as children? 
 
ilStudyProgrammeAutoCategoryDBRepository $auto_categories_repository
 
putInTree(int $parent_ref_id)
Overwritten from ilObject. 
 
ilObjectFactoryWrapper $object_factory
 
static _getInstance(int $a_obj_id)
 
static _lookupTargetRefId(int $a_obj_id)
 
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins 
 
getLPChildrenIds()
Get the obj-ids of the leafs the program contains. 
 
static _lookupTargetId(int $a_obj_id)
 
getPossiblePointsOfRelevantChildren()
 
static createInstance()
Create an instance of ilObjStudyProgramme, put in cache. 
 
static getRefIdFor(int $obj_id)
 
deleteAutomaticContentCategories(array $category_ids=[])
Delete configuration of categories with auto-content for this StudyProgramme;. 
 
getPoints()
Get the amount of points. 
 
ilStudyProgrammeSettingsDBRepository $settings_repository
 
Assignments are relations of users to a PRG; They hold progress-information for (sub-)nodes of the PR...
 
static _lookupType(int $id, bool $reference=false)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
getAmountOfChildren($include_references=false)
Get the amount of other StudyProgrammes this StudyProgramme has as children. 
 
refreshLPStatus(int $usr_id, int $node_obj_id=null)
 
getAmountOfAssignmentsOf(int $user_id)
Get the amount of assignments a user has on this program node or any node above. 
 
ilObjectCustomIconFactory $custom_icon_factory
 
static _lookupDeletedDate(int $ref_id)
 
deleteAllAutomaticMembershipSources()
Delete all membership sources of this StudyProgramme;. 
 
updateLastChange()
Update last change timestamp on this node and its parents. 
 
ilCertificateTemplateRepository $certificate_template_repository
 
clearParentCache()
Clear the cached parent to query it again at the tree. 
 
static _updateStatus(int $a_obj_id, int $a_usr_id, ?object $a_obj=null, bool $a_percentage=false, bool $a_force_raise=false)
 
deleteAutomaticMembershipSource(string $type, int $src_id)
Delete a membership source. 
 
Holds information about multi-actions, mainly in context of member-assignemnts and status changes...
 
ilStudyProgrammeTypeDBRepository $type_repository
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
updateSettings(ilStudyProgrammeSettings $settings)
 
getPrgInstanceByObjId(int $obj_id)