Sistema de comentarios con panel de administración

DEMOSTRACIÓN

DESCARGA

Saludos esta vez traemos un sistema de comentarios con panel de administración, que nos servirá para autorizar y revisar cada comentario que se haya publicado en el sitio.

A su vez para poder publicar un comentario el usuario deberá registrarse a una base de datos , para asi tener un control de quién comenta.

Este sistema de sesión consta de autentificación vía email.

En una publicación anterior esta no usaba un inicio de sesión y su demostración estaba obsoleta, pero esto a sido mejorado.

La estructura para el sistema es el siguiente:

Para no hacer este post muy largo, vamos a ver los archivos mas importantes, ya que en la descarga y la demostración se podrá verificar su funcionamiento.

Empecemos.

Crearemos 3 tablas para este procedimiento :

Tabla : panel_mvc_admin_comentarios

  CREATE TABLE `panel_mvc_admin_comentarios` (
  `id` bigint(10) NOT NULL AUTO_INCREMENT,
  `parent` bigint(10) NOT NULL,
  `user` bigint(10) NOT NULL,
  `fecha` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `comentario` text COLLATE utf8mb4_spanish2_ci NOT NULL,
  `fecha_actu` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `estado` varchar(1) COLLATE utf8mb4_spanish2_ci NOT NULL DEFAULT 's',
  `love` bigint(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_spanish2_ci;
ALTER TABLE `panel_mvc_admin_comentarios`
  ADD PRIMARY KEY (`id`);

Tabla : panel_mvc_admin_rangos

  CREATE TABLE `panel_mvc_admin_rangos` (
  `id_rango` int(10) NOT NULL AUTO_INCREMENT,
  `parent_rango` int(10) NOT NULL,
  `nombre_rango` varchar(50) COLLATE utf8mb4_spanish2_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_spanish2_ci;
INSERT INTO `panel_mvc_admin_rangos` (`id_rango`, `parent_rango`, `nombre_rango`) VALUES
(1, 1, 'Usuario'),
(2, 2, 'Moderador'),
(3, 3, 'Administrador'),
(4, 0, 'Baneado');
ALTER TABLE `panel_mvc_admin_rangos`
  ADD PRIMARY KEY (`id_rango`);

Tabla : panel_mvc_admin_usuarios

  CREATE TABLE `panel_mvc_admin_usuarios` (
  `id_user` bigint(10) NOT NULL AUTO_INCREMENT,
  `nombre_user` varchar(150) COLLATE utf8mb4_spanish2_ci NOT NULL,
  `email_user` varchar(150) COLLATE utf8mb4_spanish2_ci NOT NULL,
  `pass_user` varchar(100) COLLATE utf8mb4_spanish2_ci NOT NULL,
  `img_user` varchar(100) COLLATE utf8mb4_spanish2_ci NOT NULL DEFAULT 'user.png',
  `estado_user` varchar(1) COLLATE utf8mb4_spanish2_ci NOT NULL DEFAULT 'p',
  `rango_user` int(1) NOT NULL DEFAULT '3',
  `ip_user` varchar(15) COLLATE utf8mb4_spanish2_ci NOT NULL,
  `fecha_ing` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `cod_ver` varchar(100) COLLATE utf8mb4_spanish2_ci DEFAULT NULL,
  `key_pass` varchar(50) COLLATE utf8mb4_spanish2_ci DEFAULT NULL,
  `new_pass` varchar(100) COLLATE utf8mb4_spanish2_ci DEFAULT NULL,
  `act_usuario` datetime DEFAULT '0000-00-00 00:00:00',
  `ult_conexion` int(50) NOT NULL,
  `notif` int(1) NOT NULL DEFAULT '1'
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_spanish2_ci;
ALTER TABLE `panel_mvc_admin_usuarios`
  ADD PRIMARY KEY (`id_user`);

Controladores :

Son los encargados de interactuar con los modelos y las vistas.No hay mucho que decir de ellos.

Helpers:

Son archivos que nos ayudarán a realizar acciones en nuestro sitio ejemplo:

  1. EmailLogin.php
  2. EmailRegistro.php
  3. SendMailComment.php

Estos archivos obtienen datos de los modelos y a su vez crean una vista HTML para el usuario final.

Model o Modelos:

Conexion.php : Creará una conexión con la base de datos aquí no se encuentra la configuración asi que dejemolos así como está.
Usuarios.php : Tiene funciones especiales para obtener o registrar datos de la tabla panel_mvc_admin_usuarios

//Registra un usuario a la base de datos
public function RegistrarUsuario($datos){
  $query = $this->db_connect()->prepare("INSERT INTO $this->tabla (nombre_user, email_user, pass_user, ip_user, fecha_ing, cod_ver, act_usuario, ult_conexion) VALUES (:nombreuser, :emailuser, :passuser, :ipuser, :fechaing, :codver, :actusuario, :ultconexion)");
  $query->bindvalue(':nombreuser', $datos['nombre'], PDO::PARAM_STR);
  $query->bindvalue(':emailuser', $datos['email'], PDO::PARAM_STR);
  $query->bindvalue(':passuser', $datos['clave_crypt'], PDO::PARAM_STR);
  $query->bindvalue(':ipuser', $datos['ip_user'], PDO::PARAM_STR);
  $query->bindvalue(':fechaing', $datos['curr_timestamp'], PDO::PARAM_STR);
  $query->bindvalue(':codver', $datos['keyreg'], PDO::PARAM_STR);
  $query->bindvalue(':actusuario', $datos['curr_timestamp'], PDO::PARAM_STR);
  $query->bindvalue(':ultconexion', $datos['time'], PDO::PARAM_INT);
  if($query->execute()){
    true;
  }else{
    echo 'Hubo un error al registrar usuario contacte con el administrador.';
  }
}
//Obtenemos todos los registros de la Tabla en orden descendente.
public function AllUsers(){
  $query = $this->db_connect()->prepare("SELECT * FROM $this->tabla ORDER BY id_user DESC;");
  $query->execute();
  $Allusers = $query->fetchAll(PDO::FETCH_OBJ);
  return $Allusers;
}

Comentarios.php : Aquí tenemos funciones para hacer llamadas a la tabla.

//Con esta función chequeamos a los usuarios donde los estados sean igual a s (publicados)
  public function CheckComment() {
    $comments=array();
    $sql_comment = $this->db_connect()->query("SELECT * FROM $this->tabla WHERE estado = 's' ORDER BY id ASC");
     while($row = $sql_comment->fetch(PDO::FETCH_ASSOC)){
      if($row['parent']==0)
       $comments[$row['id']] = $row;
       else
       {
         if(!$comments[$row['parent']]) continue;

         $comments[$row['parent']]['resp'][] = $row;
       }
     }
     $sql_comment->closeCursor();
     return $comments;
  }

Carpeta Public :

Aquí encontraremos archivos de ayuda ejemplo:

  1. ajax/bin/login.php
  2. ajax/bin/new_comment.php
  3. ajax/bin/registro.php
  4. public/setup.php

Estos archivos contienen funciones y métodos de ingresos que sirven de ayuda a los modelos.

Carpeta Vendor :

Esta carpeta a sido descargada vía composer para usar phpmailer, no olvidemos configurar mas adelante los datos
de envío y recepción de emails.

Carpeta View :

Aquí se encuentra las vista que se genera al usuario para que interactúe con el controlador y este a su vez con las tablas.

index.php : Esta obtiene una función importante, ejemplo de cómo mostrar los comentarios mediante un foreach.

  <?php
    //$CheckComment creamos esta instancia para usarla y  pasarsela a $c
    foreach($CheckComment as $c){
      // a su vez showComment es una función creada en setup.php y le pasamos los parámetros
      // de $c
      showComment($c);
    }
    ?>

al final del index encontraremos funciones de javascript que nos servirá para crear un nuevo comentario
vía ajax. Vease su funcionamiento en la demostración.

En el directorio principal tenemos :

index.php : Aquí cargaremos la página principal del sitio con sus respectivos controladores.

  Cargamos los controladores y estos a su vez las vistas
if(isset($_GET['view'])) {
   if(file_exists( ROOT_PATH . 'controller/' . strtolower($_GET['view']) .'.'.$ext )) {
     include( ROOT_PATH . 'controller/' . strtolower($_GET['view']) .'.'.$ext );
   } else {
     //si no encuentra el controlador nos muestra una pagina de error
     include( ROOT_PATH.'controller/404.'.$ext );
   }
 } else {
   //nos muestra el index si no se carga ningun controlador
   include( ROOT_PATH.'controller/index.'.$ext );
 }

config.php : Aquí cargaremos archivos de configuración del sitio, no olvidar configurar phpmailer para poder registrar usuarios (recibir notificaciones de respuestas  e inicios de sesión).

  /** El nombre de tu base de datos */
  define( 'DB_NAME', 'database' );

  /** Tu nombre de usuario de MySQL */
  define( 'DB_USER', 'root' );

  /** Tu contraseña de MySQL */
  define( 'DB_PASS', '' );

  /** Host de MySQL (es muy probable que no necesites cambiarlo) */
  define( 'DB_HOST', 'localhost' );

  /** Codificación de caracteres para la base de datos. */
  define( 'DB_CHARSET', 'utf8mb4' );

  #Config PHPMailer
  define( 'PHPMAILER_HOST', 'mail.dominio.com' );

  define( 'PHPMAILER_USER', 'contacto@dominio.com' );

  define( 'PHPMAILER_PASS', 'password' );

  define( 'PHPMAILER_PORT', 465 );

Espero que este sistema de comentarios con panel de administración les sirva en algún proyecto gracias hasta la próxima.

 

DESCARGAR VERSIÓN COMPLETA

Relacionado