/** * Get messages supported * * @param string $actor_guid Actor guid * @param bool $all All messages * @param null $evenement Event name * @param null $show_actif Show only active * * @return array */ function getMessagesSupported($actor_guid, $all = true, $evenement = null, $show_actif = null) { list($object_class, $object_id) = explode("-", $actor_guid); $family = array(); foreach ($this->getFamily() as $_message => $_root_class) { $root = new $_root_class(); foreach ($root->getEvenements() as $_evt => $_evt_class) { if ($evenement && $evenement != $_evt) { continue; } $message_supported = new CMessageSupported(); $message_supported->object_class = $object_class; $message_supported->object_id = $object_id; $message_supported->message = $_evt_class; if ($show_actif) { $message_supported->active = $show_actif; } $message_supported->loadMatchingObject(); if (!$message_supported->_id && !$all) { continue; } $message_supported->loadEventByName(); $message_supported->_data_format = $this; $this->_messages_supported_class[] = $message_supported->message; $family[$_root_class][] = $message_supported; } } return $family; }
/** * Get objects by events * * @param array $events Events name * @param CInteropReceiver $receiver receiver * * @return array Receivers supported */ static function getObjectsBySupportedEvents($events = array(), CInteropReceiver $receiver = null) { $receivers = array(); foreach ($events as $_event) { $msg_supported = new CMessageSupported(); $where = array(); $where["message"] = " = '{$_event}'"; $where["active"] = " = '1'"; $ljoin = array(); if ($receiver) { $table = $receiver->_spec->table; $ljoin[$table] = "{$table}.{$table}" . "_id" . " = message_supported.object_id"; $where["object_class"] = " = '{$receiver->_class}'"; if ($receiver->_id) { $where["object_id"] = " = '{$receiver->_id}'"; } $where["{$table}.actif"] = " = '1'"; } if (!$msg_supported->loadObject($where, null, null, $ljoin)) { $receivers[$_event] = null; return $receivers; } $messages = $msg_supported->loadList($where, "object_class", null, null, $ljoin); foreach ($messages as $_message) { /** @var CInteropReceiver $receiver */ $receiver = CMbObject::loadFromGuid("{$_message->object_class}-{$_message->object_id}"); if (!$receiver->actif) { continue; } $receiver->loadRefGroup(); $receiver->isReachable(); $receivers[$_event][] = $receiver; } } return $receivers; }
/** * Is that the message is supported by this actor * * @param string $message Message * * @return bool */ function isMessageSupported($message) { $msg_supported = new CMessageSupported(); $msg_supported->object_class = $this->_class; $msg_supported->object_id = $this->_id; $msg_supported->message = $message; $msg_supported->active = 1; return $msg_supported->countMatchingList() > 0; }