00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00032 include_once 'class.ilMDBase.php';
00033
00034 class ilMDGeneral extends ilMDBase
00035 {
00036 function ilMDGeneral($a_rbac_id = 0,$a_obj_id = 0,$a_obj_type = '')
00037 {
00038 parent::ilMDBase($a_rbac_id,
00039 $a_obj_id,
00040 $a_obj_type);
00041 }
00042 function getPossibleSubelements()
00043 {
00044 $subs['Keyword'] = 'meta_keyword';
00045 $subs['Language'] = 'meta_language';
00046 $subs['Identifier'] = 'meta_identifier';
00047 $subs['Description'] = 'meta_description';
00048
00049 return $subs;
00050 }
00051
00052
00053
00054 function &getIdentifierIds()
00055 {
00056 include_once 'Services/MetaData/classes/class.ilMDIdentifier.php';
00057
00058 return ilMDIdentifier::_getIds($this->getRBACId(),$this->getObjId(),$this->getMetaId(),'meta_general');
00059 }
00060 function &getIdentifier($a_identifier_id)
00061 {
00062 include_once 'Services/MetaData/classes/class.ilMDIdentifier.php';
00063
00064 if(!$a_identifier_id)
00065 {
00066 return false;
00067 }
00068 $ide =& new ilMDIdentifier();
00069 $ide->setMetaId($a_identifier_id);
00070
00071 return $ide;
00072 }
00073 function &addIdentifier()
00074 {
00075 include_once 'Services/MetaData/classes/class.ilMDIdentifier.php';
00076
00077 $ide =& new ilMDIdentifier($this->getRBACId(),$this->getObjId(),$this->getObjType());
00078 $ide->setParentId($this->getMetaId());
00079 $ide->setParentType('meta_general');
00080
00081 return $ide;
00082 }
00083 function &getLanguageIds()
00084 {
00085 include_once 'Services/MetaData/classes/class.ilMDLanguage.php';
00086
00087 return ilMDLanguage::_getIds($this->getRBACId(),$this->getObjId(),$this->getMetaId(),'meta_general');
00088 }
00089 function &getLanguage($a_language_id)
00090 {
00091 include_once 'Services/MetaData/classes/class.ilMDLanguage.php';
00092
00093 if(!$a_language_id)
00094 {
00095 return false;
00096 }
00097 $lan =& new ilMDLanguage();
00098 $lan->setMetaId($a_language_id);
00099
00100 return $lan;
00101
00102 }
00103 function &addLanguage()
00104 {
00105 include_once 'Services/MetaData/classes/class.ilMDLanguage.php';
00106
00107 $lan =& new ilMDLanguage($this->getRBACId(),$this->getObjId(),$this->getObjType());
00108 $lan->setParentId($this->getMetaId());
00109 $lan->setParentType('meta_general');
00110
00111 return $lan;
00112 }
00113 function &getDescriptionIds()
00114 {
00115 include_once 'Services/MetaData/classes/class.ilMDDescription.php';
00116
00117 return ilMDDescription::_getIds($this->getRBACId(),$this->getObjId(),$this->getMetaId(),'meta_general');
00118 }
00119 function &getDescription($a_description_id)
00120 {
00121 include_once 'Services/MetaData/classes/class.ilMDDescription.php';
00122
00123
00124 if(!$a_description_id)
00125 {
00126 return false;
00127 }
00128 $des =& new ilMDDescription();
00129 $des->setMetaId($a_description_id);
00130
00131 return $des;
00132 }
00133 function &addDescription()
00134 {
00135 include_once 'Services/MetaData/classes/class.ilMDDescription.php';
00136
00137 $des =& new ilMDDescription($this->getRBACId(),$this->getObjId(),$this->getObjType());
00138 $des->setParentId($this->getMetaId());
00139 $des->setParentType('meta_general');
00140
00141 return $des;
00142 }
00143 function &getKeywordIds()
00144 {
00145 include_once 'Services/MetaData/classes/class.ilMDKeyword.php';
00146
00147 return ilMDKeyword::_getIds($this->getRBACId(),$this->getObjId(),$this->getMetaId(),'meta_general');
00148 }
00149 function &getKeyword($a_keyword_id)
00150 {
00151 include_once 'Services/MetaData/classes/class.ilMDKeyword.php';
00152
00153 if(!$a_keyword_id)
00154 {
00155 return false;
00156 }
00157 $key =& new ilMDKeyword();
00158 $key->setMetaId($a_keyword_id);
00159
00160 return $key;
00161 }
00162 function &addKeyword()
00163 {
00164 include_once 'Services/MetaData/classes/class.ilMDKeyword.php';
00165
00166 $key =& new ilMDKeyword($this->getRBACId(),$this->getObjId(),$this->getObjType());
00167 $key->setParentId($this->getMetaId());
00168 $key->setParentType('meta_general');
00169
00170 return $key;
00171 }
00172
00173
00174
00175
00176 function setStructure($a_structure)
00177 {
00178 switch($a_structure)
00179 {
00180 case 'Atomic':
00181 case 'Collection':
00182 case 'Networked':
00183 case 'Hierarchical':
00184 case 'Linear':
00185 $this->structure = $a_structure;
00186 return true;
00187
00188 default:
00189 return false;
00190 }
00191 }
00192 function getStructure()
00193 {
00194 return $this->structure;
00195 }
00196 function setTitle($a_title)
00197 {
00198 $this->title = $a_title;
00199 }
00200 function getTitle()
00201 {
00202 return $this->title;
00203 }
00204 function setTitleLanguage(&$lng_obj)
00205 {
00206 if(is_object($lng_obj))
00207 {
00208 $this->title_language = $lng_obj;
00209 }
00210 }
00211 function &getTitleLanguage()
00212 {
00213 return is_object($this->title_language) ? $this->title_language : false;
00214 }
00215 function getTitleLanguageCode()
00216 {
00217 return is_object($this->title_language) ? $this->title_language->getLanguageCode() : false;
00218 }
00219
00220 function setCoverage($a_coverage)
00221 {
00222 $this->coverage = $a_coverage;
00223 }
00224 function getCoverage()
00225 {
00226 return $this->coverage;
00227 }
00228
00229 function setCoverageLanguage(&$lng_obj)
00230 {
00231 if(is_object($lng_obj))
00232 {
00233 $this->coverage_language = $lng_obj;
00234 }
00235 }
00236 function &getCoverageLanguage()
00237 {
00238 return is_object($this->coverage_language) ? $this->coverage_language : false;
00239 }
00240 function getCoverageLanguageCode()
00241 {
00242 return is_object($this->coverage_language) ? $this->coverage_language->getLanguageCode() : false;
00243 }
00244
00245
00246 function save()
00247 {
00248 if($this->db->autoExecute('il_meta_general',
00249 $this->__getFields(),
00250 DB_AUTOQUERY_INSERT))
00251 {
00252 $this->setMetaId($this->db->getLastInsertId());
00253
00254 return $this->getMetaId();
00255 }
00256 return false;
00257 }
00258
00259 function update()
00260 {
00261 if($this->getMetaId())
00262 {
00263 if($this->db->autoExecute('il_meta_general',
00264 $this->__getFields(),
00265 DB_AUTOQUERY_UPDATE,
00266 "meta_general_id = '".$this->getMetaId()."'"))
00267 {
00268 return true;
00269 }
00270 }
00271 return false;
00272 }
00273
00274 function delete()
00275 {
00276 if(!$this->getMetaId())
00277 {
00278 return false;
00279 }
00280
00281 foreach($this->getIdentifierIds() as $id)
00282 {
00283 $ide = $this->getIdentifier($id);
00284 $ide->delete();
00285 }
00286
00287
00288 foreach($this->getLanguageIds() as $id)
00289 {
00290 $lan = $this->getLanguage($id);
00291 $lan->delete();
00292 }
00293
00294
00295 foreach($this->getDescriptionIds() as $id)
00296 {
00297 $des = $this->getDescription($id);
00298 $des->delete();
00299 }
00300
00301
00302 foreach($this->getKeywordIds() as $id)
00303 {
00304 $key = $this->getKeyword($id);
00305 $key->delete();
00306 }
00307
00308 if($this->getMetaId())
00309 {
00310 $query = "DELETE FROM il_meta_general ".
00311 "WHERE meta_general_id = '".$this->getMetaId()."'";
00312
00313 $this->db->query($query);
00314
00315 return true;
00316 }
00317
00318
00319 return false;
00320 }
00321
00322
00323 function __getFields()
00324 {
00325 return array('rbac_id' => $this->getRBACId(),
00326 'obj_id' => $this->getObjId(),
00327 'obj_type' => ilUtil::prepareDBString($this->getObjType()),
00328 'general_structure' => $this->getStructure(),
00329 'title' => $this->getTitle(),
00330 'title_language' => $this->getTitleLanguageCode(),
00331 'coverage' => $this->getCoverage(),
00332 'coverage_language' => $this->getCoverageLanguageCode());
00333 }
00334
00335 function read()
00336 {
00337 include_once 'Services/MetaData/classes/class.ilMDLanguageItem.php';
00338
00339 if($this->getMetaId())
00340 {
00341 $query = "SELECT * FROM il_meta_general ".
00342 "WHERE meta_general_id = '".$this->getMetaId()."'";
00343
00344 $res = $this->db->query($query);
00345 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00346 {
00347 $this->setRBACId($row->rbac_id);
00348 $this->setObjId($row->obj_id);
00349 $this->setObjType($row->obj_type);
00350 $this->setStructure($row->general_structure);
00351 $this->setTitle($row->title);
00352 $this->setTitleLanguage(new ilMDLanguageItem($row->title_language));
00353 $this->setCoverage($row->coverage);
00354 $this->setCoverageLanguage(new ilMDLanguageItem($row->coverage_language));
00355 }
00356 }
00357 return true;
00358 }
00359
00360
00361
00362
00363
00364
00365 function toXML(&$writer)
00366 {
00367 $writer->xmlStartTag('General',array('Structure' => $this->getStructure() ?
00368 $this->getStructure() :
00369 'Atomic'));
00370
00371
00372
00373 $first = true;
00374 $identifiers = array();
00375 $identifiers = $this->getIdentifierIds();
00376 foreach($identifiers as $id)
00377 {
00378 $ide =& $this->getIdentifier($id);
00379 $ide->setExportMode($this->getExportMode());
00380 $ide->toXML($writer);
00381 $first = false;
00382 }
00383 if(!count($identifiers))
00384 {
00385 include_once 'Services/MetaData/classes/class.ilMDIdentifier.php';
00386 $ide = new ilMDIdentifier($this->getRBACId(),$this->getObjId());
00387 $ide->setExportMode(true);
00388 $ide->toXML($writer,true);
00389 }
00390
00391
00392 $writer->xmlElement('Title',array('Language' => $this->getTitleLanguageCode() ?
00393 $this->getTitleLanguageCode() :
00394 'en'),
00395 $this->getTitle());
00396
00397
00398 $languages = $this->getLanguageIds();
00399 foreach($languages as $id)
00400 {
00401 $lan =& $this->getLanguage($id);
00402 $lan->toXML($writer);
00403 }
00404 if(!count($languages))
00405 {
00406
00407 include_once 'Services/MetaData/classes/class.ilMDLanguage.php';
00408 $lan = new ilMDLanguage($this->getRBACId(),$this->getObjId());
00409 $lan->toXML($writer);
00410 }
00411
00412
00413 $descriptions = $this->getDescriptionIds();
00414 foreach($descriptions as $id)
00415 {
00416 $des =& $this->getDescription($id);
00417 $des->toXML($writer);
00418 }
00419 if(!count($descriptions))
00420 {
00421
00422 include_once 'Services/MetaData/classes/class.ilMDDescription.php';
00423 $des = new ilMDDescription($this->getRBACId(),$this->getObjId());
00424 $des->toXML($writer);
00425 }
00426
00427
00428
00429 $keywords = $this->getKeywordIds();
00430 foreach($keywords as $id)
00431 {
00432 $key =& $this->getKeyword($id);
00433 $key->toXML($writer);
00434 }
00435 if(!count($keywords))
00436 {
00437
00438 include_once 'Services/MetaData/classes/class.ilMDKeyword.php';
00439 $key = new ilMDKeyword($this->getRBACId(),$this->getObjId());
00440 $key->toXML($writer);
00441 }
00442
00443
00444 if(strlen($this->getCoverage()))
00445 {
00446 $writer->xmlElement('Coverage',array('Language' => $this->getCoverageLanguageCode() ?
00447 $this->getCoverageLanguageCode() :
00448 'en'),
00449 $this->getCoverage());
00450 }
00451 $writer->xmlEndTag('General');
00452 }
00453
00454
00455
00456
00457 function _getId($a_rbac_id,$a_obj_id)
00458 {
00459 global $ilDB;
00460
00461 $query = "SELECT meta_general_id FROM il_meta_general ".
00462 "WHERE rbac_id = '".$a_rbac_id."' ".
00463 "AND obj_id = '".$a_obj_id."' ";
00464
00465
00466 $res = $ilDB->query($query);
00467 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00468 {
00469 return $row->meta_general_id;
00470 }
00471 return false;
00472 }
00473 }
00474 ?>