Ejemplo n.º 1
0
Archivo: foto.php Proyecto: 4bs4/marifa
 /**
  * Agregamos una nueva foto.
  */
 public function action_nueva()
 {
     // Verificamos usuario conectado.
     if (!Usuario::is_login()) {
         $_SESSION['flash_error'] = 'Debes loguearte para poder agregar fotos.';
         Request::redirect('/usuario/login');
     }
     // Verifico los permisos para crear foto.
     if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_CREAR)) {
         $_SESSION['flash_error'] = 'No tienes permisos para crear fotos.';
         Request::redirect('/foto/');
     }
     // Asignamos el título.
     $this->template->assign('title', 'Nueva foto');
     // Cargamos la vista.
     $view = View::factory('foto/nueva');
     // Cargo el listado de categorias.
     $model_categorias = new Model_Categoria();
     $categorias = $model_categorias->lista();
     $view->assign('categorias', $categorias);
     // Elementos por defecto.
     foreach (array('titulo', 'url', 'descripcion', 'comentarios', 'visitantes', 'categoria', 'error_titulo', 'error_url', 'error_descripcion', 'error_categoria') as $k) {
         $view->assign($k, '');
     }
     // Menu.
     $this->template->assign('master_bar', parent::base_menu('fotos'));
     $this->template->assign('top_bar', $this->submenu('nuevo'));
     if (Request::method() == 'POST') {
         $error = FALSE;
         // Obtenemos los datos y seteamos valores.
         foreach (array('titulo', 'url', 'descripcion', 'categoria') as $k) {
             ${$k} = isset($_POST[$k]) ? $_POST[$k] : '';
             $view->assign($k, ${$k});
         }
         // Obtenemos los checkbox.
         $visitantes = isset($_POST['visitantes']) ? $_POST['visitantes'] == 1 : FALSE;
         $view->assign('visitantes', $visitantes);
         $comentarios = isset($_POST['comentarios']) ? $_POST['comentarios'] == 1 : FALSE;
         $view->assign('comentarios', $comentarios);
         // Verificamos el titulo.
         if (!preg_match('/^[a-zA-Z0-9áéíóú\\-,\\.:\\s]{6,60}$/D', $titulo)) {
             $view->assign('error_titulo', 'El formato del título no es correcto.');
             $error = TRUE;
         }
         // Verificamos quitando BBCODE.
         $descripcion_clean = preg_replace('/\\[([^\\[\\]]+)\\]/', '', $descripcion);
         // Verificamos la descripcion.
         if (!isset($descripcion_clean[20]) || isset($descripcion[600])) {
             $view->assign('error_descripcion', 'La descripción debe tener entre 20 y 600 caractéres.');
             $error = TRUE;
         }
         unset($contenido_clean);
         // Verificamos la URL.
         if (!preg_match('/^(http|https):\\/\\/([A-Z0-9][A-Z0-9_-]*(?:\\.[A-Z0-9][A-Z0-9_-]*)+):?(\\d+)?\\/?/Di', $url)) {
             // Verifico IMG.
             if (!isset($_FILES['img']) || $_FILES['img']['error'] == UPLOAD_ERR_NO_FILE) {
                 $view->assign('error_url', 'La dirección de la URL no es válida.');
                 $error = TRUE;
             }
         }
         // Verifico la categoria.
         if (!$model_categorias->existe_seo($categoria)) {
             $view->assign('error_categoria', 'La categoria seleccionada es incorrecta.');
             $error = TRUE;
         }
         // Proceso de verificación de método de carga de la imagen.
         if (!$error) {
             if (!isset($_FILES['img']) || $_FILES['img']['error'] == UPLOAD_ERR_NO_FILE) {
                 $upload = new Upload_Imagen();
                 try {
                     $rst = $upload->from_url($url);
                     if ($rst) {
                         $url = $rst;
                     } else {
                         $view->assign('error_url', 'Se produjo un error al cargar la imagen.');
                         $error = TRUE;
                     }
                 } catch (Exception $e) {
                     $view->assign('error_url', $e->getMessage());
                     $error = TRUE;
                 }
             } else {
                 // Verifico la imagen.
                 $upload = new Upload_Imagen();
                 try {
                     $rst = $upload->procesar_imagen('img');
                     if ($rst) {
                         $url = $rst;
                     } else {
                         $view->assign('error_url', 'Se produjo un error al cargar la imagen.');
                         $error = TRUE;
                     }
                 } catch (Exception $e) {
                     $view->assign('error_url', $e->getMessage());
                     $error = TRUE;
                 }
             }
         }
         // Procedemos a crear la imagen.
         if (!$error) {
             // Evitamos XSS.
             $descripcion = htmlentities($descripcion, ENT_NOQUOTES, 'UTF-8');
             // Formateamos los campos.
             $titulo = trim(preg_replace('/\\s+/', ' ', $titulo));
             // Obtengo el ID de la categoria.
             $model_categorias->load_by_seo($categoria);
             //TODO: implementar en revisión.
             // $estado = Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_REVISAR_CONTENIDO) ? Model_Foto::ESTADO_OCULTA : Model_Foto::ESTADO_ACTIVA;
             $estado = Model_Foto::ESTADO_ACTIVA;
             $model_foto = new Model_Foto();
             $foto_id = $model_foto->crear(Usuario::$usuario_id, $titulo, $descripcion, $url, $model_categorias->id, $visitantes, $comentarios, $estado);
             if ($foto_id > 0) {
                 // Envio el suceso.
                 $model_suceso = new Model_Suceso();
                 $model_suceso->crear(Usuario::$usuario_id, 'foto_nueva', FALSE, $model_foto->id);
                 // Informo el resultado.
                 $_SESSION['flash_success'] = 'Foto creada correctamente.';
                 Request::redirect('/foto/ver/' . $model_foto->id);
             } else {
                 $view->assign('error', 'Se produjo un error cuando se creaba la foto. Reintente.');
             }
         }
     }
     // Asignamos la vista.
     $this->template->assign('contenido', $view->parse());
 }