ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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 
24 include_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 $DIC;
48 
49  $ilDB = $DIC['ilDB'];
50 
51  $res = $ilDB->query('SELECT mapping_id FROM ecs_container_mapping');
52  while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
53  $rules[] = new ilECSCategoryMappingRule($row->mapping_id);
54  }
55  return $rules ? $rules : array();
56  }
57 
65  public static function getMatchingCategory($a_server_id, $a_matchable_content)
66  {
67  global $DIC;
68 
69  $ilLog = $DIC['ilLog'];
70 
71  if (is_null(self::$cached_active_rules)) {
72  self::$cached_active_rules = self::getActiveRules();
73  }
74  foreach (self::$cached_active_rules as $rule) {
75  if ($rule->matches($a_matchable_content)) {
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 $DIC;
96 
97  $tree = $DIC['tree'];
98  $ilLog = $DIC['ilLog'];
99 
100  $cat = self::getMatchingCategory($a_server_id, $a_matchable_content);
101 
102  $a_ref_id = current(ilObject::_getAllReferences($a_obj_id));
103  $references = ilObject::_getAllReferences(ilObject::_lookupObjId($a_ref_id));
104  $all_cats = self::lookupHandledCategories();
105 
106  $exists = false;
107  foreach ($references as $ref_id => $null) {
108  if ($tree->getParentId($ref_id) == $cat) {
109  $exists = true;
110  }
111  }
112  $ilLog->write(__METHOD__ . ': Creating/Deleting references...');
113  include_once './Services/Object/classes/class.ilObjectFactory.php';
114 
115  if (!$exists) {
116  $ilLog->write(__METHOD__ . ': Add new reference. STEP 1');
117 
118  if ($obj_data = ilObjectFactory::getInstanceByRefId($a_ref_id, false)) {
119  $new_ref_id = $obj_data->createReference();
120  $obj_data->putInTree($cat);
121  $obj_data->setPermissions($cat);
122  $ilLog->write(__METHOD__ . ': Add new reference.');
123  }
124  }
125  // Now delete old references
126  foreach ($references as $ref_id => $null) {
127  $parent = $tree->getParentId($ref_id);
128  if ($parent == $cat) {
129  continue;
130  }
131  if (!in_array($parent, $all_cats)) {
132  continue;
133  }
134  if ($to_delete = ilObjectFactory::getInstanceByRefId($ref_id)) {
135  $to_delete->delete();
136  $ilLog->write(__METHOD__ . ': Deleted deprecated reference.');
137  }
138  }
139  return true;
140  }
141 
148  public static function lookupHandledCategories()
149  {
150  global $DIC;
151 
152  $ilDB = $DIC['ilDB'];
153 
154  $res = $ilDB->query("SELECT container_id FROM ecs_container_mapping ");
155  while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
156  $ref_ids[] = $row->container_id;
157  }
158  return $ref_ids ? $ref_ids : array();
159  }
160 
167  public static function getPossibleFields()
168  {
169  global $DIC;
170 
171  $lng = $DIC['lng'];
172 
173  $options = array(
174  "community" => $lng->txt("ecs_field_community"),
175  "part_id" => $lng->txt("ecs_field_part_id"),
176  "type" => $lng->txt("type")
177  );
178 
179  // will be handled by server soon?
180 
181  // only courses for now
182  include_once('./Services/WebServices/ECS/classes/class.ilECSUtils.php');
183  $course_fields = ilECSUtils::_getOptionalECourseFields();
184  foreach ($course_fields as $field) {
185  $options[$field] = $lng->txt("obj_rcrs") . " - " . $lng->txt("ecs_field_" . $field);
186  }
187 
188  return $options;
189  }
190 }
static getInstanceByServerId($a_server_id)
Get singleton instance per server.
global $DIC
Definition: saml.php:7
static handleUpdate($a_obj_id, $a_server_id, $a_matchable_content)
Handle update of ecs content and create references.
Defines a rule for the assignment of ECS remote courses to categories.
static _getAllReferences($a_id)
get all reference ids of object
static getActiveRules()
get active rules
foreach($_POST as $key=> $value) $res
$rule
Definition: showstats.php:43
$lng
static getMatchingCategory($a_server_id, $a_matchable_content)
get matching category
static _lookupObjId($a_id)
$row
global $ilDB
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
static _getOptionalECourseFields()
get optional econtent fields These fields might be mapped against AdvancedMetaData field definitions ...