/** * 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]); } }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function buscarMensajesUsuario($params, $usuario = null) { $query = Mensajes::find()->with('articulos', 'usuarios'); $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['pageSize' => 25], 'sort' => ['defaultOrder' => ['fechacreado' => SORT_DESC]]]); $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; } $query->andFilterWhere(['idmensaje' => $this->idmensaje, 'articulo' => $this->articulo, 'usuario' => $this->usuario, 'fechacreado' => $this->fechacreado, 'fechavisto' => $this->fechavisto]); $query->andFilterWhere(['like', 'texto', $this->texto]); if (!empty($usuario)) { $query->andWhere('usuario <> :id', [':id' => $usuario]); //$query->andWhere('usuarios.idusuario = :id',[':id'=>$usuario]); } $query->orderBy(['fechacreado' => SORT_ASC]); $query->groupBy('articulos.nombre'); return $dataProvider; }
/** * @return \yii\db\ActiveQuery */ public function getMensajes() { return $this->hasMany(Mensajes::className(), ['conversacion' => 'idconversacion'])->viaTable('conversaciones', ['articulo' => 'idarticulo']); // ->via('conversaciones'); }
/** * @return \yii\db\ActiveQuery */ public function getMensajes() { return $this->hasMany(Mensajes::className(), ['usuario' => 'idusuario']); }
/** * @return \yii\db\ActiveQuery */ public function getMensajes() { return $this->hasMany(Mensajes::className(), ['conversacion' => 'idconversacion'])->orderBy(['fechacreado' => SORT_ASC]); }
/** * Envia un mensaje al propietario o interesado * Desde el frontend en el detalle del anuncio * Se crea una notificacion para el propietario * @return bool */ public function enviarMensajePublico() { $model = new Mensajes(); $this->scenario = self::ESCENARIO_PUBLICO; if ($this->validate()) { $model->texto = !empty($this->texto) ? ucfirst($this->texto) : self::TEXTO; $model->articulo = $this->articulo; $model->usuario = $this->usuario; $model->tipo = $this->tipo; $model->conversacion = $this->conversacion; if ($model->save(false)) { // echo '<pre>';print_r(['',$this->_conversacion->upropietario]);die(); $notificacion = new CrearNotificacionForm(); $notificacion->scenario = CrearNotificacionForm::ESCENARIO_CREAR_POR_MENSAJE; $notificacion->usuario = $this->_conversacion->propietario; $notificacion->tipo = NotificacionesTipo::TIPO_MENSAJE; $notificacion->referencia = $model->idmensaje; $notificacion->referencia_tipo = Notificaciones::REF_MENSAJE; $notificacion->mensaje = strlen($model->texto) > 85 ? substr($model->texto, 0, 85) . '...' : $model->texto; $notificacion->leida = Notificaciones::VISTO_NO; $notificacion->crear(); return true; } } return false; }
/** * Actualiza todos los mensajes con la fecha en que se vio * @param $id_conversacion */ public function actualizarFechaVisto($id_conversacion) { $conversacion = Conversaciones::findOne(['idconversacion' => $id_conversacion]); $id_usuario = Yii::$app->user->id; $tipo_usuario = $conversacion->articulos->usuario == $id_usuario ? self::INTERESADO : self::PROPIETARIO; if (!empty($id_conversacion)) { Mensajes::updateAll(['fechavisto' => date('Y-m-d H:i:s')], 'conversacion = :conversacion and tipo = :tipo and fechavisto is null', [':conversacion' => $id_conversacion, ':tipo' => $tipo_usuario]); } }