freescout/freescout-dist/app/Observers/ThreadObserver.php

99 lines
3.1 KiB
PHP

<?php
namespace App\Observers;
use App\Conversation;
use App\Thread;
class ThreadObserver
{
/**
* Thread created.
*
* @param Thread $thread
*/
public function created(Thread $thread)
{
// Update data in conversation
$conversation = $thread->conversation;
if (!$conversation) {
return;
}
// Fetch date & time setting.
$use_mail_date_on_fetching = config('app.use_mail_date_on_fetching');
if ($use_mail_date_on_fetching) {
$now = $thread->created_at;
}else{
$now = date('Y-m-d H:i:s');
}
if (!in_array($thread->type, [Thread::TYPE_LINEITEM, Thread::TYPE_NOTE]) && $thread->state == Thread::STATE_PUBLISHED) {
$conversation->threads_count++;
}
if (!in_array($thread->type, [Thread::TYPE_CUSTOMER])) {
$conversation->user_updated_at = $now;
}
if ((in_array($thread->type, [Thread::TYPE_CUSTOMER, Thread::TYPE_MESSAGE])
|| ($conversation->isPhone() && in_array($thread->type, [Thread::TYPE_NOTE])))
&& $thread->state == Thread::STATE_PUBLISHED
) {
// $conversation->cc = $thread->cc;
// $conversation->bcc = $thread->bcc;
$conversation->last_reply_at = $now;
$conversation->last_reply_from = $thread->source_via;
}
if ($conversation->source_via == Conversation::PERSON_CUSTOMER) {
$conversation->read_by_user = false;
}
// Update preview.
if (in_array($thread->type, [Thread::TYPE_CUSTOMER, Thread::TYPE_MESSAGE, Thread::TYPE_NOTE])
&& $thread->state == Thread::STATE_PUBLISHED
&& !$thread->isForward()
// Otherwise preview is not set when conversation is created
// outside of the web interface.
//&& ($conversation->threads_count > 1 || $thread->type == Thread::TYPE_NOTE)
) {
$conversation->setPreview($thread->body);
}
$conversation->save();
// $is_new_conversation = false;
// if ($conversation->threads_count == 0
// && in_array($thread->type, [Thread::TYPE_CUSTOMER, Thread::TYPE_MESSAGE, Thread::TYPE_NOTE])
// && $thread->state == Thread::STATE_PUBLISHED
// ) {
// $is_new_conversation = true;
// }
// User threads are created as drafts first.
// if ($thread->state == Thread::STATE_PUBLISHED) {
// \Eventy::action('thread.created', $thread);
// }
// Real time for user notifications is sent using events.
if ($thread->type == Thread::TYPE_CUSTOMER
|| ($thread->type == Thread::TYPE_MESSAGE && $thread->state == Thread::STATE_DRAFT)
) {
Conversation::refreshConversations($conversation, $thread);
}
\Eventy::action('thread.created', $thread);
}
public function deleting(Thread $thread)
{
\Eventy::action('thread.deleting', $thread);
}
public function updated(Thread $thread)
{
\Eventy::action('thread.updated', $thread);
}
}