public function up() { $users = \bubasuma\simplechat\db\demo\User::find()->select(['id'])->asArray()->all(); $data = (require __DIR__ . '/data/messages.php'); $count = count($data); $messages = []; try { for ($i = 1; $i <= 10000; $i++) { shuffle($users); $sender = $users[0]; $receiver = $users[1]; $messages[] = ['sender_id' => $sender['id'], 'receiver_id' => $receiver['id'], 'created_at' => (new \DateTime())->sub(new \DateInterval('P' . mt_rand() % 500 . 'DT' . mt_rand() % 86400 . 'S'))->getTimestamp(), 'text' => $data[mt_rand(0, $count - 1)]]; } ArrayHelper::multisort($messages, 'created_at', SORT_ASC, SORT_NUMERIC); foreach ($messages as $message) { $new = new \bubasuma\simplechat\db\demo\Message(); $new->sender_id = $message['sender_id']; $new->receiver_id = $message['receiver_id']; $new->text = $message['text']; $new->is_new = 0; $new->created_at = date('Y-m-d H:i:s', $message['created_at']); $new->save(); } return true; } catch (\yii\base\Exception $e) { return false; } }
public function actionIndex($contactId) { /** * @var $user User * @var $contact User */ $user = $this->user; $contact = User::findOne(['id' => $contactId]); if (empty($contact)) { throw new NotFoundHttpException(); } $this->view->title = $contact->fullName; $conversationDataProvider = call_user_func([$this->modelClass, 'loadConversations'], $user->id, [$this, 'formatConversation'], 8); $messageDataProvider = call_user_func([$this->modelClass, 'loadMessages'], $user->id, $contact->id, [$this, 'formatMessage'], 10); $users = []; foreach (User::find()->with('profile')->all() as $userItem) { $users[] = ['label' => $userItem->fullName, 'url' => '/messages?userId=' . $userItem->id . '&contactId=' . $contact->id, 'options' => ['class' => $userItem->id == $contact->id || $userItem->id == $user->id ? 'disabled' : '']]; } return $this->render('index', compact('conversationDataProvider', 'messageDataProvider', 'users', 'user', 'contact')); }
public function getContact() { return $this->hasOne(User::className(), ['id' => 'contact_id']); }