<h1>Cообщения / <?=$currentFolder->name?></h1> <div id="mfolders"> <?php $folders = MessageFolder::model()->sorted()->visible()->findAll(); foreach ($folders as $k => $folder) { ?> <?php echo $folder->id == $currentFolder ? $folder->name: CHtml::link($folder->name,array('anketa/messages','folder'=>$folder->id)) ?>: <?php if ($folder->id != Anketa::FOLDER_ID_IGNORE) if ($unread = $folder->unreadCount) echo "<b class='pink'>$unread</b> "; else echo "<b class='black'>$unread</b>"; ?> / <?php echo $folder->messagelistCount; ?> <br/> <?php if ($folder->id == $currentFolder->id) unset ($folders[$k]); // убрать текущую папку из списка для перемещения ?> <?php } ?> </div> <div style="width:760px;float:left;" id="message-list-sort"> <?php echo CHtml::beginForm(array('anketa/sortMessages'),'post',array('onsubmit'=>'js:return checkMessageForm();')); ?> <?php foreach($messages as $k=> $message) { $anketa = $users[$k]; $cnt = $message['cnt']; $new = isset($newCnt[$k]) ? $newCnt[$k] : 0; if (!$anketa) continue;?> <div class="messagelist my<?php // echo $message->id_from==Yii::app()->user->id?' my':''?>"> <div class="mchkbox"><?php echo CHtml::checkBox('id[]',false,array('value'=>$anketa->id)) ?></div> <div class="mphoto"> <span class="messagephoto"> <?php echo $anketa->isdeleted ? CHtml::image($anketa->mainPhotoUrl, $anketa->name) : CHtml::link(CHtml::image($anketa->mainPhotoUrl, $anketa->name), $anketa->link); ?>
/** * Выводит сообщения - список последних с группировкой по пользователю * отделить вывод сообщений отдельного пользователя * @param int $id - ID-шник пользователя для переписки * @throws CHttpException - незарегистрированный пользователь */ public function actionMessages($id = 0, $folder = 0, $mode = 0) { if (Yii::app()->user->isGuest) { $this->actionFakeMessages($id); } if (Yii::app()->user->id == $id) { // нельзя писать самому себе throw new CHttpException(404, 'Страница не найдена'); } if (!($currentFolder = MessageFolder::model()->findByPk($folder))) { throw new CHttpException(404, 'Папка не найдена'); } if (empty($id)) { // messages list $messages = MessageCount::model()->lastMessages(null, $folder); $users = Anketa::model()->with('mainphotoimage')->findAllByPk(array_keys($messages), array('index' => 'id')); $newCnt = MessageCount::newMessages(null, array_keys($messages)); $this->render('messages', array('messages' => $messages, 'users' => $users, 'currentFolder' => $currentFolder, 'newCnt' => $newCnt)); Yii::app()->end(); } // сохранить в сессии не будем, т.к. см ниже $me = Anketa::model()->with('mainphotoimage')->findByPk(Yii::app()->user->id); $user = Anketa::model()->with('mainphotoimage')->findByPk($id); if (!$me || $me->isdeleted) { Yii::app()->user->logout(false); Yii::app()->end(); } // if (!user || $user->isdeleted) {throw new CHttpException(403,'Анкета удалена');} $welike = 1; // Anketa::isWelike($user->id,Yii::app()->user->id); $message = new Message('send'); if (isset($_POST['Message'])) { if (!$welike) { Yii::app()->user->setFlash('error', 'Отправлять сообщения можно только по взаимной симпатии'); $this->refresh(); } if ($me->disallowMessageTo($user)) { Yii::app()->user->setFlash('error', 'Отправка сообщения запрещена'); $this->refresh(); } $message->attributes = $_POST['Message']; $message->id_from = Yii::app()->user->id; $message->id_to = $user->id; if ($message->validate()) { // вычитаем контакт, если диалога раньше не было if (!$me->wasDialogTo($user)) { MessageFolder::addDefaultFolder($me->id, $user->id); $me->updateCounters(array('contact_count' => -1), 'id=' . $me->id); } $message->save(); $this->refresh(); } } $all = (bool) $mode; $count = Message::model()->active()->fromto($id)->count(); $all = $count < 25 || $all; if ($all) { $messages = Message::model()->active()->fromto($id)->findAll(array('order' => 'id')); } else { $messages = Message::model()->active()->fromto($id)->findAll(array('order' => 'id DESC', 'limit' => 10)); $messages = array_reverse($messages); } if (empty($messages) && !$welike) { throw new CHttpException('403', 'Переписка возможна только по взаимной симпатии'); } foreach ($messages as $message1) { if ($message1->id_to == Yii::app()->user->id && $message1->viewed == false) { $message1->viewed = true; $message1->saveAttributes(array('viewed')); } } $this->render('messages_one', array('messages' => $messages, 'me' => $me, 'user' => $user, 'posted' => $message, 'hideform' => !$welike, 'all' => $all)); }