19declare(strict_types=1);
31 protected ?
int $mid =
null;
41 public function __construct(
int $a_id = 0,
bool $a_call_by_reference =
true)
47 $this->
logger = $DIC->logger()->wsrv();
90 return parent::beforeCreate();
117 $this->organization = $a_organization;
125 return $this->organization ??
'';
133 return $this->local_information ??
'';
143 $this->local_information = $a_info;
171 $this->remote_link = $a_link;
194 $ecs_user_data =
$user->toGET($setting);
195 $this->
logger->info(__METHOD__ .
': Using ecs user data ' . $ecs_user_data);
199 if (!$part->isTokenEnabled()) {
204 $ecs_url_hash =
'ecs_hash_url=' . urlencode(
$server->getServerURI() .
'/sys/auths/' .
$auth_hash);
207 $link = $this->
getRemoteLink() .
'&ecs_hash=' . $auth_hash . $ecs_user_data .
'&' . $ecs_url_hash;
209 $link = $this->
getRemoteLink() .
'?ecs_hash=' . $auth_hash . $ecs_user_data .
'&' . $ecs_url_hash;
211 $this->
logger->info(__METHOD__ .
': ECS full link: ' . $link);
226 $auth->setPid($import_info->getMID());
229 $realm = sha1($a_plain_realm);
230 $this->
logger->info(__METHOD__ .
': Using realm ' . $a_plain_realm);
231 $auth->setRealm($realm);
232 $this->
logger->info(__METHOD__ .
' Mid is ' . $this->
getMID());
234 $this->auth_hash = $connector->addAuth(json_encode($auth, JSON_THROW_ON_ERROR), $this->
getMID());
237 $this->
logger->info(__METHOD__ .
': Caught error from ECS Auth resource: ' . $exc->getMessage());
242 protected function doCreate(
bool $clone_mode =
false): void
245 "obj_id" => array(
"integer", $this->
getId()),
246 "local_information" => array(
"text",
""),
247 "remote_link" => array(
"text",
""),
248 "mid" => array(
"integer", 0),
249 "organization" => array(
"text",
"")
272 "mid" => array(
"integer", $this->
getMID()),
278 $where = array(
"obj_id" => array(
"integer", $this->
getId()));
280 $this->db->update($this->
getTableName(), $fields, $where);
299 " WHERE obj_id = " . $this->db->quote($this->
getId(),
'integer') .
" ";
300 $this->db->manipulate($query);
306 " WHERE obj_id = " . $this->db->quote($this->
getId(),
'integer') .
" ";
307 $res = $this->db->query($query);
309 if (!is_null($row->local_information)) {
312 if (!is_null($row->remote_link)) {
315 $this->
setMID((
int) $row->mid);
316 if (!is_null($row->organization)) {
340 $this->log->info(
"Done calling create, creating reference");
343 $this->log->info(
"Done creating reference, setting permissions");
345 $this->log->info(
"Done setting permissions, putting object in tree");
358 $this->log->info(
"Done putting object in tree, updateing object");
370 $this->
logger->info(
'updateFromECSContent: ' . print_r($a_ecs_content,
true));
373 $organisation =
null;
376 ->getParticipantNameByMid($a_owner);
377 $this->
logger->info(
'found organisation: ' . $organisation);
382 $this->
setTitle($a_ecs_content->title);
386 $this->
logger->info(
'updateCustomFromECSContent');
391 $this->
logger->info(
'ilObject->update()');
415 $this->
logger->info(
"importing metadata from json: " . print_r($a_json,
true));
419 foreach ($values_records as $values_record) {
421 $values_record->read();
426 foreach ($a_definition as
$id =>
$type) {
427 if (is_array(
$type)) {
434 if ($field = $mappings->getMappingByECSName($a_mapping_mode,
$id)) {
437 foreach ($values_records as $values_record) {
438 $adv_md_defs = $values_record->getDefinitions();
439 if (isset($adv_md_defs[$field])) {
440 $adv_md_def = $adv_md_defs[$field];
447 if (property_exists($a_json, $target)){
448 $raw_value = $a_json->{$target};
454 if (!is_object($timePlace)) {
456 if (is_object($raw_value)) {
457 $timePlace->loadFromJSON($raw_value);
460 $raw_value = $timePlace;
462 if (is_string($raw_value) && $adv_md_def->importFromECS((
string)
$type, (
string) $raw_value,
$id)) {
469 foreach ($values_records as $values_record) {
470 $additional = array();
471 foreach ($values_record->getADTGroup()->getElements() as $element_id => $element) {
472 if (!$element->isNull()) {
473 $additional[$element_id] = array(
"disabled" => array(
"integer", 1));
476 $values_record->write($additional);
514 return $this->handleUpdate($a_server, $a_econtent_id, $a_mids);
528 $this->getECSObjectType()
531 $this->handleDelete($a_server, $a_econtent_id);
532 $this->
logger->info(__METHOD__ .
': Handling delete of deprecated remote object. DONE');
536 $this->
logger->info(__METHOD__ .
': Receivers are ' . print_r($details->getReceivers(),
true));
537 $this->
logger->info(__METHOD__ .
': Senders are ' . print_r($details->getSenders(),
true));
541 $this->
logger->info(
'Ignoring disabled participant. MID: ' . $details->getOwner());
546 foreach (array_intersect($a_mids, $details->getReceivers()) as $mid) {
549 $res = $connector->getResource($this->getECSObjectType(), $a_econtent_id);
553 $json =
$res->getResult();
554 $this->
logger->info(__METHOD__ .
': Received json: ' . print_r($json,
true));
555 if (!is_object($json)) {
558 if (!is_object($json)) {
563 $this->
logger->error(__METHOD__ .
': Error parsing result. ' . $exc->getMessage());
572 $this->
logger->info(__METHOD__ .
': Handling update for existing object');
574 if (!$remote instanceof
self) {
575 $this->
logger->info(__METHOD__ .
': Cannot instantiate remote object. Got object type ' . $remote->getType());
578 $remote->updateFromECSContent($a_server, $json, $details->getMySender());
580 $this->
logger->info(__METHOD__ .
': my sender ' . $details->getMySender() .
'vs mid' . $mid);
582 $this->
logger->info(__METHOD__ .
': Handling create for non existing object');
583 $this->createFromECSEContent($a_server, $json, $details->getMySender());
586 $this->
logger->info(__METHOD__ .
': Updating import status');
588 $import->setEContentId((
string) $a_econtent_id);
590 $import->setMID($mid);
593 $this->
logger->info(__METHOD__ .
': Sending notification');
594 $this->sendNewContentNotification($a_server->
getServerId());
598 $this->
logger->info(__METHOD__ .
': done');
608 if (!count($settings->getEContentRecipients())) {
613 $lang->loadLanguageModule(
'ecs');
615 $mail =
new ilMail(self::MAIL_SENDER);
616 $message =
$lang->txt(
'ecs_' . $this->getType() .
'_created_body_a') .
"\n\n";
618 if ($desc = ($this->getDescription() !==
'')) {
623 $message .=
$lang->txt(
"perma_link") .
': ' . $href .
"\n\n";
627 $settings->getEContentRecipientsAsString(),
630 $lang->txt(
'ecs_new_econtent_subject'),
646 $this->
logger->info(__METHOD__ .
': Received obj_ids ' . print_r($obj_ids,
true));
648 foreach ($obj_ids as $obj_id) {
650 foreach ($references as
$ref_id) {
652 $this->
logger->info(__METHOD__ .
': Deleting obsolete remote course: ' . $tmp_obj->getTitle());
653 $this->
logger->info(print_r($this->tree->getNodeData(
$ref_id),
true));
654 $this->
logger->info(print_r($this->tree->getNodeData($tmp_obj->getId()),
true));
655 $this->tree->deleteTree($this->tree->getNodeData(
$ref_id));
671 $connector->addHeader(
'X-EcsQueryStrings', $a_sender_only ?
'sender=true' :
'all=true');
672 $list = $connector->getResourceList($this->getECSObjectType());
674 return $list->getResult()->getLinkIds();
677 $this->
logger->error(__METHOD__ .
': Error getting resource list for type . ' . $this->getECSObjectType() .
' with message: ' . $exc->getMessage());
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
static getInstancesForObjectId(int $a_obj_id, ?string $a_obj_type=null, string $a_sub_type="-", int $a_sub_id=0)
static handleUpdate(int $a_obj_id, int $a_server_id, array $a_matchable_content)
Handle update of ecs content and create references.
static getMatchingCategory(int $a_server_id, array $a_matchable_content)
get matching category
const HTTP_CODE_NOT_FOUND
static getInstanceByServerId(int $a_server_id)
Get singleton instance.
Presentation of ecs content details (http://...campusconnect/courselinks/id/details)
static getInstanceFromServer(int $a_server_id, int $a_econtent_id, string $a_resource_type)
Get data from server.
const TYPE_REMOTE_GLOSSARY
const TYPE_REMOTE_LEARNING_MODULE
const TYPE_REMOTE_CATEGORY
static getInstance()
Get the singelton instance of this ilECSExportManager.
static getInstance()
Get the singleton instance of this ilECSImportManager.
Storage of ECS imported objects.
static getInstance(int $a_server_id, int $mid)
Get instance by server id and mid.
static getInstanceByServerId(int $a_server_id)
Get instance by server id.
getServerId()
Get current server id.
static getInstanceByServerId(int $a_server_id)
Get singleton instance per server.
getImportId()
get import id
Representation of ECS EContent Time Place.
Stores relevant user data.
static getMatchableContent(string $a_resource_id, int $a_server_id, object $a_ecs_content, int $a_owner)
Convert ECS content to rule matchable values.
static _getLanguage(string $a_lang_key='')
Get language object.
static _getStaticLink(?int $a_ref_id, string $a_type='', bool $a_fallback_goto=true, string $append="")
Component logger with individual log levels by component id.
static _getAutoGeneratedMessageString(?ilLanguage $lang=null)
Remote category app class.
Remote glossary app class.
Remote learning module app class.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getInstanceByRefId(int $ref_id, bool $stop_on_error=true)
get an instance of an Ilias object by reference id
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
setPermissions(int $parent_ref_id)
createReference()
creates reference for object
putInTree(int $parent_ref_id)
maybe this method should be in tree object!?
static _getAllReferences(int $id)
get all reference ids for object ID
create()
note: title, description and type should be set when this function is called
setDescription(string $description)
Remote object app base class.
updateCustomFromECSContent(ilECSSetting $a_server, $ecs_content)
update remote object settings from ecs content
doUpdateCustomFields(array &$a_fields)
Add custom fields to db update.
setMID(int $a_mid)
set mid
static getInstanceByEventType(string $a_type)
Get instance by ilECSEvent(QueueReader) type.
createAuthResource(string $a_plain_realm)
create authentication resource on ecs server
getOrganization()
get organization
handleUpdate(ilECSSetting $a_server, int $a_econtent_id, array $a_mids)
Handle update event.
setRemoteLink(string $a_link)
set remote link
getTableName()
Get db table name.
handleCreate(ilECSSetting $a_server, int $a_econtent_id, array $a_mids)
Handle creation.
getLocalInformation()
get local information
setLocalInformation(string $a_info)
set local information
__construct(int $a_id=0, bool $a_call_by_reference=true)
Constructor.
doCreate(bool $clone_mode=false)
getRemoteLink()
get remote link
createFromECSEContent(ilECSSetting $a_server, object $a_ecs_content, int $a_owner)
create remote object from ECSContent object
doUpdate()
Update remote object.
isLocalObject()
Is remote object from same installation?
getFullRemoteLink()
get full remote link Including ecs generated hash and auth mode
doDelete()
Delete remote object.
importMetadataFromJson(object $a_json, ilECSSetting $a_server, array $a_definition, int $a_mapping_mode)
Add advanced metadata to json (export)
doReadCustomFields(object $a_row)
Read custom fields from db row.
updateFromECSContent(ilECSSetting $a_server, object $a_ecs_content, int $a_owner)
update remote object settings from ecs content
getRealmPlain()
Get realm plain.
setOrganization(string $a_organization)
set organization
string $local_information
getECSObjectType()
Get ECS resource identifier, e.g.
handleDelete(ilECSSetting $a_server, int $a_econtent_id, $a_mid=0)
Handle delete event.
getAllResourceIds(ilECSSetting $a_server, bool $a_sender_only=false)
Get all available resources.
beforeCreate()
If overwritten this method should return true, there is currently no "abort" handling for cases where...
sendNewContentNotification($a_server_id)
send notifications about new EContent
doCreateCustomFields(array &$a_fields)
Add custom fields to db insert.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc