Codeigniter - ayuda como hacer una comunicacion interna (intranet) con codeigniter

 
Vista:
sin imagen de perfil

ayuda como hacer una comunicacion interna (intranet) con codeigniter

Publicado por Cesar Eduardo (1 intervención) el 29/08/2017 16:50:01
Hola, buen día, estoy tratando de hacer una comunicación interna (mensajes) en codeigniter, soy novato en este framework, he estado tratando de ver como hacer para cuando el Administrador envié un mensaje hacia algún usuario en especifico a este le notifique que tiene un nuevo mensaje por parte del administrador, ¿alguna idea de como hacer para que me notifique?

Este es mi controlador;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public function nuevo_Interna(){
	if($this->session->userdata('logeado')){
		if($this->session->userdata('nivel') == 2){
			$data['titulo'] = "Mensaje  ";
			$data['subtitulo'] = "Nuevo";
			$menu['menu'] = $this->menu_model->crear_menu();
			$menu_activo['menu_activo']= "inbox";
			$data['modulo'] = "nuevo_mensaje";
			$data['fecha'] = $this->datos_model->VerRegistros('cedha_mensajes','fecha');
			$data['turnado'] = $this->datos_model->VerRegistrosWHERE('usuarios','nombre',array('nivel_id' => 1));
			$data['mensaje'] = $this->datos_model->VerRegistros('cedha_mensajes','mensaje');
			$data['expediente'] = $this->datos_model->VerRegistros('cedha_mensajes','expediente');
			$data['estatus'] = $this->datos_model->VerRegistros('cedha_mensajes','estatus');
			$data['descripcion'] = $this->datos_model->VerRegistros('cedha_mensajes_estatus','descripcion');
 
			$this->load->view('constructor/head');
			$this->load->view('constructor/sidebar',$menu);
			$this->load->view('mensajes/Nuevo',$data);
			$this->load->view('constructor/librerias');
			$this->load->view('mensajes/funciones',$data);
			$this->load->view('constructor/footer',$menu_activo);
		} else {
			redirect('user/index');
		}
	} else {
		$this->load->view('autenticar/login');
		$this->load->view('autenticar/funciones');
	}
}
public function guardar_nuevo_mensaje(){
	if($this->session->userdata('logeado')){
			if($_POST['expediente'] == 0){
				$expediente_folio= $this->Mensajes_model->CheckMensajeFolio();
				$expediente_anio= date('Y');
				$expedienteMensaje= $expediente_folio.'/'.$expediente_anio;
 
				$data= array('fecha' => $_POST['fecha'], //inserta fecha
							 'expediente_anio' => $expediente_anio, // trae el año
							 'usuario_origen' => $this->input->post('usuario'), //trae el usuario logueado
							 'usuario_destino' => $_POST['turnado'], // trae a la persona turnada para el envio
							 'mensaje' => $_POST['descripcion_mensaje'], //trae el mensaje
							 'expediente' => $expedienteMensaje, // se hace el numero del expediente a mostrar
							 'expediente_folio' => $expediente_folio, //se inseta el numero de folio
							 'estatus' => $_POST['descripcion_estatus'], // trae la descripcion del status
							 'adjunto' => $_POST['archivo1']); //obtiene el archivo para guardarlo
				$ExpedienteID= $this->datos_model->InsertarRegistroID('cedha_mensajes',$data);
			}
		echo $ExpedienteID;
		//alert('guardado');
	}
}

Este es mi modelo;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
class Mensajes_model extends CI_Model {
    public function __construct(){
        parent::__construct();
    }
    public function CheckMensajeFolio(){
        $anio= date('Y');
        $buscar_anio= $this->db->get_where('cedha_mensajes',array('expediente_anio' => $anio));
        if ($buscar_anio->num_rows() == 0){
            return 1;
        } else {
            $qxry= $this->db
                        ->from('cedha_mensajes')
                        ->where('expediente_anio',$anio)
                        ->order_by('expediente_folio','DESC')
                        ->limit(1)
                        ->get();
            $folio= $qxry->row()->expediente_folio + 1;
            return $folio;
        }
    }
    public function GetMensajes($fecha){
        $this->db->select('row_id,
                           fecha,
                           expediente,
                           usuario_origen,
                           usuario_destino,
                           mensaje,
                           estatus,
                           expediente_folio,
                           expediente_anio');
        $this->db->FROM('cedha_mensajes','row_id=expediente','LEFT');
        $this->db->order_by('expediente_folio','DESC');
        $this->db->order_by('expediente_anio','DESC');
        $qxry= $this->db->get();
        return $qxry->result();
    }
 
}
public function InsertarRegistroID($tabla,$data){
	$query= $this->db->insert($tabla,$data);
	$id= $this->db->insert_id();
	return $id;
}

Y aqui es donde quiero que me notifique;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<ul class="nav navbar-nav navbar-right">
	<li class="dropdown">
		<a href="javascript:;" data-toggle="dropdown" class="dropdown-toggle f-s-14">
			<i class="fa fa-bell-o"></i>
			<span class="label">0</span>
		</a>
		<ul class="dropdown-menu media-list pull-right animated fadeInDown">
            <li class="dropdown-header">Notifications (5)</li>
            <li class="media">
                <a href="javascript:;">
                    <div class="media-left"><i class="fa fa-bug media-object bg-red"></i></div>
                </a>
            </li>
           <li class="media">
                <a href="javascript:;">
                    <div class="media-left"><i class="fa fa-envelope media-object bg-blue"></i></div>
                    <div class="media-body">
                        <h6 class="media-heading">Mensaje</h6>
                        <div class="text-muted f-s-11">Hace tantos minutos</div>
                    </div>
                </a>
            </li>
            <!--<li class="dropdown-footer text-center">
                <a href="javascript:;">View more</a>
            </li> -->
        </ul>

No se si puedan ayudarme en como hacerlo o como hacerle, les agradezco su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación de notificaciones de mensajes internos

Publicado por Alejandro (44 intervenciones) el 01/09/2023 22:19:59
Para implementar notificaciones en tiempo real en tu aplicación CodeIgniter, especialmente para mensajes internos entre usuarios y administradores, puedes considerar el uso de tecnologías como WebSockets o AJAX con temporizadores para comprobar nuevas notificaciones en el servidor. Aquí hay una guía general sobre cómo podrías implementar esto:

1. Establece una tabla para notificaciones:
- Crea una tabla en tu base de datos para almacenar las notificaciones. Esta tabla podría contener campos como el ID del mensaje, el ID del destinatario, el contenido del mensaje, el estado de lectura, la fecha de creación, etc.

2. Implementa una función para enviar notificaciones:
- En tu controlador, crea una función que permita al administrador enviar notificaciones a usuarios específicos. Cuando se envía una notificación, inserta un registro en la tabla de notificaciones.

3. Actualiza la vista de notificaciones:
- En tu vista, muestra un ícono de notificación (como el icono de campana que mencionaste) que indica la cantidad de notificaciones no leídas.
- Utiliza JavaScript para realizar solicitudes AJAX periódicas al servidor para verificar si hay nuevas notificaciones para el usuario actual.

4. Marcar notificaciones como leídas:
- Cuando un usuario ve una notificación, marca esa notificación como leída en la base de datos.

5. Implementa un sistema de tiempo real (opcional):
- Si deseas notificaciones en tiempo real, considera implementar WebSocket utilizando una biblioteca como Ratchet o utilizar una plataforma de notificaciones en tiempo real como Firebase Cloud Messaging (FCM).

Aquí hay un ejemplo simple de cómo podrías implementar la comprobación periódica de notificaciones en JavaScript usando AJAX:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function checkNotifications() {
    $.ajax({
        url: '/tu/controlador/obtener_notificaciones', // Reemplaza con la URL correcta
        method: 'GET',
        dataType: 'json',
        success: function(response) {
            if (response.count > 0) {
                // Actualiza el número de notificaciones no leídas en el ícono de notificación
                $('.notification-icon .label').text(response.count);
                // Muestra las notificaciones en una lista desplegable o ventana modal
                // Puedes actualizar esta parte según tu diseño
                // ...
            }
        }
    });
}
 
// Realiza la comprobación de notificaciones cada 30 segundos
setInterval(checkNotifications, 30000);

6. Implementa la función en el controlador:
- Crea una función en tu controlador que devuelva las notificaciones no leídas para el usuario actual.

7. Marcar notificaciones como leídas (opcional):
- Agrega la funcionalidad para que los usuarios puedan marcar las notificaciones como leídas cuando las vean.

Ten en cuenta que esta es una implementación básica de notificaciones y que hay muchas formas de mejorarla y personalizarla según las necesidades de tu aplicación. También, si deseas notificaciones en tiempo real, deberás investigar y utilizar una solución de WebSocket o similar para lograrlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar