mirror of
https://github.com/snipe/snipe-it.git
synced 2024-12-25 05:34:06 -08:00
3f334406d1
* Always send checkin notifications to users This fixes the routing of the notifications, to only send „checkin“ emails if the „mail on checkin“ flag on the category was set. (and we checkout to a user with a non-empty email) * Fixes checkout notification routing Notifications to users should be send if the category of the resource (accessory/asset/consumable/license): a) requires the user to confirm acceptance b) should send notifications on checkin/checkout * adds a check for EULAs Adds back a check for the EULA, since the user should receive the EULA if it was set (regardless of other setings on the category, etc)
131 lines
3.6 KiB
PHP
131 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Notifications;
|
|
|
|
use App\Models\Setting;
|
|
use Illuminate\Bus\Queueable;
|
|
use App\Models\User;
|
|
use Illuminate\Notifications\Notification;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use Illuminate\Notifications\Messages\MailMessage;
|
|
use Illuminate\Notifications\Messages\SlackMessage;
|
|
|
|
class CheckinAssetNotification extends Notification
|
|
{
|
|
use Queueable;
|
|
|
|
|
|
/**
|
|
* Create a new notification instance.
|
|
*
|
|
* @param $params
|
|
*/
|
|
public function __construct($params)
|
|
{
|
|
$this->target = $params['target'];
|
|
$this->item = $params['item'];
|
|
$this->admin = $params['admin'];
|
|
$this->note = '';
|
|
$this->expected_checkin = '';
|
|
$this->target_type = $params['target_type'];
|
|
$this->settings = $params['settings'];
|
|
|
|
if (array_key_exists('note', $params)) {
|
|
$this->note = $params['note'];
|
|
}
|
|
|
|
if ($this->item->expected_checkin) {
|
|
$this->expected_checkin = \App\Helpers\Helper::getFormattedDateObject($this->item->expected_checkin, 'date',
|
|
false);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the notification's delivery channels.
|
|
*
|
|
* @param mixed $notifiable
|
|
* @return array
|
|
*/
|
|
public function via()
|
|
{
|
|
|
|
$notifyBy = [];
|
|
|
|
if (Setting::getSettings()->slack_endpoint!='') {
|
|
\Log::debug('use slack');
|
|
$notifyBy[] = 'slack';
|
|
}
|
|
|
|
/**
|
|
* Only send checkin notifications to users if the category
|
|
* has the corresponding checkbox checked.
|
|
*/
|
|
if ($this->item->checkin_email() && $this->target instanceof User && $this->target->email != '')
|
|
{
|
|
\Log::debug('use email');
|
|
$notifyBy[] = 'mail';
|
|
}
|
|
|
|
return $notifyBy;
|
|
}
|
|
|
|
public function toSlack()
|
|
{
|
|
|
|
$admin = $this->admin;
|
|
$item = $this->item;
|
|
$note = $this->note;
|
|
$botname = ($this->settings->slack_botname!='') ? $this->settings->slack_botname : 'Snipe-Bot' ;
|
|
|
|
$fields = [
|
|
trans('general.administrator') => '<'.$admin->present()->viewUrl().'|'.$admin->present()->fullName().'>',
|
|
trans('general.status') => $item->assetstatus->name,
|
|
trans('general.location') => ($item->location) ? $item->location->name : '',
|
|
];
|
|
|
|
return (new SlackMessage)
|
|
->content(':arrow_down: :computer: Asset Checked In')
|
|
->from($botname)
|
|
->attachment(function ($attachment) use ($item, $note, $admin, $fields) {
|
|
$attachment->title(htmlspecialchars_decode($item->present()->name), $item->present()->viewUrl())
|
|
->fields($fields)
|
|
->content($note);
|
|
});
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
* Get the mail representation of the notification.
|
|
*
|
|
* @param mixed $notifiable
|
|
* @return \Illuminate\Notifications\Messages\MailMessage
|
|
*/
|
|
public function toMail()
|
|
{
|
|
|
|
|
|
$fields = [];
|
|
|
|
// Check if the item has custom fields associated with it
|
|
if (($this->item->model) && ($this->item->model->fieldset)) {
|
|
$fields = $this->item->model->fieldset->fields;
|
|
}
|
|
|
|
$message = (new MailMessage)->markdown('notifications.markdown.checkin-asset',
|
|
[
|
|
'item' => $this->item,
|
|
'admin' => $this->admin,
|
|
'note' => $this->note,
|
|
'target' => $this->target,
|
|
'fields' => $fields,
|
|
'expected_checkin' => $this->expected_checkin,
|
|
])
|
|
->subject('Asset checked in');
|
|
|
|
|
|
return $message;
|
|
}
|
|
|
|
}
|