ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilECSObjectSettings.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4
13abstract class ilECSObjectSettings
14{
18 protected $content_obj; // [ilObj]
19
23 private $logger = null;
24
25 const MAIL_SENDER = 6;
26
32 public function __construct(ilObject $a_content_object)
33 {
34 $this->logger = $GLOBALS['DIC']->logger()->obj();
35 $this->content_obj = $a_content_object;
36 }
37
44 public static function getInstanceByObject(ilObject $a_content_obj)
45 {
46 switch($a_content_obj->getType())
47 {
48 case 'crs':
49 include_once 'Modules/Course/classes/class.ilECSCourseSettings.php';
50 return new ilECSCourseSettings($a_content_obj);
51
52 case 'cat':
53 include_once 'Modules/Category/classes/class.ilECSCategorySettings.php';
54 return new ilECSCategorySettings($a_content_obj);
55
56 case 'file':
57 include_once 'Modules/File/classes/class.ilECSFileSettings.php';
58 return new ilECSFileSettings($a_content_obj);
59
60 case 'glo':
61 include_once 'Modules/Glossary/classes/class.ilECSGlossarySettings.php';
62 return new ilECSGlossarySettings($a_content_obj);
63
64 case 'grp':
65 include_once 'Modules/Group/classes/class.ilECSGroupSettings.php';
66 return new ilECSGroupSettings($a_content_obj);
67
68 case 'lm':
69 include_once 'Modules/LearningModule/classes/class.ilECSLearningModuleSettings.php';
70 return new ilECSLearningModuleSettings($a_content_obj);
71
72 case 'wiki':
73 include_once 'Modules/Wiki/classes/class.ilECSWikiSettings.php';
74 return new ilECSWikiSettings($a_content_obj);
75 }
76 }
77
82 public function getContentObject()
83 {
84 return $this->content_obj;
85 }
86
92 abstract protected function getECSObjectType();
93
99 protected function isActive()
100 {
101 include_once('./Services/WebServices/ECS/classes/class.ilECSServerSettings.php');
102 if(ilECSServerSettings::getInstance()->activeServerExists())
103 {
104 // imported objects cannot be exported => why not
105 #include_once('./Services/WebServices/ECS/classes/class.ilECSImport.php');
106 #if(!ilECSImport::lookupServerId($this->content_obj->getId()))
107 {
108 return true;
109 }
110 }
111
112 return false;
113 }
114
123 {
124 global $lng;
125
126 $this->logger->debug('Show ecs settings.');
127 if(!$this->isActive($a_type))
128 {
129 $this->logger->debug('Object type is not active. => no settings.');
130 return;
131 }
132
133 $obj_id = $this->content_obj->getId();
134
135 // Return if no participant is enabled for export and the current object is not released
136 include_once './Services/WebServices/ECS/classes/class.ilECSExport.php';
137 include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSettings.php';
138
139 if(!$this->getContentObject()->withReferences())
140 {
141 $this->logger->debug('Called withot references. => no settings.');
142 return TRUE;
143 }
144
146 if(!$exportablePart and !ilECSExport::_isExported($obj_id))
147 {
148 $this->logger->debug('Object type is not exportable. => no settings.');
149 return true;
150 }
151 if(
152 $GLOBALS['tree']->checkForParentType($GLOBALS['tree']->getParentId($this->getContentObject()->getRefId()),'crs',false) or
153 $GLOBALS['tree']->checkForParentType($GLOBALS['tree']->getParentId($this->getContentObject()->getRefId()),'grp',false)
154 )
155 {
156 $this->logger->debug('Parent crs/grp in path. => no settings.');
157 return true;
158 }
159
160 $lng->loadLanguageModule('ecs');
161
162 // show ecs property form section
163 $ecs = new ilFormSectionHeaderGUI();
164 $ecs->setTitle($lng->txt('ecs_'.$a_type.'_export'));
165 $a_form->addItem($ecs);
166
167
168 // release or not
169 $exp = new ilRadioGroupInputGUI($lng->txt('ecs_'.$a_type.'_export_obj_settings'),'ecs_export');
170 $exp->setRequired(true);
171 $exp->setValue(ilECSExport::_isExported($obj_id) ? 1 : 0);
172 $off = new ilRadioOption($lng->txt('ecs_'.$a_type.'_export_disabled'),0);
173 $exp->addOption($off);
174 $on = new ilRadioOption($lng->txt('ecs_'.$a_type.'_export_enabled'),1);
175 $exp->addOption($on);
176 $a_form->addItem($exp);
177
178 // Show all exportable participants
179 $publish_for = new ilCheckboxGroupInputGUI($lng->txt('ecs_publish_for'),'ecs_sid');
180
181 // @TODO: Active checkboxes for recipients
182 //$publish_for->setValue((array) $members);
183
184 // Read receivers
185 $receivers = array();
186 include_once('./Services/WebServices/ECS/classes/class.ilECSEContentDetails.php');
187 foreach(ilECSExport::getExportServerIds($obj_id) as $sid)
188 {
189 $exp = new ilECSExport($sid, $obj_id);
190
191 $participants = null;
192 $details = ilECSEContentDetails::getInstance($sid, $exp->getEContentId(),
193 $this->getECSObjectType());
194 if($details instanceof ilECSEContentDetails)
195 {
196 $participants = $details->getReceivers();
197 }
198 if($participants)
199 {
200 foreach($participants as $mid)
201 {
202 $receivers[] = $sid.'_'.$mid;
203 }
204 }
205 }
206 $publish_for->setValue($receivers);
207
208 foreach($exportablePart as $pInfo)
209 {
210 include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSetting.php';
211 $partSetting = new ilECSParticipantSetting($pInfo['sid'], $pInfo['mid']);
212
213 $com = new ilCheckboxInputGUI(
214 $partSetting->getCommunityName().': '.$partSetting->getTitle(),
215 'sid_mid'
216 );
217 $com->setValue($pInfo['sid'].'_'.$pInfo['mid']);
218 $publish_for->addOption($com);
219 }
220 $on->addSubItem($publish_for);
221 return true;
222 }
223
232 public function handleSettingsUpdate()
233 {
234 if(!$this->isActive())
235 {
236 return true;
237 }
238
239 // Parse post data
240 $mids = array();
241 foreach((array) $_POST['ecs_sid'] as $sid_mid)
242 {
243 $tmp = explode('_',$sid_mid);
244 $mids[$tmp[0]][] = $tmp[1];
245 }
246
247 try
248 {
249 include_once './Services/WebServices/ECS/classes/class.ilECSCommunitiesCache.php';
250 include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSettings.php';
251 include_once './Services/WebServices/ECS/classes/class.ilECSSetting.php';
252
253 // Update for each server
254 foreach(ilECSParticipantSettings::getExportServers() as $server_id)
255 {
257 if($server->isEnabled())
258 {
259 // Export
260 $export = true;
261 if(!$_POST['ecs_export'])
262 {
263 $export = false;
264 }
265 if(!count($mids[$server_id]))
266 {
267 $export = false;
268 }
270 $server,
271 $export,
272 $mids[$server_id]
273 );
274 }
275 }
276 }
277 catch(ilECSConnectorException $exc)
278 {
279 ilUtil::sendFailure('Error exporting to ECS server: '.$exc->getMessage());
280 return false;
281 }
282 return true;
283 }
284
293 protected function handleSettingsForServer(ilECSSetting $a_server,$a_export,$a_mids)
294 {
295 try
296 {
297 include_once('./Services/WebServices/ECS/classes/class.ilECSExport.php');
298 $export_settings = new ilECSExport($a_server->getServerId(), $this->content_obj->getId());
299
300 // already exported?
301 if($export_settings->isExported())
302 {
303 // still exportable: update ecs
304 if((bool)$a_export)
305 {
306 $this->doUpdate($a_server, $export_settings, $a_mids);
307 }
308 // not exportable anymore
309 else
310 {
311 $this->doDelete($a_server, $export_settings);
312 }
313 }
314 // not exported yet
315 else
316 {
317 // now to be exported
318 if($a_export)
319 {
320 $this->doAdd($a_server, $export_settings, $a_mids);
321 }
322 // was not and will not be exported
323 else
324 {
325
326 }
327 }
328 }
329 catch(ilECSConnectorException $exc)
330 {
331 throw $exc;
332 }
333 }
334
342 public function handleContentUpdate()
343 {
344 global $ilLog;
345
346 if(!$this->isActive())
347 {
348 return true;
349 }
350
351 include_once './Services/WebServices/ECS/classes/class.ilECSExport.php';
352 $export_servers = ilECSExport::getExportServerIds($this->content_obj->getId());
353 foreach($export_servers as $server_id)
354 {
355 include_once './Services/WebServices/ECS/classes/class.ilECSSetting.php';
357 if($server->isEnabled())
358 {
359 try
360 {
361 include_once('./Services/WebServices/ECS/classes/class.ilECSExport.php');
362 $export_settings = new ilECSExport($server_id, $this->content_obj->getId());
363
364 // already exported, update ecs
365 if($export_settings->isExported())
366 {
367 $this->doUpdate($server, $export_settings);
368 }
369 // not exported yet, nothing to do
370 else
371 {
372
373 }
374 }
375 catch(ilECSConnectorException $exc)
376 {
377 $ilLog->write(__METHOD__.': Cannot handle ECS content update. '.$exc->getMessage());
378 return false;
379 }
380 }
381 }
382 return true;
383 }
384
392 protected function doAdd(ilECSSetting $a_server, ilECSExport $a_export_settings, array $a_mids)
393 {
394 global $ilLog;
395
396 $ilLog->write(__METHOD__.': Starting ECS add resource...');
397
398 $json = $this->buildJson($a_server);
399
400 include_once 'Services/WebServices/ECS/classes/class.ilECSConnector.php';
401 $connector = new ilECSConnector($a_server);
402 $connector->addHeader(ilECSConnector::HEADER_MEMBERSHIPS, implode(',',$a_mids));
403 $econtent_id = $connector->addResource($this->getECSObjectType(),
404 json_encode($json));
405
406 // status changed
407 $a_export_settings->setExported(true);
408 $a_export_settings->setEContentId($econtent_id);
409 $a_export_settings->save();
410
411 $this->handlePermissionUpdate($a_server,true);
412
413 // Send mail
414 $this->sendNewContentNotification($a_server, $econtent_id);
415 }
416
425 protected function doUpdate(ilECSSetting $a_server, ilECSExport $a_export_settings, array $a_mids = null)
426 {
427 global $ilLog;
428
429 include_once 'Services/WebServices/ECS/classes/class.ilECSConnector.php';
430
431 $econtent_id = $a_export_settings->getEContentId();
432 if(!$econtent_id)
433 {
434 $ilLog->write(__METHOD__.': Missing eid. Aborting.');
435 throw new ilECSConnectorException('Missing ECS content ID. Aborting.');
436 }
437 $connector = new ilECSConnector($a_server);
438
439 if(!$a_mids)
440 {
441 $a_mids = $this->getParticipants($a_server->getServerId(), $econtent_id);
442 }
443 $ilLog->write(__METHOD__.': Start updating ECS content - '.print_r($a_mids,true));
444 $connector->addHeader(ilECSConnector::HEADER_MEMBERSHIPS,implode(',',(array) $a_mids));
445
446 $json = $this->buildJson($a_server);
447 $connector->updateResource($this->getECSObjectType(),
448 $econtent_id, json_encode($json));
449
450 $this->handlePermissionUpdate($a_server,true);
451 }
452
461 public function doDelete(ilECSSetting $a_server, ilECSExport $a_export_settings)
462 {
463 global $ilLog;
464
465 // already exported?
466 if($a_export_settings->isExported())
467 {
468 include_once './Services/WebServices/ECS/classes/class.ilECSSetting.php';
469 include_once './Services/WebServices/ECS/classes/class.ilECSConnector.php';
470
471 $econtent_id = $a_export_settings->getEContentId();
472 if(!$econtent_id)
473 {
474 $ilLog->write(__METHOD__.': Missing eid. Aborting.');
475 throw new ilECSConnectorException('Missing ECS content ID. Aborting.');
476 }
477 $connector = new ilECSConnector($a_server);
478
479 $ilLog->write(__METHOD__.': Start deleting ECS content...');
480 $connector->deleteResource($this->getECSObjectType(),
481 $econtent_id);
482
483 // status changed
484 $a_export_settings->setExported(false);
485 $a_export_settings->save();
486 }
487 }
488
496 public static function _handleDelete(array $a_subbtree_nodes)
497 {
498 // active?
499 include_once './Services/WebServices/ECS/classes/class.ilECSServerSettings.php';
500 if(!ilECSServerSettings::getInstance()->activeServerExists())
501 {
502 return;
503 }
504
505 include_once './Services/WebServices/ECS/classes/class.ilECSSetting.php';
506 include_once './Services/WebServices/ECS/classes/class.ilECSExport.php' ;
507 $exported = ilECSExport::getExportedIds();
508 foreach($a_subbtree_nodes as $node)
509 {
510 if(in_array($node['obj_id'],$exported))
511 {
512 if($content_obj = ilObjectFactory::getInstanceByRefId($node['child'],false))
513 {
515
516 // Read export server ids
517 foreach(ilECSExport::getExportServerIds($node['obj_id']) as $sid)
518 {
520 $export_settings = new ilECSExport($sid, $content_obj->getId());
521 $settings->doDelete($server, $export_settings);
522 }
523 }
524 }
525 }
526 }
527
535 protected function getParticipants($a_server_id, $a_econtent_id)
536 {
537 $receivers = array();
538 include_once('./Services/WebServices/ECS/classes/class.ilECSEContentDetails.php');
539 foreach((array) $a_server_id as $sid)
540 {
541 $participants = null;
542 $details = ilECSEContentDetails::getInstance($sid, $a_econtent_id,$this->getECSObjectType());
543 if($details instanceof ilECSEContentDetails)
544 {
545 $participants = $details->getReceivers();
546 }
547 if($participants)
548 {
549 foreach($participants as $mid)
550 {
551 $receivers[] = $mid;
552 }
553 }
554 }
555 return (array) $receivers;
556 }
557
563 protected function sendNewContentNotification(ilECSSetting $a_server, $a_econtent_id)
564 {
565 global $ilLog;
566
567 if(!count($rcps = $a_server->getApprovalRecipients()))
568 {
569 return true;
570 }
571
572 include_once('./Services/Mail/classes/class.ilMail.php');
573 include_once('./Services/Language/classes/class.ilLanguageFactory.php');
574
576 $lang->loadLanguageModule('ecs');
577
578 // @TODO: read mail
579 $mail = new ilMail(self::MAIL_SENDER);
580 $message = $lang->txt('ecs_export_created_body_a')."\n\n";
581 $message .= $lang->txt('title').': '.$this->content_obj->getTitle()."\n";
582 if(strlen($desc = $this->content_obj->getDescription()))
583 {
584 $message .= $lang->txt('desc').': '.$desc."\n";
585 }
586
587 // Participant info
588 $message .= ("\n".$lang->txt('ecs_published_for'));
589
590 try
591 {
592 $found = false;
593
594 $receivers = null;
595 include_once('./Services/WebServices/ECS/classes/class.ilECSEContentDetails.php');
596 $details = ilECSEContentDetails::getInstance($a_server->getServerId(),
597 $a_econtent_id, $this->getECSObjectType());
598 if($details instanceof ilECSEContentDetails)
599 {
600 $receivers = $details->getReceivers();
601 }
602 if($receivers)
603 {
604 foreach($receivers as $member)
605 {
606 $found = true;
607
608 include_once './Services/WebServices/ECS/classes/class.ilECSCommunityReader.php';
609 $part = ilECSCommunityReader::getInstanceByServerId($a_server->getServerId())->getParticipantByMID($member);
610
611 $message .= ("\n\n".$part->getParticipantName()."\n");
612 $message .= ($part->getDescription());
613 }
614 }
615 if($found)
616 {
617 $message .= "\n\n";
618 }
619 else
620 {
621 $message .= (' '.$lang->txt('ecs_not_published')."\n\n");
622 }
623 }
625 {
626 $ilLog->write(__METHOD__.': Cannot read approvements.');
627 return false;
628 }
629
630 include_once('./Services/Link/classes/class.ilLink.php');
631 $href = ilLink::_getStaticLink($this->content_obj->getRefId(),'crs',true);
632 $message .= $lang->txt("perma_link").': '.$href."\n\n";
633 $message .= ilMail::_getAutoGeneratedMessageString();
634
635 $mail->sendMail($a_server->getApprovalRecipientsAsString(),
636 '','',
637 $lang->txt('ecs_new_approval_subject'),
638 $message,array(),array('normal'));
639
640 return true;
641 }
642
648 {
649 if(
650 ($this->content_obj->getType() == 'crs') ||
651 ($this->content_obj->getType() == 'grp')
652 )
653 {
654 $GLOBALS['ilLog']->write(__METHOD__.': Permission update for courses/groups');
655 $GLOBALS['rbacadmin']->grantPermission(
656 $server->getGlobalRole(),
657 ilRbacReview::_getOperationIdsByName(array('join','visible')),
658 $this->content_obj->getRefId()
659 );
660 }
661 }
662
669 protected function getJsonCore($a_etype)
670 {
671 $json = new stdClass();
672 $json->lang = 'en_EN'; // :TODO: obsolet?
673 $json->id = 'il_'.IL_INST_ID.'_'.$this->getContentObject()->getType().'_'.$this->getContentObject()->getId();
674 $json->etype = $a_etype;
675 $json->title = $this->content_obj->getTitle();
676 $json->abstract = $this->content_obj->getLongDescription();
677
678 include_once('./Services/Link/classes/class.ilLink.php');
679 $json->url = ilLink::_getLink($this->content_obj->getRefId(),$this->content_obj->getType());
680
681 return $json;
682 }
683
691 protected function addMetadataToJson(&$a_json, ilECSSetting $a_server, array $a_definition)
692 {
693 include_once('./Services/WebServices/ECS/classes/class.ilECSDataMappingSettings.php');
694 include_once('./Services/AdvancedMetaData/classes/class.ilAdvancedMDValues.php');
695 include_once('./Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php');
697
698 include_once "Services/WebServices/ECS/classes/class.ilECSUtils.php";
699 $values = ilECSUtils::getAdvancedMDValuesForObjId($this->content_obj->getId());
700
701 foreach($a_definition as $id => $type)
702 {
703 if(is_array($type))
704 {
705 $target = $type[1];
706 $type = $type[0];
707 }
708 else
709 {
710 $target = $id;
711 }
712
713 if($field = $mappings->getMappingByECSName(ilECSDataMappingSetting::MAPPING_EXPORT, $id))
714 {
715 $value = isset($values[$field]) ? $values[$field] : '';
716
717 switch($type)
718 {
720 $a_json->$target = explode(',', $value);
721 break;
722
724 $a_json->$target = (int)$value;
725 break;
726
728 $a_json->$target = (string)$value;
729 break;
730
732 if(!isset($a_json->$target))
733 {
734 include_once('./Services/WebServices/ECS/classes/class.ilECSTimePlace.php');
735 $a_json->$target = new ilECSTimePlace();
736 }
737 $a_json->$target->{'set'.ucfirst($id)}($value);
738 break;
739 }
740 }
741 }
742 }
743
750 abstract protected function buildJson(ilECSSetting $a_server);
751}
752
753?>
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
This class represents a property in a property form.
This class represents a checkbox property in a property form.
Class ilECSCategorySettings.
static getInstanceByServerId($a_server_id)
Get instance by server id.
Class ilECSCourseSettings.
static getInstanceByServerId($a_server_id)
Get singleton instance.
Presentation of ecs content details (http://...campusconnect/courselinks/id/details)
static getInstance($a_server_id, $a_econtent_id, $a_resource_type)
Get data from server.
Storage of ECS exported objects.
getEContentId()
get econtent id
static getExportedIds()
Get exported ids @global ilDB $ilDB.
setExported($a_status)
Set exported.
isExported()
check if an object is exported or not
static _isExported($a_obj_id)
Check if object is exported.
static getExportServerIds($a_obj_id)
lookup server ids of exported materials @global ilDB $ilDB
setEContentId($a_id)
set econtent id
Class ilECSFileSettings.
Class ilECSGlossarySettings.
Class ilECSGroupSettings.
Class ilECSLearningModuleSettings.
Handles object exports to ECS.
getContentObject()
Get content object.
doUpdate(ilECSSetting $a_server, ilECSExport $a_export_settings, array $a_mids=null)
Update ECS resource.
static getInstanceByObject(ilObject $a_content_obj)
Get settings handler for repository object.
getJsonCore($a_etype)
Build core json structure.
sendNewContentNotification(ilECSSetting $a_server, $a_econtent_id)
send notifications about new EContent
isActive()
Is ECS (for current object) active?
static _handleDelete(array $a_subbtree_nodes)
addMetadataToJson(&$a_json, ilECSSetting $a_server, array $a_definition)
Add advanced metadata to json (export)
handlePermissionUpdate(ilECSSetting $server)
Handle permission update.
doAdd(ilECSSetting $a_server, ilECSExport $a_export_settings, array $a_mids)
Add resource to ECS.
addSettingsToForm(ilPropertyFormGUI $a_form, $a_type)
Fill ECS export settings "multiple servers".
handleSettingsUpdate()
Update ECS Export Settings.
getECSObjectType()
Get ECS resource identifier, e.g.
doDelete(ilECSSetting $a_server, ilECSExport $a_export_settings)
Delete ECS resource.
handleSettingsForServer(ilECSSetting $a_server, $a_export, $a_mids)
Save ECS settings (add- update- deleteResource)
getParticipants($a_server_id, $a_econtent_id)
Get participants for server and ecs resource.
buildJson(ilECSSetting $a_server)
Build resource-specific json.
handleContentUpdate()
Update ECS Content.
__construct(ilObject $a_content_object)
Constructor.
static getExportServers()
Get server ids which allow an export @global <type> $ilDB.
static getExportableParticipants($a_type)
Get participants which are enabled and export is allowed.
static getInstance()
Get singleton instance.
getServerId()
Get current server id.
getApprovalRecipientsAsString()
get approval recipients as string
getApprovalRecipients()
get approval recipients
static getInstanceByServerId($a_server_id)
Get singleton instance per server.
Representation of ECS EContent Time Place.
static getAdvancedMDValuesForObjId($a_obj_id)
Get advanced metadata values for object id.
const TYPE_TIMEPLACE
Class ilECSWikiSettings.
This class represents a section header in a property form.
static _getLanguage($a_lang_key='')
Get langauge object.
This class handles base functions for mail handling.
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
Class ilObject Basic functions for all objects.
getType()
get object type @access public
This class represents a property form user interface.
addItem($a_item)
Add Item (Property, SectionHeader).
This class represents a property in a property form.
This class represents an option in a radio group.
static _getOperationIdsByName($operations)
get ops_id's by name.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
$server
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
for($i=1; $i<=count($kw_cases_sel); $i+=1) $lang
Definition: langwiz.php:349
global $lng
Definition: privfeed.php:17
$a_type
Definition: workflow.php:93