/** * Obtengo un transporte para el envio de e-mails. * @return Swift_SmtpTransport */ public static function get_transport() { self::start(); // Cargo las configuraciones. if (file_exists(CONFIG_PATH . DS . 'email.php')) { $config = configuracion_obtener(CONFIG_PATH . DS . 'email.php', FALSE); } else { $config = array(); } // Verifico exista transporte. if (!isset($config['transport'])) { throw new Exception('El tranporte no se encuentra diponible.'); } // Armo nombre de la clase del transporte. $transport_name = 'Swift_' . ucfirst(strtolower($config['transport'])) . 'Transport'; // Verifico exista el transporte. if (!class_exists($transport_name)) { throw new Exception("El tranporte '{$transport_name}' no se encuentra diponible."); } // Cargo el transporte. $transporte = new $transport_name(); // Seteo el resto de configuraciones. if (isset($config['parametros']) && is_array($config['parametros'])) { foreach ($config['parametros'] as $k => $v) { if (strtolower($k) == 'username') { $transporte->setUsername($v); continue; } if (strtolower($k) == 'password') { $transporte->setPassword($v); continue; } if (method_exists($transporte, 'set' . ucfirst($k))) { call_user_func(array($transporte, 'set' . ucfirst($k)), $v); } else { throw new Exception("La propiedad '{$k}' no puede ser fijada en el transporte."); } } } // Devuelvo el transporte. return $transporte; }
/** * Obtenemos el driver de la base de datos. * El driver es el que nos permite interactuar con la base de datos. * @return Database_Driver Driver de la base de datos. */ public static function get_instance() { if (!isset(self::$instance)) { // Cargamos la configuración de la base de datos. $config = configuracion_obtener(CONFIG_PATH . DS . 'database.php', FALSE); // Comprobamos que exista un driver asignado. if (!isset($config['type'])) { throw new Database_Exception('Los parametros de la base de datos son incorrectos. Verifique el driver.'); } // Generamos el nombre de la clase Driver. $driver = 'Database_Driver_' . strtolower($config['type']); // Comprobamos la existencia de ese Driver para manejar la BD. if (!class_exists($driver)) { throw new Database_Exception('No se ha encontrado un controlador válido para manejar las base de datos ' . $config['type']); } else { // Instanciamos el Driver correspondiente. self::$instance = new $driver($config); } } return self::$instance; }
/** * 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()); }
/** * Datos principales de la cuenta. */ public function action_index() { // Asignamos el título. $this->template->assign('title', 'Cuenta'); // Cargamos la vista. $view = View::factory('cuenta/index'); // Cargamos el usuario. $model_usuario = Usuario::usuario(); $model_usuario->perfil()->load_list(array('origen', 'sexo', 'nacimiento')); // Seteamos los datos actuales. $view->assign('error', array()); $view->assign('email', $model_usuario->email); $view->assign('estado_email', 0); $view->assign('origen', Utils::prop($model_usuario->perfil(), 'origen')); $view->assign('estado_origen', 0); $view->assign('sexo', Utils::prop($model_usuario->perfil(), 'sexo')); $view->assign('estado_sexo', 0); $view->assign('nacimiento', explode('-', Utils::prop($model_usuario->perfil(), 'nacimiento'))); $view->assign('estado_nacimiento', 0); // Listado de paises. $lista_pais = configuracion_obtener(CONFIG_PATH . DS . 'geonames.' . FILE_EXT); $view->assign('paices', $lista_pais); if (Request::method() == 'POST') { $errors = array(); // Verificamos el e-mail. if (isset($_POST['email']) && !empty($_POST['email'])) { $view->assign('email', trim($_POST['email'])); // Verificamos el formato de e-mail. if (!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/D', $_POST['email'])) { $errors[] = 'La dirección de email es invólida.'; $view->assign('estado_email', -1); } else { // Verifico no sea el actual. if (trim($_POST['email']) != $model_usuario->email) { $m = trim($_POST['email']); // Verifico no exista un usuario con ese email. if ($model_usuario->exists_email($m)) { $errors[] = 'Ya existe un usuario con ese E-Mail.'; $view->assign('estado_email', -1); } else { // Actualizo la casilla de correo. //TODO: pedir validación de la misma. $model_usuario->cambiar_email($m); $view->assign('email', $m); $view->assign('success', 'Datos actualizados correctamente.'); $view->assign('estado_email', 1); } unset($m); } } } // Verificamos el sexo. if (isset($_POST['sexo']) && !empty($_POST['sexo'])) { $view->assign('sexo', trim($_POST['sexo'])); // Verificamos el valor. if ($_POST['sexo'] != 'f' && $_POST['sexo'] != 'm') { $errors[] = 'El sexo seleccionado no es correcto.'; $view->assign('estado_sexo', -1); } else { // Verifico no sea el actual. if (trim($_POST['sexo']) != Utils::prop($model_usuario->perfil(), 'sexo', NULL)) { // Actualizo sexo. $model_usuario->perfil()->sexo = trim($_POST['sexo']); $view->assign('sexo', trim($_POST['sexo'])); $view->assign('success', 'Datos actualizados correctamente.'); $view->assign('estado_sexo', 1); } } } // Verificamos la fecha de nacimiento. if (isset($_POST['dia']) && !empty($_POST['dia']) && (isset($_POST['mes']) && !empty($_POST['mes'])) && (isset($_POST['ano']) && !empty($_POST['ano']))) { // Obtenemos los parámetros. $ano = (int) $_POST['ano']; $mes = (int) $_POST['mes']; $dia = (int) $_POST['dia']; $error = FALSE; // Verificamos los rangos. if ($dia < 1 || $dia > 31) { $errors[] = 'El día de nacimiento es incorrecto.'; $view->assign('estado_nacimiento', -1); $error = TRUE; } if ($mes < 1 || $mes > 12) { $errors[] = 'El mes de nacimiento es incorrecto.'; $view->assign('estado_nacimiento', -1); $error = TRUE; } if ($ano < 1900 || $dia > date('Y')) { $errors[] = 'El año de nacimiento es incorrecto.'; $view->assign('estado_nacimiento', -1); $error = TRUE; } if (!$error) { // Validamos la fecha. if (!checkdate($mes, $dia, $ano)) { $errors[] = 'La fecha de nacimiento es incorrecta'; $view->assign('estado_nacimiento', -1); } else { // Creamos la fecha. $fecha = $_POST['ano'] . '-' . $_POST['mes'] . '-' . $_POST['dia']; // Verificamos con la actual. if (Utils::prop($model_usuario->perfil(), 'nacimiento', NULL) != $fecha) { $model_usuario->perfil()->nacimiento = $fecha; $view->assign('nacimiento', explode('-', $fecha)); $view->assign('estado_nacimiento', 1); $view->assign('success', 'Datos actualizados correctamente.'); } } } } // Verificamos el pais. if (isset($_POST['origen']) && !empty($_POST['origen'])) { // Obtenemos el pais y el estado. list($pais, $estado) = explode('.', trim(strtoupper($_POST['origen']))); if (!isset($lista_pais[$pais])) { $errors[] = 'El lugar de origen es incorrecto.'; $view->assign('estado_origen', -1); } else { if (!isset($lista_pais[$pais][1][$estado])) { $errors[] = 'El lugar de origen es incorrecto.'; $view->assign('estado_origen', -1); } else { // Verificamos sea distinto al actual. if (Utils::prop($model_usuario->perfil(), 'origen', NULL) != $pais . '.' . $estado) { $model_usuario->perfil()->origen = $pais . '.' . $estado; $view->assign('origen', $pais . '.' . $estado); $view->assign('estado_origen', 1); $view->assign('success', 'Datos actualizados correctamente.'); } } } } $view->assign('error', $errors); } // Menu. $this->template->assign('master_bar', parent::base_menu('inicio')); $this->template->assign('top_bar', $this->submenu('index')); // Asignamos la vista. $this->template->assign('contenido', $view->parse()); }
/** * Contructor de la clase. * Obtenemos las configuraciones de la carga de imagenes. */ public function __construct() { // Cargamos la configuracion. $this->config = configuracion_obtener(CONFIG_PATH . DS . 'upload.' . FILE_EXT); }
/** * Informacion del perfil del usuario. * @param string $usuario ID o nick del usuario. */ public function action_informacion($usuario) { // Cargamos el usuario. $this->cargar_usuario($usuario); // Cargamos la vista de información. $information_view = View::factory('perfil/index'); // Campos a cargar. $fields = array('general' => array('nombre', 'web', 'twitter', 'facebook', 'estudios'), 'vida_personal' => array('hacer_amigos', 'conocer_gente_intereses', 'conocer_gente_negocios', 'encontrar_pareja', 'de_todo', 'estado_civil', 'hijos', 'vivo_con'), 'idioma' => array('idioma_espanol', 'idioma_ingles', 'idioma_portugues', 'idioma_frances', 'idioma_italiano', 'idioma_aleman', 'idioma_otro'), 'datos_profesionales' => array('profesion', 'empresa', 'sector', 'nivel_ingresos', 'intereses_personales', 'habilidades_profesionales'), 'como_es' => array('mi_altura', 'mi_peso', 'color_pelo', 'color_ojos', 'complexion', 'tatuajes', 'piercings'), 'habitos_personales' => array('mi_dieta', 'fumo', 'tomo_alcohol'), 'intereses_y_preferencias' => array('mis_intereses', 'hobbies', 'series_tv_favoritas', 'musica_favorita', 'deportes_y_equipos_favoritos', 'libros_favoritos', 'peliculas_favoritas', 'comida_favorita', 'mis_heroes')); // Cargamos todos los datos del perfil. $load_array = array(); foreach ($fields as $ff) { $load_array = array_merge($load_array, $ff); } $this->usuario->perfil()->load_list($load_array); unset($load_array); // Obtenemos el valor de los campos. foreach ($fields as $k => $field) { $aa = array(); foreach ($field as $v) { if (isset($this->usuario->perfil()->{$v})) { $aa[$v] = $this->usuario->perfil()->{$v}; } } $information_view->assign($k, $aa); } $information_view->assign('usuario', $this->usuario->as_array()); // Procesamos pais. $country = Utils::prop($this->usuario->perfil(), 'origen'); if ($country !== NULL) { $lista_pais = configuracion_obtener(CONFIG_PATH . DS . 'geonames.' . FILE_EXT); $country = explode('.', $country); $information_view->assign('origen', $lista_pais[$country[0]][0] . ', ' . $lista_pais[$country[0]][1][$country[1]]); unset($lista_pais); } unset($country); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $this->header_block($information_view->parse())); unset($information_view); // Seteamos el titulo. $this->template->assign('title', 'Perfil - ' . $this->usuario->get('nick')); }
/** * Obtenemos un driver * @return Cache_Driver */ public static function get_instance() { if (!isset(self::$instance)) { if (file_exists(CONFIG_PATH . DS . 'cache.php')) { // Verificamos si tenemos información de la cache. $data = configuracion_obtener(CONFIG_PATH . DS . 'cache.php'); } else { // Cargamos dummy. $data = array('type' => 'dummy'); } // Comprobamos el tipo de cache. if (!array_key_exists('type', $data)) { throw new Exception('Invalid cache configuration.'); } if ($data['type'] !== NULL) { // Not dummy. // Verificamos el tipo. if (!in_array($data['type'], array('dummy', 'apc', 'file', 'memcached'))) { throw new Exception("Invalid cache type '{$data['type']}'."); } // Verificamos los datos segun el tipo. switch ($data['type']) { case 'dummy': self::$instance = new Cache_Driver_Dummy(); break; case 'apc': self::$instance = new Cache_Driver_Apc(); break; case 'memcached': // Verificamos que tengamos todos los datos. if (!isset($data['hostname']) || !isset($data['port']) || !isset($data['weight'])) { throw new Exception('Invalid cache configuration.'); } // Verificamos que el puerto sea válido. if (!is_int($data['port']) || $data['port'] <= 0) { throw new Exception('El puerto seleccinado no es válido.'); } // Verificamos que la prioridad sea válida if (!is_int($data['weight']) || $data['weight'] < 0) { throw new Exception('La prioridad seleccionada no es correcta.'); } self::$instance = new Cache_Driver_Memcached($data['hostname'], (int) $data['port'], (int) $data['weight']); break; case 'file': // Obtenemos el path. $p = isset($data['path']) ? $data['path'] : APP_BASE . DS . 'cache' . DS . 'file' . DS; // Verificamos que tenga barra final. if (substr($p, -1) !== DS) { $p .= DS; } // Verificamos existencia. if (!file_exists($p) || !is_dir($p)) { // Tratamos de crearlo. @mkdir($p, 0777, TRUE); // Reintentamos creacion. if (!file_exists($p) || !is_dir($p)) { throw new Exception('El directorio para la cache no existe.'); } } // Verificamos los permisos. if (!is_writable($p)) { throw new Exception('El directorio para la cache no tiene permisos de escritura.'); } self::$instance = new Cache_Driver_File($p); break; } } else { // Por defecto es Dummy. self::$instance = new Cache_Driver_Dummy(); } } return self::$instance; }