202 lines
4.4 KiB
PHP
202 lines
4.4 KiB
PHP
<?php
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: Marco Glietsch
|
|
* Date: 22.11.2018
|
|
* Time: 09:28
|
|
*/
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Helpers\AccessHelper;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\User;
|
|
use App\Models\Message;
|
|
use App\Jobs\MailUserMessage;
|
|
use App\Helpers\StringHelper;
|
|
|
|
class MessageController extends ExtendedController
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->middleware(['auth', 'isAdmin']);
|
|
|
|
// Model
|
|
$this->modelClass = Message::class;
|
|
$this->modelType = StringHelper::toURL(__('models.messageboard'));
|
|
$this->modelData = [
|
|
'users' => [
|
|
'type' => 'checkboxSelection',
|
|
'name' => 'name',
|
|
'label' => __('models.receiver'),
|
|
'checked' => false,
|
|
'foreign' => [
|
|
'class' => User::class,
|
|
'model' => 'users',
|
|
'column' => 'name',
|
|
'label' => 'name',
|
|
'order' => [
|
|
'column' => 'name',
|
|
'direction' => 'ASC'
|
|
],
|
|
'conditions' => [
|
|
[
|
|
'column' => 'email',
|
|
'value' => '',
|
|
'condition' => '<>'
|
|
],
|
|
],
|
|
]
|
|
],
|
|
'title' => [
|
|
'type' => 'inputText',
|
|
'label' => __('models.title'),
|
|
'placeholder' => __('models.title'),
|
|
'validation' => [
|
|
'rules' => 'required|min:3',
|
|
]
|
|
],
|
|
'text' => [
|
|
'type' => 'inputTextarea',
|
|
'label' => __('models.text'),
|
|
'placeholder' => __('models.text'),
|
|
'toolbar' => [
|
|
[
|
|
'insertfile',
|
|
'undo',
|
|
'redo',
|
|
],
|
|
[
|
|
'bold',
|
|
'italic',
|
|
'strikethrough'
|
|
],
|
|
[
|
|
'alignleft',
|
|
'aligncenter',
|
|
'alignright',
|
|
'alignjustify'
|
|
],
|
|
[
|
|
'bullist',
|
|
'numlist'
|
|
],
|
|
[
|
|
'link',
|
|
'image',
|
|
'media'
|
|
]
|
|
],
|
|
'plugins' =>
|
|
[
|
|
'paste',
|
|
'lists',
|
|
'media',
|
|
'link',
|
|
'image',
|
|
'imagetools',
|
|
'contextmenu'
|
|
],
|
|
'validation' => [
|
|
'rules' => 'required',
|
|
]
|
|
],
|
|
];
|
|
if(AccessHelper::hasPermissionRoles(['Seitendesigner']))
|
|
{
|
|
$this->modelData['text']['plugins'] = array_merge($this->modelData['text']['plugins'], [
|
|
'preview',
|
|
'fullpage',
|
|
'searchreplace',
|
|
'autolink',
|
|
'directionality',
|
|
'visualblocks',
|
|
'visualchars',
|
|
'fullscreen',
|
|
'template',
|
|
'codesample',
|
|
'table',
|
|
'charmap',
|
|
'hr',
|
|
'pagebreak',
|
|
'nonbreaking',
|
|
'anchor',
|
|
'toc',
|
|
'insertdatetime',
|
|
'advlist',
|
|
'lists',
|
|
'textcolor',
|
|
'wordcount',
|
|
'contextmenu',
|
|
'colorpicker',
|
|
'textpattern'
|
|
]);
|
|
}
|
|
|
|
// URL options
|
|
$this->url = 'messageboard';
|
|
$this->route = StringHelper::toURL(__('models.messageboard'));
|
|
|
|
$this->adminIndexOptions = [
|
|
'orderBy' => 'updated_at',
|
|
'orderDirection' => 'DESC',
|
|
'paginate' => 10,
|
|
'listdata' => [
|
|
'title' => [],
|
|
'updated_at' => [
|
|
'label' => __('general.datetime'),
|
|
'format' => __('general.datetime_format_short')
|
|
]
|
|
]
|
|
];
|
|
|
|
$this->wizardOptions = [
|
|
'buttons' => [
|
|
'save' => [
|
|
'label' => __('models.send'),
|
|
'style' => 'btn-primary',
|
|
'icon' => 'fas fa-paper-plane'
|
|
]
|
|
]
|
|
];
|
|
parent::__construct();
|
|
}
|
|
|
|
protected function hook_after_action_update(&$model, Request &$request)
|
|
{
|
|
$receiverCount = count($model->users);
|
|
$receivers = array();
|
|
|
|
// Schicke die Nachricht per Email an alle gewählten Benutzer
|
|
$model->users->each(function($user) use ($model, $receiverCount, &$receivers){
|
|
$job = (new MailUserMessage(
|
|
config('mail.from.address'),
|
|
__('admin.notify title'),
|
|
$user->email,
|
|
$model->title,
|
|
$model->text,
|
|
'inc.emails.mailUserMessage'))->delay(1);
|
|
dispatch($job);
|
|
$receivers[] = $user->name;
|
|
});
|
|
|
|
// Admin-Nachricht in Abhängigkeit von der Anzahl der Empfänger
|
|
// Bei 3 oder weniger Empfängern
|
|
if($receiverCount <= 3)
|
|
{
|
|
foreach($receivers as $receiver)
|
|
{
|
|
$this->addMessageInfo(__("admin.notification sent to"), $receiver);
|
|
}
|
|
}
|
|
// Bei 4 oder mehr Empfängern
|
|
else
|
|
{
|
|
$receiverString = implode(",<br>", array_slice($receivers, 0, 3))."<br>".__("admin.:number more", ['number' => ($receiverCount - 3)]);
|
|
|
|
$this->addMessageInfo(__("admin.notification sent to"), $receiverString);
|
|
}
|
|
|
|
return $model;
|
|
}
|
|
} |