/** * Editamos una foto. * @param int $foto ID de la foto a editar. */ public function action_editar($foto) { // Verificamos usuario conectado. if (!Usuario::is_login()) { $_SESSION['flash_error'] = 'Debes iniciar sessión para editar fotos.'; Request::redirect('/usuario/login/', TRUE); } // Cargamos la foto. $foto = (int) $foto; $model_foto = new Model_Foto($foto); // Verifico la existencia. if (!$model_foto->existe()) { $_SESSION['flash_error'] = 'La foto que quiere editar no se encuentra disponible.'; Request::redirect('/foto/'); } // Verifico los permisos. if ($model_foto->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_EDITAR)) { $_SESSION['flash_error'] = 'La foto que deseas editar no se encuentra disponible.'; Request::redirect('/foto/ver/' . $foto); } // Asignamos el título. $this->template->assign('title', 'Editar foto'); // Cargamos la vista. $view = View::factory('foto/editar'); $view->assign('foto', $model_foto->id); // Cargo valores actuales. $view->assign('titulo', $model_foto->titulo); $view->assign('descripcion', $model_foto->descripcion); $view->assign('comentarios', $model_foto->comentar); $view->assign('visitantes', $model_foto->visitas !== NULL); // Inicializo los errores. $view->assign('error_titulo', FALSE); $view->assign('error_descripcion', FALSE); // Menu. $this->template->assign('master_bar', parent::base_menu('fotos')); $this->template->assign('top_bar', $this->submenu('index')); if (Request::method() == 'POST') { $error = FALSE; // Obtenemos los datos y seteamos valores. foreach (array('titulo', 'descripcion') 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); // Actualizamos los datos. if (!$error) { // Evitamos XSS. $descripcion = htmlentities($descripcion, ENT_NOQUOTES, 'UTF-8'); // Formateamos los campos. $titulo = trim(preg_replace('/\\s+/', ' ', $titulo)); // Listado de campos a actualizar. $campos = array('titulo' => $titulo, 'descripcion' => $descripcion, 'comentar' => $comentarios, 'visitas' => $visitantes ? $model_foto->visitas !== NULL ? $model_foto->visitas : 0 : NULL); // Actualizo los datos. if ($model_foto->actualizar_campos($campos)) { // Agregamos el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_foto->usuario_id) { $model_suceso->crear($model_foto->usuario_id, 'foto_editar', TRUE, $model_foto->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'foto_editar', FALSE, $model_foto->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_foto->usuario_id, 'foto_editar', FALSE, $model_foto->id, Usuario::$usuario_id); } $_SESSION['flash_success'] = 'La foto se ha actualizado correctamente.'; Request::redirect('/foto/ver/' . $model_foto->id); } } } // Asignamos la vista. $this->template->assign('contenido', $view->parse()); }