/** * 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()); }