diff --git a/common/models/Chat.php b/common/models/Chat.php new file mode 100644 index 0000000..0c8164d --- /dev/null +++ b/common/models/Chat.php @@ -0,0 +1,80 @@ + true, 'targetClass' => User::className(), 'targetAttribute' => ['from_user' => 'id']], + [['to_user'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['to_user' => 'id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'chat_id' => 'Chat ID', + 'status' => 'Status', + 'comment' => 'Comment', + 'from_user' => 'From User', + 'to_user' => 'To User', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getFromUser() + { + return $this->hasOne(User::className(), ['id' => 'from_user']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getToUser() + { + return $this->hasOne(User::className(), ['id' => 'to_user']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getMessages() + { + return $this->hasMany(Message::className(), ['chat_id' => 'chat_id'])->orderBy('message_id')->all() ; + } +} diff --git a/common/models/File.php b/common/models/File.php new file mode 100644 index 0000000..fc4af38 --- /dev/null +++ b/common/models/File.php @@ -0,0 +1,49 @@ + 50], + [['dir'], 'string', 'max' => 255], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'file_id' => 'File ID', + 'status' => 'Status', + 'name' => 'Name', + 'dir' => 'Dir', + ]; + } +} diff --git a/common/models/Message.php b/common/models/Message.php new file mode 100644 index 0000000..08d3a8a --- /dev/null +++ b/common/models/Message.php @@ -0,0 +1,75 @@ + 255], + [['chat_id'], 'exist', 'skipOnError' => true, 'targetClass' => Chat::className(), 'targetAttribute' => ['chat_id' => 'chat_id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'message_id' => 'Message ID', + 'chat_id' => 'Chat ID', + 'user_id' => 'User ID', + 'status' => 'Status', + 'text' => 'Сообщение', + 'files' => 'Files', + 'date' => 'Date', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getChat() + { + return $this->hasOne(Chat::className(), ['chat_id' => 'chat_id']); + } + + public function isMy(){ + if($this->user_id == \Yii::$app->user->id){ + return true; + } else { + return false; + } + } +} diff --git a/console/migrations/m160301_105759_chat.php b/console/migrations/m160301_105759_chat.php index 26df526..0e1f5d7 100644 --- a/console/migrations/m160301_105759_chat.php +++ b/console/migrations/m160301_105759_chat.php @@ -8,20 +8,46 @@ class m160301_105759_chat extends Migration { $this->createTable('{{%chat}}', [ 'chat_id' => $this->primaryKey(), - 'status' => $this->string(), - 'comment' => $this->string(), + 'status' => $this->integer(), + 'comment' => $this->text(), 'from_user' => $this->integer(), 'to_user' => $this->integer(), ]); + + $this->createTable('{{%file}}', [ + 'file_id' => $this->primaryKey(), + 'status' => $this->integer(), + 'name' => $this->string(50), + 'dir' => $this->string(255) + ]); + + + $this->createTable('{{%message}}', [ + 'message_id' => $this->primaryKey(), + 'chat_id' => $this->integer(), + 'user_id' => $this->integer(), + 'status' => $this->integer(), + 'text' => $this->text(), + 'files' => $this->string(255), + 'date' => $this->timestamp()->defaultExpression('NOW()'), + + ]); + + $this->addForeignKey('chat_from_user', '{{%chat}}', 'from_user', '{{%user}}', 'id', 'SET NULL', 'NO ACTION'); $this->addForeignKey('chat_to_user', '{{%chat}}', 'to_user', '{{%user}}', 'id', 'SET NULL', 'NO ACTION'); + + $this->addForeignKey('message_to_chat', '{{%message}}', 'chat_id', '{{%chat}}', 'chat_id', 'CASCADE', 'CASCADE'); } public function down() { $this->dropForeignKey('chat_from_user', '{{%chat}}'); $this->dropForeignKey('chat_to_user', '{{%chat}}'); + $this->dropForeignKey('message_to_chat', '{{%message}}'); $this->dropTable('{{%chat}}'); + $this->dropTable('{{%file}}'); + $this->dropTable('{{%message}}'); } } diff --git a/frontend/config/main.php b/frontend/config/main.php index 0578910..1644ebb 100755 --- a/frontend/config/main.php +++ b/frontend/config/main.php @@ -37,6 +37,9 @@ return [ 'sourcePath' => '@bower/bootstrap/dist', 'css' => [] ], + 'yii\web\JqueryAsset' =>[ + 'js' => [] + ] ], ], //'PageController'=>[ @@ -81,6 +84,7 @@ return [ 'company/blog-view//' => 'company/blog-view', 'company/vacancy-view//' => 'company/vacancy-view', 'company//' => 'company/', + 'chat/message/'=> 'chat/message', 'tender/view/' => 'tender/view', ] diff --git a/frontend/controllers/ChatController.php b/frontend/controllers/ChatController.php index 33d8b46..648242b 100755 --- a/frontend/controllers/ChatController.php +++ b/frontend/controllers/ChatController.php @@ -1,6 +1,8 @@ AccessControl::className(), 'rules' => [ [ - 'actions' => ['list', 'message'], + 'actions' => ['list', 'message', 'message-save'], 'allow' => true, 'roles' => ['@'], ], @@ -38,8 +40,52 @@ class ChatController extends Controller return $this->render('list'); } - public function actionMessage(/*$user_id*/) + public function actionMessage($user_id) { - return $this->render('message'); + $user = \Yii::$app->user->identity; + + $chat = Chat::find() + ->where([ + 'or', + ['from_user' => $user_id,], + ['to_user' => $user_id,], + ]) + ->andWhere([ + 'or', + ['from_user'=> $user->id,], + ['to_user'=> $user->id,], + ])->one(); + if(!$chat instanceof Chat){ + $chat = new Chat(); + $chat->from_user = $user->id; + $chat->to_user = $user_id; + $chat->save(); + + } + + + $post = \Yii::$app->request->post(); + if(isset($post)){ + + + + $message = new Message(); + + + if($message->load($post, 'Message')){ + + $message->chat_id = $chat->chat_id; + $message->user_id = $user->id; + $message->save(); + + return $this->redirect(['chat/message', 'user_id'=>$user_id]); + } + } + + return $this->render('message',[ + 'chat' => $chat, + 'user_id' => $user_id + ]); } + } diff --git a/frontend/views/chat/message.php b/frontend/views/chat/message.php index 761ab0a..e02442a 100755 --- a/frontend/views/chat/message.php +++ b/frontend/views/chat/message.php @@ -1,9 +1,13 @@ registerJsFile('/js/jscroll.js'); +$this->registerJsFile("/js/forms.js"); + $this->registerJsFile("/js/jmousewhell.js"); + $this->registerJsFile("/js/jscroll.js"); $this->title = 'Мой профиль'; -$this->params['breadcrumbs'][] = $this->title; + $this->params['breadcrumbs'][] = $this->title; ?>
@@ -86,134 +90,49 @@ $this->params['breadcrumbs'][] = $this->title;
-
-
-
- На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов. -
- 25.11.15
- 15:00 + messages as $message):?> + isMy()):?> +
+
+
+ text ?> +
+ 26.11.15
+ 18:00 +
+
+ +
-
-
-
-
-
-
- На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов. -
- 25.11.15
- 15:00 -
-
-
-
-
-
-
- На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов. -
- 25.11.15
- 15:00 -
-
-
-
-
-
-
- На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов. -
- 25.11.15
- 15:00 + +
+
+
+ text ?> +
+ 25.11.15
+ 15:00 +
+
+
-
-
-
-
-
-
- На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов. -
- 25.11.15
- 15:00 -
-
-
-
-
-
-
- На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов. -
- 26.11.15
- 18:00 -
-
- -
-
-
-
-
- На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов. -
- 26.11.15
- 18:00 -
-
- -
-
-
-
-
- На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов. -
- 26.11.15
- 18:00 -
-
- -
-
-
-
-
- На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов. -
- 26.11.15
- 18:00 -
-
- -
-
-
-
-
- На постоянные работы по созданию сайтов, в нашу команду требуется html-верстальщик. Оплата сдельная за проект. В отклике прошу написать свой Skype и почту. А так же 3 проекта с реализованной адаптивной версткой и 3 проекта мобильных сайтов. -
- 25.11.15
- 15:00 -
-
-
-
+ +
-
- - + 'post']); ?> + + field(new Message(), 'text') + ->textarea(['class'=> 'message_text']); ?>
Прикрепить файл
Максимальный размер файла 5 МБ
-
+
diff --git a/frontend/views/layouts/gallery.php b/frontend/views/layouts/gallery.php index 001ac14..cafdcc1 100755 --- a/frontend/views/layouts/gallery.php +++ b/frontend/views/layouts/gallery.php @@ -1,6 +1,7 @@ beginContent('@app/views/layouts/main.php');
Предложить
проект
- Написать
сообщение
+ $this->params['user']->id]), ['class'=> 'blog-buttons-write'])?> Добавить
в закладки
diff --git a/frontend/views/layouts/performer.php b/frontend/views/layouts/performer.php index 1f33bec..67f2eeb 100755 --- a/frontend/views/layouts/performer.php +++ b/frontend/views/layouts/performer.php @@ -3,6 +3,7 @@ use common\models\User; use yii\helpers\ArrayHelper; use yii\helpers\Html; +use yii\helpers\Url; use yii\widgets\Menu; \frontend\assets\AppAsset::register($this); @@ -17,7 +18,7 @@ $this->beginContent('@app/views/layouts/main.php');
Предложить
проект
- Написать
сообщение
+ $this->params['user']->id]), ['class'=> 'blog-buttons-write'])?> Добавить
в закладки
diff --git a/frontend/web/js/script.js b/frontend/web/js/script.js index e8b369d..80274f6 100755 --- a/frontend/web/js/script.js +++ b/frontend/web/js/script.js @@ -690,14 +690,14 @@ $(document).ready(function(){ } } - function include(url) { - var script = document.createElement('script'); - script.src = url; - document.getElementsByTagName('head')[0].appendChild(script); - } - include("/js/forms.js"); - include("/js/jmousewhell.js"); - include("/js/jscroll.js"); + //function include(url) { + // var script = document.createElement('script'); + // script.src = url; + // document.getElementsByTagName('head')[0].appendChild(script); + //} + //include("/js/forms.js"); + //include("/js/jmousewhell.js"); + //include("/js/jscroll.js"); function inputNumber(){ $('.form-price-wr input').keypress(function(e) { -- libgit2 0.21.4