Blame view

app/Models/Message.php 3.34 KB
02a1ed535   Андрей Ларионов   Первый коммит Rek...
1
2
3
  <?php
  
  namespace App\Models;
7d97dde35   Fedor   task-132985 minor...
4
  use App\Events\MessageSended;
02a1ed535   Андрей Ларионов   Первый коммит Rek...
5
6
  use Illuminate\Database\Eloquent\Factories\HasFactory;
  use Illuminate\Database\Eloquent\Model;
712f07ca2   Сергей П   часть задачи по р...
7
8
  use Illuminate\Http\Request;
  use Illuminate\Support\Facades\Validator;
f98ccb92c   Сергей П   Массова рассылка
9
  use mysql_xdevapi\Collection;
02a1ed535   Андрей Ларионов   Первый коммит Rek...
10
11
12
13
  
  class Message extends Model
  {
      use HasFactory;
82a9544dc   Андрей Ларионов   Связи моделей, гр...
14

e688e0d8a   Андрей Ларионов   Статистика работн...
15
16
17
      protected $fillable = [
          'user_id',
          'to_user_id',
712f07ca2   Сергей П   часть задачи по р...
18
          'title',
e688e0d8a   Андрей Ларионов   Статистика работн...
19
20
          'text',
          'file',
f8a3cafe5   Андрей Ларионов   диалоговые пробле...
21
22
          'flag_new',
          'ad_employer_id',
f98ccb92c   Сергей П   Массова рассылка
23
24
25
26
          'job_title_id',
          'chat_id_from',
          'chat_id_to',
          'reply_message_id',
3d041f3f0   Сергей П   Изменения для соо...
27
          'original_file_name',
e688e0d8a   Андрей Ларионов   Статистика работн...
28
      ];
82a9544dc   Андрей Ларионов   Связи моделей, гр...
29
30
31
32
33
34
35
36
37
38
39
40
41
      /*
       * Связь таблицы Message с таблицей User (Отправитель)
      */
      public function user_from() {
          return $this->belongsTo(User::class, 'user_id');
      }
  
      /*
       * Связь таблицы Message с таблицей User (Получатель)
      */
      public function user_to() {
          return $this->belongsTo(User::class, 'to_user_id');
      }
e3c7b0ffb   Андрей Ларионов   Коммит на понедел...
42
43
      // Связь модели Сообщения (Message) с моделью Вакансии (Ad_employer)
      public function vacancies() {
6e2255214   Андрей Ларионов   Работа над сообще...
44
          return $this->belongsTo(Ad_employer::class, 'ad_employer_id', 'id');
e3c7b0ffb   Андрей Ларионов   Коммит на понедел...
45
      }
712f07ca2   Сергей П   часть задачи по р...
46
47
  
      public static function add_message(
465aace57   Fedor   task-132687 minor...
48
          Request $request,
712f07ca2   Сергей П   часть задачи по р...
49
50
51
          int $user_id,
          int $to_user_id,
          array $message_params,
f98ccb92c   Сергей П   Массова рассылка
52
53
          string $file_store_path = '/',
          bool $is_admin_chat = false
712f07ca2   Сергей П   часть задачи по р...
54
55
56
      ) {
          $message_params['user_id'] = $user_id;
          $message_params['to_user_id'] = $to_user_id;
465aace57   Fedor   task-132687 minor...
57
58
59
          $files = $request->file();
          if (count($files) > 0) {
              $file = reset($files);
3d041f3f0   Сергей П   Изменения для соо...
60
61
              $message_params['file'] = $file->store($file_store_path, 'public');
              $message_params['original_file_name'] = $file->getClientOriginalName();
712f07ca2   Сергей П   часть задачи по р...
62
          }
f98ccb92c   Сергей П   Массова рассылка
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
          $chat_form = Chat::firstOrCreate([
              'user_id' => $is_admin_chat ? 0 : $user_id,
              'to_user_id' => $to_user_id,
              'is_removed' => 0,
              'is_admin_chat' => $is_admin_chat ? 1 : 0,
          ]);
          $message_params[$is_admin_chat ? 'chat_id_to' : 'chat_id_from'] = $chat_form->id;
  
          if (!$is_admin_chat) {
              $chat_to = Chat::firstOrCreate([
                  'user_id' => $to_user_id,
                  'to_user_id' => $user_id,
                  'is_removed' => 0
              ]);
              $message_params['chat_id_to'] = $chat_to->id;
          }
7d97dde35   Fedor   task-132985 minor...
79
          //dump('before creation '.$message_params['text']);
712f07ca2   Сергей П   часть задачи по р...
80
          $new_message = Message::create($message_params);
7d97dde35   Fedor   task-132985 minor...
81
          //dump('after creation '.$new_message->id, [$new_message->id ,  $chat_form->last_message_id,  $chat_to->last_message_id]);
712f07ca2   Сергей П   часть задачи по р...
82

7d97dde35   Fedor   task-132985 minor...
83
          if ($new_message->id > $chat_form->last_message_id) {
f98ccb92c   Сергей П   Массова рассылка
84
85
86
87
88
              $chat_form->update(['last_message_date' => date("Y-m-d H:i:s"), 'last_message_id' => $new_message->id]);
  
              if (!$is_admin_chat) {
                  $chat_to->update(['last_message_date' => date("Y-m-d H:i:s"), 'last_message_id' => $new_message->id]);
              }
712f07ca2   Сергей П   часть задачи по р...
89
          }
7d97dde35   Fedor   task-132985 minor...
90
          MessageSended::dispatch($new_message);
712f07ca2   Сергей П   часть задачи по р...
91

f98ccb92c   Сергей П   Массова рассылка
92
93
94
95
96
97
98
99
100
          return $new_message ?? false;
      }
  
      public function getReplyMessageAttribute()
      {
          $reply_message = false;
          if ($this->attributes['reply_message_id']){
              $reply_message = self::find($this->attributes['reply_message_id']);
          }
712f07ca2   Сергей П   часть задачи по р...
101

f98ccb92c   Сергей П   Массова рассылка
102
          return $reply_message;
712f07ca2   Сергей П   часть задачи по р...
103
      }
02a1ed535   Андрей Ларионов   Первый коммит Rek...
104
  }