/** * Instalamos un nuevo tema. */ public function action_instalar_tema() { // Cargamos la vista. $vista = View::factory('admin/configuracion/instalar_tema'); // Valores por defecto. $vista->assign('error_carga', FALSE); if (Request::method() == 'POST') { $error = FALSE; // Verifico el envio correcto de datos. if (isset($_FILES['theme'])) { // Cargo los datos del archivo. $file = $_FILES['theme']; // Verifico el estado. if ($file['error'] !== UPLOAD_ERR_OK) { $error = TRUE; switch ($file['error']) { case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: $vista->assign('error_carga', 'El tamaño del archivo es incorrecto.'); break; case UPLOAD_ERR_PARTIAL: $vista->assign('error_carga', 'Los datos enviados están corruptos.'); break; case UPLOAD_ERR_NO_FILE: $vista->assign('error_carga', 'No has seleccionado un archivo.'); break; case UPLOAD_ERR_NO_TMP_DIR: case UPLOAD_ERR_CANT_WRITE: $vista->assign('error_carga', 'Error interno al cargar el archivo. Reintente. Si el error persiste contacte al administrador.'); break; case UPLOAD_ERR_EXTENSION: $vista->assign('error_carga', 'La configuración del servidor no permite archivo con esa extensión.'); break; } } else { // Cargo el mime. $file['type'] = Update_Utils::get_mime($file['tmp_name']); // Verifico esté dentro de los permitidos. if (!in_array(Update_Utils::mime2compresor($file['type']), Update_Compresion::get_list())) { $error = TRUE; $vista->assign('error_carga', 'El tipo de archivo no es soportado. Verifique la configuración del servidor.'); } } } else { $error = TRUE; $vista->assign('error_carga', 'No has seleccionado un archivo.'); } // Verifico el contenido de los datos. if (!$error) { // Armo directorio temporal para la descargar. $tmp_dir = TMP_PATH . uniqid('pkg_') . DS; mkdir($tmp_dir, 0777, TRUE); // Realizo la descompresión. $compresor = Update_Compresion::get_instance(Update_Utils::mime2compresor($file['type'])); $compresor->set_temp_path($tmp_dir); if (!$compresor->decompress($file['tmp_name'])) { // Limpio salidas. Update_Utils::unlink($file['tmp_name']); Update_Utils::unlink($tmp_dir); // Informo del error. $error = TRUE; $vista->assign('error_carga', 'No se pudo descomprimir el archivo. Compruebe que sea correcto.'); } else { // Verifico que sea correcto. if (is_dir($tmp_dir) && file_exists($tmp_dir . DS . 'theme.php') && file_exists($tmp_dir . DS . 'views') && $tmp_dir . DS . 'assets') { // Cargo configuraciones. $data = configuracion_obtener($tmp_dir . DS . 'theme.php'); // Verifico su contenido. if (is_array($data)) { if (isset($data['nombre']) && isset($data['author'])) { $theme_name = preg_replace('/(\\s|[^a-z0-9])/', '', strtolower($data['nombre'])); } } if (!isset($theme_name)) { // Limpio salidas. Update_Utils::unlink($file['tmp_name']); Update_Utils::unlink($tmp_dir); // Informo del error. $error = TRUE; $vista->assign('error_carga', 'El archivo de descripción del tema es inválido.'); } } else { // Limpio salidas. Update_Utils::unlink($file['tmp_name']); Update_Utils::unlink($tmp_dir); // Informo del error. $error = TRUE; $vista->assign('error_carga', 'No se trata de un tema válido.'); } } } // Genero directorios. if (!$error) { // Generamos el path donde se va a alojar. $target_path = APP_BASE . DS . VIEW_PATH . $theme_name . DS; // Verifico directorio donde alojar. if (!file_exists($target_path)) { // Creo el directorio del tema. if (!@mkdir($target_path, 0777, TRUE)) { // Limpio salidas. Update_Utils::unlink($target_path); Update_Utils::unlink($file['tmp_name']); Update_Utils::unlink($tmp_dir); // Informo del error. $vista->assign('error_carga', '1No se pudo alojar el tema en su lugar correspondiente. Verifica los permisos del directorio de temas.'); $error = TRUE; } } } // Realizo actualizacion. if (!$error) { // Realizo el movimiento. if (!Update_Utils::copyr($tmp_dir, $target_path)) { // Limpio salidas. Update_Utils::unlink($file['tmp_name']); Update_Utils::unlink($tmp_dir); Update_Utils::unlink($target_path); // Informo del error. $vista->assign('error_carga', 'No se pudo alojar el tema en su lugar correspondiente. Verifica los permisos del directorio de temas.'); } else { // Limpio directorios. Update_Utils::unlink($file['tmp_name']); Update_Utils::unlink($tmp_dir); // Informo resultado. $_SESSION['flash_success'] = 'El tema se instaló correctamente.'; // Redireccionamos. Request::redirect('/admin/configuracion/temas'); } } } // Seteamos el menu. $this->template->assign('master_bar', parent::base_menu('admin')); // Cargamos plantilla administracion. $admin_template = View::factory('admin/template'); $admin_template->assign('contenido', $vista->parse()); unset($portada); $admin_template->assign('top_bar', Controller_Admin_Home::submenu('configuracion_temas')); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $admin_template->parse()); }
/** * Editamos una noticia. * @param int $id ID de la noticia a editar. */ public function action_editar_noticia($id) { // Cargamos el modelo de noticia. $model_noticia = new Model_Noticia((int) $id); if (!$model_noticia->existe()) { $_SESSION['flash_error'] = 'Noticia incorrecta.'; Request::redirect('/admin/contenido/noticias'); } // Cargamos la vista. $vista = View::factory('admin/contenido/editar_noticia'); // Valores por defecto y errores. $vista->assign('contenido', $model_noticia->contenido); $vista->assign('error_contenido', FALSE); if (Request::method() == 'POST') { $error = FALSE; // Obtenemos el contenido. $contenido = isset($_POST['contenido']) ? $_POST['contenido'] : NULL; // Quitamos BBCode para dimenciones. $contenido_clean = preg_replace('/\\[([^\\[\\]]+)\\]/', '', $contenido); if (!isset($contenido_clean[10]) || isset($contenido_clean[200])) { $error = TRUE; $vista->assign('error_contenido', 'El contenido debe tener entre 10 y 200 caractéres'); } else { // Evitamos XSS. $contenido = htmlentities($contenido, ENT_NOQUOTES, 'UTF-8'); // Actualizamos el contenido. $model_noticia->actualizar_contenido($contenido); $vista->assign('contenido', $model_noticia->contenido); $vista->assign('success', 'Contenido actualizado correctamente'); } unset($contenido_clean); } // Seteamos el menu. $this->template->assign('master_bar', parent::base_menu('admin')); // Cargamos plantilla administracion. $admin_template = View::factory('admin/template'); $admin_template->assign('contenido', $vista->parse()); unset($portada); $admin_template->assign('top_bar', Controller_Admin_Home::submenu('contenido_noticias')); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $admin_template->parse()); }
/** * Menu principal. * @param string $selected Clave seleccionada. * @return array */ protected function base_menu($selected = NULL) { $data = array(); // Listado de elementos ONLINE. if (Usuario::is_login()) { $data['inicio'] = array('link' => '/perfil/', 'caption' => 'Inicio', 'icon' => 'home', 'active' => FALSE); } // Listado de elemento OFFLINE. $data['posts'] = array('link' => '/', 'caption' => 'Posts', 'icon' => 'book', 'active' => FALSE); $data['fotos'] = array('link' => '/foto/', 'caption' => 'Fotos', 'icon' => 'picture', 'active' => FALSE); $data['tops'] = array('link' => '/tops/', 'caption' => 'TOPs', 'icon' => 'signal', 'active' => FALSE); // Listado elemento por permisos. if (Controller_Moderar_Home::permisos_acceso()) { $data['moderar'] = array('link' => '/moderar/', 'caption' => 'Moderación', 'icon' => 'eye-open', 'active' => FALSE); } if (Controller_Admin_Home::permisos_acceso()) { $data['admin'] = array('link' => '/admin/', 'caption' => 'Administración', 'icon' => 'certificate', 'active' => FALSE); } // Seleccionamos elemento. if ($selected !== NULL && isset($data[$selected])) { $data[$selected]['active'] = TRUE; } else { $data['posts']['active'] = TRUE; } return $data; }
/** * Listado de sessiones de usuarios activas. * @param int $pagina Número de página a mostrar. */ public function action_sesiones($pagina) { // Formato de la página. $pagina = (int) $pagina > 0 ? (int) $pagina : 1; // Cantidad de elementos por pagina. $cantidad_por_pagina = 20; // Cargamos la vista. $vista = View::factory('admin/usuario/sesiones'); // Modelo de sessiones. $model_session = new Model_Session(session_id()); // Quitamos sessiones terminadas. $model_session->limpiar(); // Cargamos el listado de usuarios. $lst = $model_session->listado($pagina, $cantidad_por_pagina); // Paginación. $paginador = new Paginator($model_session->cantidad(), $cantidad_por_pagina); $vista->assign('paginacion', $paginador->get_view($pagina, '/admin/usuario/sessiones/%s/')); // Obtenemos datos de las noticias. foreach ($lst as $k => $v) { $a = $v->as_array(); $a['usuario'] = $v->usuario()->as_array(); $a['ip_raw'] = $a['ip']; $a['ip'] = long2ip($a['ip']); $lst[$k] = $a; } // Seteamos listado de noticias. $vista->assign('sesiones', $lst); unset($lst); // Seteamos el menu. $this->template->assign('master_bar', parent::base_menu('admin')); // Cargamos plantilla administracion. $admin_template = View::factory('admin/template'); $admin_template->assign('contenido', $vista->parse()); unset($portada); $admin_template->assign('top_bar', Controller_Admin_Home::submenu('usuario_sesiones')); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $admin_template->parse()); }