ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilECSCategoryMapping.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7 | |
8 | This program is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License |
10 | as published by the Free Software Foundation; either version 2 |
11 | of the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 +-----------------------------------------------------------------------------+
22*/
23
24include_once './Services/WebServices/ECS/classes/class.ilECSCategoryMappingRule.php';
25
36{
37 private static $cached_active_rules = null;
38
45 public static function getActiveRules()
46 {
47 global $ilDB;
48
49 $res = $ilDB->query('SELECT mapping_id FROM ecs_container_mapping');
50 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
51 {
52 $rules[] = new ilECSCategoryMappingRule($row->mapping_id);
53 }
54 return $rules ? $rules : array();
55 }
56
64 public static function getMatchingCategory($a_server_id, $a_matchable_content)
65 {
66 global $ilLog;
67
68 if(is_null(self::$cached_active_rules))
69 {
70 self::$cached_active_rules = self::getActiveRules();
71 }
72 foreach(self::$cached_active_rules as $rule)
73 {
74 if($rule->matches($a_matchable_content))
75 {
76 $ilLog->write(__METHOD__.': Found assignment for field type: '.$rule->getFieldName());
77 return $rule->getContainerId();
78 }
79 $ilLog->write(__METHOD__.': Category assignment failed for field: '.$rule->getFieldName());
80 }
81 // Return default container
82 $ilLog->write(__METHOD__.': Using default container');
83
84 return ilECSSetting::getInstanceByServerId($a_server_id)->getImportId();
85 }
86
93 public static function handleUpdate($a_obj_id, $a_server_id, $a_matchable_content)
94 {
95 global $tree,$ilLog;
96
97 $cat = self::getMatchingCategory($a_server_id, $a_matchable_content);
98
99 $a_ref_id = current(ilObject::_getAllReferences($a_obj_id));
100 $references = ilObject::_getAllReferences(ilObject::_lookupObjId($a_ref_id));
101 $all_cats = self::lookupHandledCategories();
102
103 $exists = false;
104 foreach($references as $ref_id => $null)
105 {
106 if($tree->getParentId($ref_id) == $cat)
107 {
108 $exists = true;
109 }
110 }
111 $ilLog->write(__METHOD__.': Creating/Deleting references...');
112 include_once './Services/Object/classes/class.ilObjectFactory.php';
113
114 if(!$exists)
115 {
116 $ilLog->write(__METHOD__.': Add new reference. STEP 1');
117
118 if($obj_data = ilObjectFactory::getInstanceByRefId($a_ref_id,false))
119 {
120 $new_ref_id = $obj_data->createReference();
121 $obj_data->putInTree($cat);
122 $obj_data->setPermissions($cat);
123 $ilLog->write(__METHOD__.': Add new reference.');
124 }
125 }
126 // Now delete old references
127 foreach($references as $ref_id => $null)
128 {
129 $parent = $tree->getParentId($ref_id);
130 if($parent == $cat)
131 {
132 continue;
133 }
134 if(!in_array($parent,$all_cats))
135 {
136 continue;
137 }
139 {
140 $to_delete->delete();
141 $ilLog->write(__METHOD__.': Deleted deprecated reference.');
142 }
143 }
144 return true;
145 }
146
153 public static function lookupHandledCategories()
154 {
155 global $ilDB;
156
157 $res = $ilDB->query("SELECT container_id FROM ecs_container_mapping ");
158 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
159 {
160 $ref_ids[] = $row->container_id;
161 }
162 return $ref_ids ? $ref_ids : array();
163 }
164
171 public static function getPossibleFields()
172 {
173 global $lng;
174
175 $options = array(
176 "community" => $lng->txt("ecs_field_community"),
177 "part_id" => $lng->txt("ecs_field_part_id"),
178 "type" => $lng->txt("type")
179 );
180
181 // will be handled by server soon?
182
183 // only courses for now
184 include_once('./Services/WebServices/ECS/classes/class.ilECSUtils.php');
185 $course_fields = ilECSUtils::_getOptionalECourseFields();
186 foreach($course_fields as $field)
187 {
188 $options[$field] = $lng->txt("obj_rcrs")." - ".$lng->txt("ecs_field_".$field);
189 }
190
191 return $options;
192 }
193}
194?>
const DB_FETCHMODE_OBJECT
Definition: class.ilDB.php:11
Defines a rule for the assignment of ECS remote courses to categories.
static getActiveRules()
get active rules
static handleUpdate($a_obj_id, $a_server_id, $a_matchable_content)
Handle update of ecs content and create references.
static getMatchingCategory($a_server_id, $a_matchable_content)
get matching category
static getInstanceByServerId($a_server_id)
Get singleton instance per server.
static _getOptionalECourseFields()
get optional econtent fields These fields might be mapped against AdvancedMetaData field definitions
getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
static _lookupObjId($a_id)
static _getAllReferences($a_id)
get all reference ids of object
global $lng
Definition: privfeed.php:40
$ref_id
Definition: sahs_server.php:39
global $ilDB
if(!is_array($argv)) $options