/** * VISTA DETALLE MENSAJES * @param $id * @return string|\yii\web\Response */ public function run($id) { $id_usuario = Yii::$app->user->identity->getId(); $datos = new Mensajes(); $notif = new Notificaciones(); $model = new EnviarMensajeForm(); $model->scenario = EnviarMensajeForm::ESCENARIO_PRIVADO; //si no tiene permisos es redireccionado a mensajes if (!$datos->verificaPermisoMensaje($id, $id_usuario)) { return $this->controller->redirect('/mensajes'); } $dataProvider = $datos->mensajesPropietarioInteresado($id, $id_usuario); $articulo = $dataProvider->getModels()[0]->conversaciones[0]->articulos; $usuario = $dataProvider->getModels()[0]->conversaciones[0]->uinteresado->idusuario == $id_usuario ? $dataProvider->getModels()[0]->conversaciones[0]->upropietario : $dataProvider->getModels()[0]->conversaciones[0]->uinteresado; //actualizo fecha visto y notificaciones $datos->actualizarFechaVisto($id); $notif->actualizarMensajesVisto($id); //envia mensaje if ($model->load(Yii::$app->request->post())) { $model->cargarValoresPrivado($dataProvider->getModels(), $id_usuario); if ($model->enviarMensajePrivado()) { // Toast::widget(['tipo'=>'success', 'mensaje'=>'Se ha enviado el mensaje']); // Toast::widget(['tipo'=>'success', 'mensaje'=>'Se ha enviado el mensaje']); // Yii::$app->session->setFlash('success', 'Se ha creado la categoria con exito'); } } return $this->controller->render('mensaje-detalle', ['dataProvider' => $dataProvider, 'articulo' => $articulo, 'usuario' => $usuario, 'model' => $model]); }
/** * Actualiza todos los mensajes con la fecha en que se vio * @param $id_conversacion */ public function actualizarMensajesVisto($id_conversacion) { $mensajes = Mensajes::findAll(['conversacion' => $id_conversacion]); $id_usuario = Yii::$app->user->id; $id_mensajes = ''; foreach ($mensajes as $index => $item) { $id_mensajes .= $index == 0 ? $item->idmensaje : ',' . $item->idmensaje; } if (!empty($id_mensajes)) { Notificaciones::updateAll(['leida' => self::VISTO_SI, 'fechaleida' => date('Y-m-d H:i:s')], 'usuario = :usuario and referencia in (:referencia) and referencia_tipo = :referencia_tipo and fechaleida is null', [':usuario' => $id_usuario, ':referencia' => $id_mensajes, ':referencia_tipo' => Notificaciones::REF_MENSAJE]); } }
<?php /** * Created by PhpStorm. * User: alejandro.sosa * Date: 13/03/2016 * Time: 17:04 */ use yii\helpers\Html; use common\models\Notificaciones; $notificaciones = new Notificaciones(); $mensajesTotal = $notificaciones->mensajesSinLeerTotal(Yii::$app->user->getId()); //contadores $contadorMensaje = $mensajesTotal == 0 ? '' : Html::tag('span', $mensajesTotal, ['class' => 'label label-primary pull-right', 'data-toggle' => 'tooltip', 'data-placement' => 'left', 'data-original-title' => Yii::t('micuenta', '{contador} mensajes sin leer', ['contador' => $mensajesTotal]), 'title' => Yii::t('micuenta', '{contador} mensajes sin leer', ['contador' => $mensajesTotal])]); //iconos $icon_anuncios = Html::tag('i', null, ['class' => 'zmdi zmdi-widgets']); $icon_descuentos = Html::tag('i', null, ['class' => 'zmdi zmdi-widgets']); $icon_perfil = Html::tag('i', null, ['class' => 'zmdi zmdi-account-box']); $icon_mensajes = Html::tag('i', null, ['class' => 'zmdi zmdi-email']); $icon_configuracion = Html::tag('i', null, ['class' => 'zmdi zmdi-settings']); $icon_notificacion = Html::tag('i', null, ['class' => 'zmdi zmdi-notifications']); $icon_favoritos = Html::tag('i', null, ['class' => 'zmdi zmdi-favorite']); $icon_busqueda = Html::tag('i', null, ['class' => 'zmdi zmdi-search']); $icon_ayuda = Html::tag('i', null, ['class' => 'zmdi zmdi-help']); //labels $label_anuncios = Html::tag('span', Yii::t('micuenta', 'Mis Anuncios'), []); $label_perfil = Html::tag('span', Yii::t('micuenta', 'Mi perfil'), []); $label_descuentos = Html::tag('span', Yii::t('micuenta', 'Mis Descuentos'), []); $label_mensajes = Html::tag('span', Yii::t('micuenta', 'Mensajes'), []); $label_configuracion = Html::tag('span', Yii::t('micuenta', 'Configuración'), []); $label_notificacion = Html::tag('span', Yii::t('micuenta', 'Notificaciones'), []);
/** * Finds the Notificaciones model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $id * @return Notificaciones the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = Notificaciones::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } }
/** * Actualiza el estado de notificacion a leida * @return bool */ public function actualizar() { if ($this->validate()) { $model = Notificaciones::findOne($this->id); $model->leida = Notificaciones::VISTO_SI; if ($model->save()) { return true; } } return false; }
/** * Actualiza enlace Mensajes del menu usuario * @param int $usuario * @param Notificaciones $mensaje */ public static function actualizarMensajesSinLeerWeb($usuario, Notificaciones $mensaje) { $topic = Yii::$app->websocket->topicPrivado . $usuario; $html = ['tipo' => self::TIPO_MENSAJE, 'parametros' => ['enlace' => $mensaje->conversacionId(), 'cantidad' => 1, 'html' => Html::tag('span', $mensaje->nombreAnuncio(), ['class' => 'anuncio-nombre']) . Html::tag('span', $mensaje->remitente(), ['class' => 'interesado-nombre']) . Html::tag('span', $mensaje->texto(), ['class' => 'interesado-mensaje']) . Html::tag('span', $mensaje->tiempo(), ['class' => 'interesado-tiempo']), 'html2' => ['url' => 'mensaje/' . $mensaje->conversacionId(), 'linkOptions' => ['class' => 'notificacion-usuario']]]]; self::enviar($topic, $html); }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Notificaciones::find(); // add conditions that should always apply here $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } // grid filtering conditions $query->andFilterWhere(['idnotificacion' => $this->idnotificacion, 'usuario' => $this->usuario, 'tipo' => $this->tipo, 'leida' => $this->leida, 'fechacreado' => $this->fechacreado, 'fechaleida' => $this->fechaleida]); $query->andFilterWhere(['like', 'mensaje', $this->mensaje]); $query->groupBy('usuario'); return $dataProvider; }
/** * @return \yii\db\ActiveQuery */ public function getNotificaciones() { return $this->hasMany(Notificaciones::className(), ['usuario' => 'idusuario']); }