示例#1
0
文件: email.php 项目: 4bs4/marifa
 /**
  * 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;
 }
示例#2
0
文件: database.php 项目: 4bs4/marifa
 /**
  * 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;
 }
示例#3
0
 /**
  * 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());
 }
示例#4
0
文件: cuenta.php 项目: 4bs4/marifa
 /**
  * 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());
 }
示例#5
0
文件: imagen.php 项目: 4bs4/marifa
 /**
  * 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);
 }
示例#6
0
文件: perfil.php 项目: 4bs4/marifa
 /**
  * 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'));
 }
示例#7
0
文件: cache.php 项目: 4bs4/marifa
 /**
  * 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;
 }