1<?php 2/* 3 +-----------------------------------------------------------------------------+ 4 | ILIAS open source | 5 +-----------------------------------------------------------------------------+ 6 | Copyright (c) 1998-2001 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 25/** 26* Meta Data class (element classification) 27* 28* @package ilias-core 29* @version $Id$ 30*/ 31include_once 'class.ilMD5295Base.php'; 32 33class ilMD5295Classification extends ilMD5295Base 34{ 35 // METHODS OF CLIENT OBJECTS (TaxonPath, Keyword) 36 public function &getTaxonPathIds() 37 { 38 include_once 'Services/Migration/DBUpdate_5295/classes/class.ilMD5295TaxonPath.php'; 39 40 return ilMD5295TaxonPath::_getIds($this->getRBACId(), $this->getObjId(), $this->getMetaId(), 'meta_classification'); 41 } 42 public function &getTaxonPath($a_taxon_path_id) 43 { 44 include_once 'Services/Migration/DBUpdate_5295/classes/class.ilMD5295TaxonPath.php'; 45 46 if (!$a_taxon_path_id) { 47 return false; 48 } 49 $tax = new ilMD5295TaxonPath(); 50 $tax->setMetaId($a_taxon_path_id); 51 52 return $tax; 53 } 54 public function &addTaxonPath() 55 { 56 include_once 'Services/Migration/DBUpdate_5295/classes/class.ilMD5295TaxonPath.php'; 57 58 $tax = new ilMD5295TaxonPath($this->getRBACId(), $this->getObjId(), $this->getObjType()); 59 $tax->setParentId($this->getMetaId()); 60 $tax->setParentType('meta_classification'); 61 62 return $tax; 63 } 64 65 public function &getKeywordIds() 66 { 67 include_once 'Services/Migration/DBUpdate_5295/classes/class.ilMD5295Keyword.php'; 68 69 return ilMD5295Keyword::_getIds($this->getRBACId(), $this->getObjId(), $this->getMetaId(), 'meta_classification'); 70 } 71 public function &getKeyword($a_keyword_id) 72 { 73 include_once 'Services/Migration/DBUpdate_5295/classes/class.ilMD5295Keyword.php'; 74 75 if (!$a_keyword_id) { 76 return false; 77 } 78 $key = new ilMD5295Keyword(); 79 $key->setMetaId($a_keyword_id); 80 81 return $key; 82 } 83 public function &addKeyword() 84 { 85 include_once 'Services/Migration/DBUpdate_5295/classes/class.ilMD5295Keyword.php'; 86 87 $key = new ilMD5295Keyword($this->getRBACId(), $this->getObjId(), $this->getObjType()); 88 $key->setParentId($this->getMetaId()); 89 $key->setParentType('meta_classification'); 90 91 return $key; 92 } 93 94 // SET/GET 95 public function setPurpose($a_purpose) 96 { 97 switch ($a_purpose) { 98 case 'Discipline': 99 case 'Idea': 100 case 'Prerequisite': 101 case 'EducationalObjective': 102 case 'AccessibilityRestrictions': 103 case 'EducationalLevel': 104 case 'SkillLevel': 105 case 'SecurityLevel': 106 case 'Competency': 107 $this->purpose = $a_purpose; 108 return true; 109 110 default: 111 return false; 112 } 113 } 114 public function getPurpose() 115 { 116 return $this->purpose; 117 } 118 public function setDescription($a_description) 119 { 120 $this->description = $a_description; 121 } 122 public function getDescription() 123 { 124 return $this->description; 125 } 126 public function setDescriptionLanguage(&$lng_obj) 127 { 128 if (is_object($lng_obj)) { 129 $this->description_language = $lng_obj; 130 } 131 } 132 public function &getDescriptionLanguage() 133 { 134 return is_object($this->description_language) ? $this->description_language : false; 135 } 136 public function getDescriptionLanguageCode() 137 { 138 return is_object($this->description_language) ? $this->description_language->getLanguageCode() : false; 139 } 140 141 142 public function save() 143 { 144 global $DIC; 145 146 $ilDB = $DIC['ilDB']; 147 148 $fields = $this->__getFields(); 149 $fields['meta_classification_id'] = array('integer',$next_id = $ilDB->nextId('il_meta_classification')); 150 151 if ($this->db->insert('il_meta_classification', $fields)) { 152 $this->setMetaId($next_id); 153 return $this->getMetaId(); 154 } 155 return false; 156 } 157 158 public function update() 159 { 160 global $DIC; 161 162 $ilDB = $DIC['ilDB']; 163 164 if ($this->getMetaId()) { 165 if ($this->db->update( 166 'il_meta_classification', 167 $this->__getFields(), 168 array("meta_classification_id" => array('integer',$this->getMetaId())) 169 )) { 170 return true; 171 } 172 } 173 return false; 174 } 175 176 public function delete() 177 { 178 global $DIC; 179 180 $ilDB = $DIC['ilDB']; 181 182 if ($this->getMetaId()) { 183 $query = "DELETE FROM il_meta_classification " . 184 "WHERE meta_classification_id = " . $ilDB->quote($this->getMetaId(), 'integer'); 185 $res = $ilDB->manipulate($query); 186 187 foreach ($this->getTaxonPathIds() as $id) { 188 $tax = $this->getTaxonPath($id); 189 $tax->delete(); 190 } 191 foreach ($this->getKeywordIds() as $id) { 192 $key = $this->getKeyword($id); 193 $key->delete(); 194 } 195 196 return true; 197 } 198 return false; 199 } 200 201 202 public function __getFields() 203 { 204 return array('rbac_id' => array('integer',$this->getRBACId()), 205 'obj_id' => array('integer',$this->getObjId()), 206 'obj_type' => array('text',$this->getObjType()), 207 'purpose' => array('text',$this->getPurpose()), 208 'description' => array('text',$this->getDescription()), 209 'description_language' => array('text',$this->getDescriptionLanguageCode())); 210 } 211 212 public function read() 213 { 214 global $DIC; 215 216 $ilDB = $DIC['ilDB']; 217 218 include_once 'Services/Migration/DBUpdate_5295/classes/class.ilMD5295LanguageItem.php'; 219 220 if ($this->getMetaId()) { 221 $query = "SELECT * FROM il_meta_classification " . 222 "WHERE meta_classification_id = " . $ilDB->quote($this->getMetaId(), 'integer'); 223 224 $res = $this->db->query($query); 225 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) { 226 $this->setRBACId($row->rbac_id); 227 $this->setObjId($row->obj_id); 228 $this->setObjType($row->obj_type); 229 $this->setPurpose($row->purpose); 230 $this->setDescription($row->description); 231 $this->description_language = new ilMD5295LanguageItem($row->description_language); 232 } 233 } 234 return true; 235 } 236 237 /* 238 * XML Export of all meta data 239 * @param object (xml writer) see class.ilMD52952XML.php 240 * 241 */ 242 public function toXML(&$writer) 243 { 244 $writer->xmlStartTag('Classification', array('Purpose' => $this->getPurpose() 245 ? $this->getPurpose() 246 : 'Idea')); 247 248 // Taxon Path 249 $taxs = $this->getTaxonPathIds(); 250 foreach ($taxs as $id) { 251 $tax = &$this->getTaxonPath($id); 252 $tax->toXML($writer); 253 } 254 if (!count($taxs)) { 255 include_once 'Services/Migration/DBUpdate_5295/classes/class.ilMD5295TaxonPath.php'; 256 $tax = new ilMD5295TaxonPath($this->getRBACId(), $this->getObjId()); 257 $tax->toXML($writer); 258 } 259 260 // Description 261 $writer->xmlElement( 262 'Description', 263 array('Language' => $this->getDescriptionLanguageCode() 264 ? $this->getDescriptionLanguageCode() 265 : 'en'), 266 $this->getDescription() 267 ); 268 269 // Keyword 270 $keys = $this->getKeywordIds(); 271 foreach ($keys as $id) { 272 $key = &$this->getKeyword($id); 273 $key->toXML($writer); 274 } 275 if (!count($keys)) { 276 include_once 'Services/Migration/DBUpdate_5295/classes/class.ilMD5295Keyword.php'; 277 $key = new ilMD5295Keyword($this->getRBACId(), $this->getObjId()); 278 $key->toXML($writer); 279 } 280 $writer->xmlEndTag('Classification'); 281 } 282 283 284 285 // STATIC 286 public static function _getIds($a_rbac_id, $a_obj_id) 287 { 288 global $DIC; 289 290 $ilDB = $DIC['ilDB']; 291 292 $query = "SELECT meta_classification_id FROM il_meta_classification " . 293 "WHERE rbac_id = " . $ilDB->quote($a_rbac_id, 'integer') . " " . 294 "AND obj_id = " . $ilDB->quote($a_obj_id, 'integer'); 295 296 297 $res = $ilDB->query($query); 298 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) { 299 $ids[] = $row->meta_classification_id; 300 } 301 return $ids ? $ids : array(); 302 } 303} 304