32require_once 
"./Services/Object/classes/class.ilObject.php";
 
   69        $this->ref_id = $a_ref_id;
 
   77        $this->obj_id = $a_obj_id;
 
   85        return $this->container_type;
 
   89        $this->container_type = 
$a_type;
 
  103        $this->title = $a_title;
 
  111        $this->description = $a_desc;
 
  119        $this->unique_field = $a_uni;
 
  123        return $this->unique_field;
 
  135        include_once 
'./Services/AccessControl/classes/class.ilConditionHandler.php';
 
  137        $conditions = array();
 
  138        foreach ($condition_data as $condition) {
 
  139            if ($tree->isDeleted($condition[
'target_ref_id'])) {
 
  142            $conditions[] = $condition;
 
  144        return count($conditions) ? $conditions : array();
 
  147    public function delete()
 
  151        include_once 
'./Services/AccessControl/classes/class.ilConditionHandler.php';
 
  154            $query = 
"DELETE FROM object_data WHERE obj_id = " . $ilDB->quote($this->
getId(), 
'integer') . 
" ";
 
  157            $query = 
"DELETE FROM crs_groupings " .
 
  158                "WHERE crs_grp_id = " . 
$ilDB->quote($this->
getId(), 
'integer') . 
" ";
 
  163            $condh->deleteByObjId($this->
getId());
 
  170    public function create($a_course_ref_id, $a_course_id)
 
  175        $this->
setId($ilDB->nextId(
"object_data"));
 
  176        $query = 
"INSERT INTO object_data " .
 
  177            "(obj_id, type,title,description,owner,create_date,last_update) " .
 
  180            $ilDB->quote($this->
getId(), 
"integer") . 
"," .
 
  181            $ilDB->quote($this->type, 
"text") . 
"," .
 
  184            $ilDB->quote(
$ilUser->getId(), 
"integer") . 
"," .
 
  192        $query = 
"INSERT INTO crs_groupings (crs_grp_id,crs_ref_id,crs_id,unique_field) " .
 
  194            $ilDB->quote($this->
getId(), 
'integer') . 
", " .
 
  195            $ilDB->quote($a_course_ref_id, 
'integer') . 
", " .
 
  196            $ilDB->quote($a_course_id, 
'integer') . 
", " .
 
  201        return $this->
getId();
 
  210            $query = 
"UPDATE object_data " .
 
  211                "SET title = " . $ilDB->quote($this->
getTitle(), 
'text') . 
", " .
 
  212                "description = " . $ilDB->quote($this->
getDescription(), 
'text') . 
" " .
 
  213                "WHERE obj_id = " . $ilDB->quote($this->
getId(), 
'integer') . 
" " .
 
  214                "AND type = " . $ilDB->quote($this->
getType(), 
'text') . 
" ";
 
  218            $query = 
"UPDATE crs_groupings " .
 
  220                "WHERE crs_grp_id = " . $ilDB->quote($this->
getId(), 
'integer') . 
" ";
 
  224            $query = 
"UPDATE conditions " .
 
  226                "WHERE trigger_obj_id = " . $ilDB->quote($this->
getId(), 
'integer') . 
" " .
 
  227                "AND trigger_type = 'crsg'";
 
  238            if ($a_course_id == $condition_data[
'target_obj_id']) {
 
  247        global $ilObjDataCache,
$ilDB;
 
  249        $query = 
"SELECT * FROM object_data " .
 
  250            "WHERE obj_id = " . 
$ilDB->quote($this->
getId(), 
'integer') . 
" ";
 
  258        $query = 
"SELECT * FROM crs_groupings " .
 
  259            "WHERE crs_grp_id = " . $ilDB->quote($this->
getId(), 
'integer') . 
" ";
 
  266            $this->
setContainerType($ilObjDataCache->lookupType($this->getContainerObjId()));
 
  274        global $ilAccess,$tree;
 
  278        $found_invisible = 
false;
 
  279        foreach ($tmp_grouping_obj->getAssignedItems() as $condition) {
 
  280            if (!$ilAccess->checkAccess(
'write', 
'', $condition[
'target_ref_id'])) {
 
  281                $found_invisible = 
true;
 
  285        return $found_invisible ? false : 
true;
 
  298        global $ilObjDataCache,$ilAccess,
$ilDB;
 
  300        $container_type = $ilObjDataCache->lookupType($a_obj_id) == 
'grp' ? 
'grp' : 
'crs';
 
  304        $query = 
"SELECT * FROM object_data WHERE type = 'crsg' ORDER BY title";
 
  306        $groupings = array();
 
  308            $groupings[] = 
$row->obj_id;
 
  312        foreach ($groupings as $grouping_id) {
 
  316            if ($tmp_grouping_obj->getContainerType() != $container_type) {
 
  320            if ($tmp_grouping_obj->getContainerObjId() == $a_obj_id) {
 
  321                $visible_groupings[] = $grouping_id;
 
  325            if (count($items = $tmp_grouping_obj->getAssignedItems())) {
 
  326                foreach ($items as $condition_data) {
 
  327                    if ($ilAccess->checkAccess(
'write', 
'', $condition_data[
'target_ref_id'])) {
 
  328                        $visible_groupings[] = $grouping_id;
 
  334        return $visible_groupings ? $visible_groupings : array();
 
  337    public function assign($a_crs_ref_id, $a_course_id)
 
  346    public function deassign($a_crs_ref_id, $a_course_id)
 
  348        include_once 
'./Services/AccessControl/classes/class.ilConditionHandler.php';
 
  354        if ($this->getCountAssignedCourses() == 2) {
 
  355            $condh->deleteByObjId($this->
getId());
 
  361            if ($cond_data[
'target_ref_id'] == $a_crs_ref_id and
 
  362               $cond_data[
'target_obj_id'] == $a_course_id) {
 
  363                $condh->deleteCondition($cond_data[
'id']);
 
  372        include_once 
'./Services/AccessControl/classes/class.ilConditionHandler.php';
 
  375        $tmp_condh->enableAutomaticValidation(
false);
 
  377        $tmp_condh->setTargetRefId($a_target_ref_id);
 
  378        $tmp_condh->setTargetObjId($a_target_obj_id);
 
  379        $tmp_condh->setTargetType(
'crs');
 
  380        $tmp_condh->setTriggerRefId(0);
 
  381        $tmp_condh->setTriggerObjId($this->
getId());
 
  382        $tmp_condh->setTriggerType(
'crsg');
 
  383        $tmp_condh->setOperator(
'not_member');
 
  386        if (!$tmp_condh->checkExists()) {
 
  387            $tmp_condh->storeCondition();
 
  401            include_once 
'./Services/AccessControl/classes/class.ilConditionHandler.php';
 
  404            $condh->deleteByObjId($grouping_id);
 
  407        $query = 
"DELETE FROM crs_groupings " .
 
  408            "WHERE crs_id = " . 
$ilDB->quote($a_course_id, 
'integer') . 
" ";
 
  418        $query = 
"SELECT * FROM crs_groupings " .
 
  419            "WHERE crs_id = " . 
$ilDB->quote($a_course_id, 
'integer') . 
" ";
 
  423            $groupings[] = 
$row->crs_grp_id;
 
  425        return $groupings ? $groupings : array();
 
  428    public static function _checkCondition($trigger_obj_id, $operator, $value, $a_usr_id = 0)
 
  446        include_once 
'./Services/AccessControl/classes/class.ilConditionHandler.php';
 
  450            if ($condition[
'trigger_type'] == 
'crsg') {
 
  452                    if ($tree->isDeleted($target_condition[
'target_ref_id'])) {
 
  455                    $course_ids[] = array(
'id'                  => $target_condition[
'target_obj_id'],
 
  456                                          'unique'              => $target_condition[
'value']);
 
  460        return $course_ids ? $course_ids : array();
 
  477        include_once 
'./Services/AccessControl/classes/class.ilConditionHandler.php';
 
  479        $user_id = is_null($a_user_id) ? 
$ilUser->getId() : $a_user_id;
 
  482        $trigger_ids = array();
 
  484            $container_obj->getRefId(),
 
  485            $container_obj->getId(),
 
  486            $container_obj->getType()
 
  488            if ($condition[
'operator'] == 
'not_member') {
 
  489                $trigger_ids[] = $condition[
'trigger_obj_id'];
 
  493        if (!count($trigger_ids)) {
 
  496        $matriculation_message = $assigned_message = 
'';
 
  497        self::$assignedObjects = array();
 
  498        foreach ($trigger_ids as $trigger_id) {
 
  501                if ($tree->isDeleted($condition[
'target_ref_id'])) {
 
  504                if ($condition[
'operator'] == 
'not_member') {
 
  505                    switch ($condition[
'value']) {
 
  506                        case 'matriculation':
 
  508                                if (!$matriculation_message) {
 
  509                                    $matriculation_message = 
$lng->txt(
'crs_grp_matriculation_required');
 
  513                    if ($container_obj->getType() == 
'crs') {
 
  514                        include_once(
'Modules/Course/classes/class.ilCourseParticipants.php');
 
  516                        if ($members->isGroupingMember($user_id, $condition[
'value'])) {
 
  517                            if (!$assigned_message) {
 
  518                                self::$assignedObjects[] = $condition[
'target_obj_id'];
 
  519                                $assigned_message = 
$lng->txt(
'crs_grp_already_assigned');
 
  522                    } elseif ($container_obj->getType() == 
'grp') {
 
  523                        include_once(
'Modules/Group/classes/class.ilGroupParticipants.php');
 
  525                        if ($members->isGroupingMember($user_id, $condition[
'value'])) {
 
  526                            if (!$assigned_message) {
 
  527                                self::$assignedObjects[] = $condition[
'target_obj_id'];
 
  528                                $assigned_message = 
$lng->txt(
'grp_grp_already_assigned');
 
  533                            if (!$assigned_message) {
 
  534                                self::$assignedObjects[] = $condition[
'target_obj_id'];
 
  535                                $assigned_message = 
$lng->txt(
'crs_grp_already_assigned');
 
  542        if ($matriculation_message) {
 
  543            $container_obj->appendMessage($matriculation_message);
 
  545        } elseif ($assigned_message) {
 
  546            $container_obj->appendMessage($assigned_message);
 
  561        global $tree,$ilObjDataCache,$ilAccess,$tree;
 
  563        include_once 
'./Services/AccessControl/classes/class.ilConditionHandler.php';
 
  565        $trigger_ids = array();
 
  567            $container_obj->getRefId(),
 
  568            $container_obj->getId(),
 
  569            $container_obj->getType()
 
  571            if ($condition[
'operator'] == 
'not_member') {
 
  572                $trigger_ids[] = $condition[
'trigger_obj_id'];
 
  575        if (!count($trigger_ids)) {
 
  578        $hash_table = array();
 
  579        foreach ($trigger_ids as $trigger_id) {
 
  582                if ($tree->isDeleted($condition[
'target_ref_id'])) {
 
  586                if ($condition[
'operator'] == 
'not_member') {
 
  587                    if (!$hash_table[$condition[
'target_ref_id']]) {
 
  588                        $items[] = $condition[
'target_ref_id'];
 
  590                    $hash_table[$condition[
'target_ref_id']] = 
true;
 
  594        return $items ? $items : array();
 
An exception for terminatinating execution or to throw for unit testing.
Handles conditions for accesses to different ILIAS objects.
static _getConditionsOfTrigger($a_trigger_obj_type, $a_trigger_id)
get all conditions of trigger object
static _getConditionsOfTarget($a_target_ref_id, $a_target_obj_id, $a_target_type="")
get all conditions of target object
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
__addCondition($a_target_ref_id, $a_target_obj_id)
static _deleteAll($a_course_id)
static _checkGroupingDependencies(&$container_obj, $a_user_id=null)
static _getGroupingItems($container_obj)
Get courses/groups that are assigned to the same membership limitation.
deassign($a_crs_ref_id, $a_course_id)
create($a_course_ref_id, $a_course_id)
setContainerType($a_type)
assign($a_crs_ref_id, $a_course_id)
setContainerObjId($a_obj_id)
static _getVisibleGroupings($a_obj_id)
static _getGroupings($a_course_id)
static _getGroupingCourseIds($a_course_ref_id, $a_course_id)
Get all ids of courses that are grouped with another course @access static.
__construct($a_id=0)
Constructor @access public.
static getAssignedObjects()
Alway call checkGroupingDependencies before.
static _checkCondition($trigger_obj_id, $operator, $value, $a_usr_id=0)
_checkAccess($grouping_id)
setContainerRefId($a_ref_id)
_isMember($a_user_id, $a_ref_id, $a_field='')
static lookupMatriculation($a_usr_id)
Lookup matriculation.
if(!array_key_exists('StateId', $_REQUEST)) $id
foreach($_POST as $key=> $value) $res