From: Vincent Vanwaelscappel Date: Thu, 29 Aug 2024 12:38:59 +0000 (+0200) Subject: wip #7016 @3 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=008cc5f9b9c47dba84a9378d04d085154161a128;p=fluidbook-toolbox.git wip #7016 @3 --- diff --git a/app/Console/Commands/FluidbookQuote.php b/app/Console/Commands/FluidbookQuote.php index 4b91008d7..2f7cffcde 100644 --- a/app/Console/Commands/FluidbookQuote.php +++ b/app/Console/Commands/FluidbookQuote.php @@ -3,6 +3,7 @@ namespace App\Console\Commands; use App\Console\Commands\Base\ToolboxCommand; +use App\Slack\Mattermost; use App\Slack\Slack; use Cubist\Backpack\Facades\App; @@ -23,7 +24,7 @@ class FluidbookQuote extends ToolboxCommand App::setLocale('fr'); $nottreated = \App\Models\FluidbookQuote::where('status', '0')->count(); if ($nottreated > 0) { - Slack::send(Slack::fluidbookQuoteChannel, + Mattermost::send(Mattermost::fluidbookQuoteChannel, ':alarm_clock: ' . __('Des demandes de devis n\'ont pas été traitées'), __(':awaiting demandes de devis doivent être confiées à un revendeur ou un chef de projet', ['awaiting' => $nottreated]), [__('Toutes les demandes') => ['url' => backpack_url('fluidbook-quote?status=0')]], diff --git a/app/Console/Commands/MattermostPost.php b/app/Console/Commands/MattermostPost.php new file mode 100644 index 000000000..2123e6669 --- /dev/null +++ b/app/Console/Commands/MattermostPost.php @@ -0,0 +1,19 @@ +find(5)->mattermost; + Mattermost::send($id, 'Test subject', 'Test Text', ['test' => ['url' => 'https://example.com']]); + } +} diff --git a/app/Fluidbook/Link/Custom/IntexLink.php b/app/Fluidbook/Link/Custom/IntexLink.php index 8010e2e44..fc6e113bf 100644 --- a/app/Fluidbook/Link/Custom/IntexLink.php +++ b/app/Fluidbook/Link/Custom/IntexLink.php @@ -8,15 +8,15 @@ class IntexLink extends CustomLink { public function ignore() { - if (!static::_getURL($this->to,'intex', false)) { + if (!static::_getURL($this->to, 'intex', false)) { return true; } return parent::ignore(); } - public static function _getURL($to) + public static function _getURL($to, $type = '', $default = null) { - return static::_getURL( $to,'intex'); + return static::_getURL($to, 'intex'); } public function getDefaultTooltip() diff --git a/app/Fluidbook/Link/Custom/PierronLink.php b/app/Fluidbook/Link/Custom/PierronLink.php index 70f18ae14..d50241a2a 100644 --- a/app/Fluidbook/Link/Custom/PierronLink.php +++ b/app/Fluidbook/Link/Custom/PierronLink.php @@ -6,7 +6,7 @@ use Fluidbook\Tools\Links\CustomLink; class PierronLink extends CustomLink { - public static function _getURL($to) + public static function _getURL($to,$type='',$default=null) { return 'https://workshop.fluidbook.com/services/pierronRef?ref=' . $to; } diff --git a/app/Http/Controllers/Admin/Operations/Files/UploadOperation.php b/app/Http/Controllers/Admin/Operations/Files/UploadOperation.php index d6cc9e4c2..db1dff4e2 100644 --- a/app/Http/Controllers/Admin/Operations/Files/UploadOperation.php +++ b/app/Http/Controllers/Admin/Operations/Files/UploadOperation.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin\Operations\Files; use App\Models\File; use App\Models\User; +use App\Slack\Mattermost; use App\Slack\Slack; use Cubist\Util\Files\Files; use Illuminate\Http\UploadedFile; @@ -58,17 +59,17 @@ trait UploadOperation /** @var User $destUser */ $destUser = User::withoutGlobalScopes()->find($user); $subject = __(':nb fichiers chargés pour ' . $destUser->nameWithCompany, ['nb' => $j]); - $destChannel = backpack_user()->slack; + $destChannel = backpack_user()->mattermost; } else { $subject = __(':nb fichiers chargés par ' . backpack_user()->nameWithCompany, ['nb' => $j]); - $destChannel = Slack::fluidbookFilesChannel; + $destChannel = Mattermost::fluidbookFilesChannel; } $actions = []; foreach ($paths as $path) { $spl = new \SplFileInfo($path); $actions[$spl->getFilename()] = backpack_url('/file/' . File::hash($path, $spl->getSize()) . '/' . $spl->getFilename()); } - Slack::send($destChannel, $subject, '', $actions); + Mattermost::send($destChannel, $subject, '', $actions); Alert::success(__(':nb fichiers chargés', ['nb' => '' . $j . '']))->flash(); } return redirect($this->crud->route); diff --git a/app/Http/Controllers/Admin/Operations/FluidbookQuote/CreateFromWebsite.php b/app/Http/Controllers/Admin/Operations/FluidbookQuote/CreateFromWebsite.php index dd63eacdc..e9a18977a 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookQuote/CreateFromWebsite.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookQuote/CreateFromWebsite.php @@ -10,6 +10,7 @@ use App\Mail\FluidbookQuoteReceived; use App\Models\Company; use App\Models\FluidbookQuote; use App\Models\AuthUser; +use App\Slack\Mattermost; use App\Slack\Slack; use Cubist\Backpack\Middleware\CORSMiddleware; use Cubist\Util\ArrayUtil; @@ -106,7 +107,7 @@ trait CreateFromWebsite if ($post && !$spam) { try { - $quote->slack_ts = Slack::send(Slack::fluidbookQuoteChannel, 'Demande de devis', FluidbookQuoteReceived::getMarkdown($post), + $quote->slack_ts = Mattermost::send(Mattermost::fluidbookQuoteChannel, 'Demande de devis', FluidbookQuoteReceived::getMarkdown($post), ['Je vais voir' => backpack_url('fluidbook-quote', ['status' => 0]), 'Je m\'en charge' => ['url' => backpack_url('fluidbook-quote/' . $quote->id . '/assign/me'), 'style' => 'primary'], 'C\'est du SPAM' => ['url' => backpack_url('fluidbook-quote/' . $quote->id . '/spam'), 'style' => 'danger'], @@ -136,7 +137,7 @@ trait CreateFromWebsite $data = unserialize($d64); } if (!$data) { - Slack::send(Slack::fluidbookQuoteChannel, __('Erreur envoi demande de devis'), $request->get('data') . "\n\n" . utf8_decode($d64)); + Mattermost::send(Mattermost::fluidbookQuoteChannel, __('Erreur envoi demande de devis'), $request->get('data') . "\n\n" . utf8_decode($d64)); return false; } diff --git a/app/Jobs/DownloadBase.php b/app/Jobs/DownloadBase.php index f88a010f9..060604d42 100644 --- a/app/Jobs/DownloadBase.php +++ b/app/Jobs/DownloadBase.php @@ -6,6 +6,7 @@ use App\Mail\DeferredDownload; use App\Models\User; use App\Notifications\DownloadReady; use App\Services\ScormCloud; +use App\Slack\Mattermost; use App\Slack\Slack; use Cubist\Backpack\Facades\App; use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel; @@ -51,7 +52,7 @@ class DownloadBase extends Base public function sendSlack($subject, $text, $actions = []) { - return Slack::send($this->getUser()->slack, $subject, $text, $actions); + return Mattermost::send($this->getUser()->mattermost, $subject, $text, $actions); } /** diff --git a/app/Jobs/WebflowPublish.php b/app/Jobs/WebflowPublish.php index b754472ea..39dadf9f6 100644 --- a/app/Jobs/WebflowPublish.php +++ b/app/Jobs/WebflowPublish.php @@ -5,6 +5,7 @@ namespace App\Jobs; use App\Models\ToolWebflow; use App\Models\User; use App\Notifications\ToolboxNotification; +use App\Slack\Mattermost; use App\Slack\Slack; class WebflowPublish extends Base @@ -67,7 +68,7 @@ class WebflowPublish extends Base } if ($notify && isset($text)) { if ($this->user === null) { - Slack::send($wf->slack, $subject, $text, $actions, false); + Mattermost::send($wf->mattermost, $subject, $text, $actions, false); } else { $this->user->notify(new ToolboxNotification($subject, $text, $actions, true)); } diff --git a/app/Models/FluidbookCollection.php b/app/Models/FluidbookCollection.php index 170d01bc5..a3fe25dd1 100644 --- a/app/Models/FluidbookCollection.php +++ b/app/Models/FluidbookCollection.php @@ -13,6 +13,7 @@ use App\Models\Base\ToolboxDownloadable; use App\Jobs\RefreshUsersTree; use App\Models\Base\ToolboxStatusModel; use App\Models\Traits\CheckHash; +use App\Slack\Mattermost; use App\Slack\Slack; use App\SubForms\CollectionPublication; use Cubist\Backpack\Magic\Fields\BunchOfFieldsMultiple; @@ -130,7 +131,7 @@ class FluidbookCollection extends ToolboxStatusModel $owner = \App\Models\User::withoutGlobalScopes()->find($this->owner); $actions = []; - Slack::send(Slack::fluidbookPreviewAlertsChannel, + Mattermost::send(Mattermost::fluidbookPreviewAlertsChannel, 'Collection #' . $this->id . ' : ' . $this->visits_counter . ' visites', 'Le lien de preview de _' . $this->title . '_ a été utilisé à *' . $this->visits_counter . '* reprises par des visiteurs non authentifiés sur la toolbox. La collection se trouve sur le compte de ' . $owner->getNameWithCompanyAttribute() . '.', $actions, diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index f65be6447..9f4b3e1f7 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -953,7 +953,7 @@ class FluidbookPublication extends ToolboxStatusModel $actions['Voir les stats'] = backpack_url('/fluidbook-publication/stats/' . $this->id . '_' . $this->hash . '/'); } - Slack::send(Slack::fluidbookPreviewAlertsChannel, + Mattermost::send(Mattermost::fluidbookPreviewAlertsChannel, 'Fluidbook #' . $this->id . ' : ' . $this->visits_counter . ' visites', 'Le lien de preview de _' . $this->title . '_ a été utilisé à *' . $this->visits_counter . '* reprises par des visiteurs non authentifiés sur la toolbox. Le fluidbook se trouve sur le compte de ' . $owner->getNameWithCompanyAttribute() . '.', $actions, diff --git a/app/Notifications/FluidbookmattermostChannel.php b/app/Notifications/FluidbookmattermostChannel.php new file mode 100644 index 000000000..43d58d4d1 --- /dev/null +++ b/app/Notifications/FluidbookmattermostChannel.php @@ -0,0 +1,22 @@ +toSlack($notifiable); + Mattermost::send($notifiable->mattermost, $message['subject'], $message['text'], $message['actions']); + } +} diff --git a/app/Notifications/ToolboxNotification.php b/app/Notifications/ToolboxNotification.php index 11f90ef1d..77916686e 100644 --- a/app/Notifications/ToolboxNotification.php +++ b/app/Notifications/ToolboxNotification.php @@ -40,13 +40,22 @@ class ToolboxNotification extends Notification */ public function via($notifiable) { + $res = ['database']; + $slackOrMM=false; if ($notifiable->slack) { - if ($notifiable->id == 5) { - return ['database', FluidbookslackChannel::class, 'mail', WebPushChannel::class]; - } - return ['database', FluidbookslackChannel::class]; + $res[] = FluidbookslackChannel::class; + $slackOrMM=true; } - return ['database', 'mail', WebPushChannel::class]; + if ($notifiable->mattermost) { + $res[] = FluidbookmattermostChannel::class; + $slackOrMM=true; + } + + if(!$slackOrMM || $notifiable->id === 5){ + $res[] = 'mail'; + } + + return array_unique($res); } /** diff --git a/app/Slack/Mattermost.php b/app/Slack/Mattermost.php new file mode 100644 index 000000000..e68308cb9 --- /dev/null +++ b/app/Slack/Mattermost.php @@ -0,0 +1,99 @@ +setEndpoint($endpoint) + ->setCredentials($username, $password); + self::$_client = ApiClient::configure($configurator); + } + return self::$_client; + } + + public static function send($channel, $subject, $text, $actions = [], $repeatActions = true, $from = 'Fluidbook Toolbox') + { + Log::debug(json_encode(func_get_args())); + $markdown = ''; + if ($text) { + $markdown .= $text . "\n"; + } + + $attachment = ['title' => $subject, 'color' => '#9fc142']; + $a = []; + $actionsTexts = []; + $actionsCount = count($actions); + $repeatActions = true; + if ($actionsCount > 0) { + $i = 0; + foreach ($actions as $label => $data) { + if (!$data) { + $data = ['url' => '']; + } + if (is_string($data)) { + $data = ['url' => $data]; + } + if (!$data['url']) { + $data['url'] = backpack_url('404'); + } +// if ($i < 6) { +// $aa = ['id' => 'a_' . $i, 'name' => $label, 'type' => 'link', 'style' => 'error', 'integration' => ['url' => $data['url']]]; +// $a[] = $aa; +// } + if ($repeatActions) { + $markdown .= '* ' . $label . ' : ' . $data['url'] . "\n"; + } + $i++; + } + $attachment['actions'] = $a; + + } + $attachment['text'] = $markdown; + $props['attachments'] = [$attachment]; + + try { + + $response = self::_client()->posts()->createPost([ + 'channel_id' => $channel, + 'props' => $props, + ]); + } catch (\Exception $e) { + Log::critical($e); + Log::critical($e->getMessage() . ' // ' . $from . ' // ' . $channel . ' // ' . $text . ' // ' . $markdown); + } + return false; + } + + public static function deleteMessage($postId) + { + return self::_client()->posts()->deletePost($postId)->getStatus(); + } + + public static function addReaction($channel, $ts, $reaction) + { + return self::_client()->reactionsAdd(['channel' => $channel, 'timestamp' => $ts, 'name' => $reaction]); + } +}