diff --git a/core/asynctask/AsyncSendNewsroom.php b/core/asynctask/AsyncSendNewsroom.php new file mode 100644 index 0000000000..0b2d93525f --- /dev/null +++ b/core/asynctask/AsyncSendNewsroom.php @@ -0,0 +1,85 @@ + "core/cmdb", + "key_type" => "autoincrement", + "name_attcode" => "created", + "state_attcode" => "", + "reconc_keys" => array(), + "db_table" => "priv_async_send_newsroom", + "db_key_field" => "id", + "db_finalclass_field" => "", + ); + MetaModel::Init_Params($aParams); + MetaModel::Init_InheritAttributes(); + + MetaModel::Init_AddAttribute(new AttributeText("recipients", array("allowed_values" => null, "sql" => "recipients", "default_value" => null, "is_null_allowed" => false, "depends_on" => array()))); + MetaModel::Init_AddAttribute(new AttributeExternalKey("action_id", array("targetclass" => "Action", "allowed_values" => null, "sql" => "action_id", "default_value" => null, "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array()))); + MetaModel::Init_AddAttribute(new AttributeExternalKey("trigger_id", array("targetclass" => "Trigger", "allowed_values" => null, "sql" => "trigger_id", "default_value" => null, "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array()))); + MetaModel::Init_AddAttribute(new AttributeText("title", array("allowed_values" => null, "sql" => "title", "default_value" => null, "is_null_allowed" => false, "depends_on" => array()))); + MetaModel::Init_AddAttribute(new AttributeText("message", array("allowed_values" => null, "sql" => "message", "default_value" => null, "is_null_allowed" => false, "depends_on" => array()))); + MetaModel::Init_AddAttribute(new AttributeInteger("object_id", array("allowed_values" => null, "sql" => "object_id", "default_value" => null, "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array()))); + MetaModel::Init_AddAttribute(new AttributeString("object_class", array("allowed_values" => null, "sql" => "object_class", "default_value" => null, "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array()))); + MetaModel::Init_AddAttribute(new AttributeText("url", array("allowed_values" => null, "sql" => "url", "default_value" => null, "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array()))); + MetaModel::Init_AddAttribute(new AttributeDateTime("date", array("allowed_values" => null, "sql" => "date", "default_value" => 'NOW()', "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array()))); + + } + + /** + * @throws \ArchivedObjectException + * @throws \CoreCannotSaveObjectException + * @throws \CoreException + * @throws \CoreUnexpectedValue + * @throws \CoreWarning + * @throws \MySQLException + * @throws \OQLException + */ + public static function AddToQueue(int $iActionId, int $iTriggerId, array $aRecipients, string $sMessage, string $sTitle, string $sUrl, int $iObjectId, ?string $sObjectClass): void + { + $oNew = new static(); + $oNew->Set('action_id', $iActionId); + $oNew->Set('trigger_id', $iTriggerId); + $oNew->Set('recipients', json_encode($aRecipients)); + $oNew->Set('message', $sMessage); + $oNew->Set('title', $sTitle); + $oNew->Set('url', $sUrl); + $oNew->Set('object_id', $iObjectId); + $oNew->Set('object_class', $sObjectClass); + $oNew->SetCurrentDate('date'); + + $oNew->DBInsert(); + } + + /** + * @inheritDoc + */ + public function DoProcess() + { + $oAction = MetaModel::GetObject('Action', $this->Get('action_id')); + $iTriggerId = $this->Get('trigger_id'); + $aRecipients = json_decode($this->Get('recipients')); + $sMessage = $this->Get('message'); + $sTitle = $this->Get('title'); + $sUrl = $this->Get('url'); + $iObjectId = $this->Get('object_id'); + $sObjectClass = $this->Get('object_class'); + $sDate = $this->Get('date'); + + foreach ($aRecipients as $iRecipientId) { + $oEvent = \Combodo\iTop\Service\Notification\Event\EventNotificationNewsroomService::MakeEventFromAction($oAction, $iRecipientId, $iTriggerId, $sMessage, $sTitle, $sUrl, $iObjectId, $sObjectClass, $sDate); + $oEvent->DBInsertNoReload(); + } + + return "Sent"; + } +} \ No newline at end of file