Ejemplo n.º 1
0
 * Copyright (C) SowerPHP (http://sowerphp.org)
 *
 * Este programa es software libre: usted puede redistribuirlo y/o
 * modificarlo bajo los términos de la Licencia Pública General Affero de GNU
 * publicada por la Fundación para el Software Libre, ya sea la versión
 * 3 de la Licencia, o (a su elección) cualquier versión posterior de la
 * misma.
 *
 * Este programa se distribuye con la esperanza de que sea útil, pero
 * SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita
 * MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
 * Consulte los detalles de la Licencia Pública General Affero de GNU para
 * obtener una información más detallada.
 *
 * Debería haber recibido una copia de la Licencia Pública General Affero de GNU
 * junto a este programa.
 * En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
 */
namespace sowerphp\core;

/**
 * @file es.php
 * Reglas de español para clase Inflector
 * @author http://joecabezas.tumblr.com/post/572538183/espanolizando-cakephp-mediante-inflections-version
 * @version 2014-05-10
 */
// reglas para pasar de plural a singular
Utility_Inflector::rules('singular', array('rules' => array('/bles$/i' => 'ble', '/ses$/i' => 's', '/([r|d|j|n|l|m|y|z])es$/i' => '\\1', '/as$/i' => 'a', '/([ti])a$/i' => '\\1a'), 'irregular' => array(), 'uninflected' => array()));
// reglas para pasar de singular a plural
Utility_Inflector::rules('plural', array('rules' => array('/([r|d|j|n|l|m|y|z])$/i' => '\\1es', '/a$/i' => '\\1as'), 'irregular' => array('pais' => 'paises'), 'uninflected' => array()));
Ejemplo n.º 2
0
 /**
  * Método que obtiene un objeto que es FK de este
  * @param fk Nombre de la clase que es la FK (sin Model_)
  * @param args Argunentos con la PK del objeto que es FK
  * @return Model_FK
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl)
  * @version 2015-04-24
  */
 private function getFK($fk, $args)
 {
     $fkClass = $this::$fkNamespace['Model_' . $fk] . '\\Model_' . $fk;
     // si la clase no existe error
     if (!class_exists($fkClass)) {
         throw new Exception_Model_Missing(array('model' => $fkClass));
     }
     $fkClasss = \sowerphp\core\Utility_Inflector::pluralize($fkClass);
     // tratar de recuperar con la clase plural (para usar caché)
     // clase plural sólo existe al tener la extesión sowerphp\app
     if (class_exists($fkClasss)) {
         if (isset($args[0])) {
             return (new $fkClasss())->get($args[0]);
         } else {
             return (new $fkClasss())->get($this->{Utility_Inflector::underscore($fk)});
         }
     } else {
         if (isset($args[0])) {
             return new $fkClass($args[0]);
         } else {
             return new $fkClass($this->{Utility_Inflector::underscore($fk)});
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * Método para renderizar una página
  * El como renderizará dependerá de la extensión de la página encontrada
  * @param page Ubicación relativa de la página
  * @param location Ubicación de la vista
  * @return Buffer de la página renderizada
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl)
  * @version 2014-12-18
  */
 public function render($page, $location = null)
 {
     // buscar página
     if ($location) {
         $location = self::location(\sowerphp\core\App::layer($location) . '/' . $location . '/View/' . $page);
     } else {
         $location = self::location($page, $this->request->params['module']);
     }
     // si no se encontró error
     if (!$location) {
         if ($this->request->params['controller'] == 'pages') {
             $this->render('/error/404');
         } else {
             throw new Exception_View_Missing(array('view' => $page, 'controller' => Utility_Inflector::camelize($this->request->params['controller']), 'action' => $this->request->params['action']));
         }
         return;
     }
     // preparar _header_extra (se hace antes de renderizar la página para
     // quitarlo de las variables por si existe
     if (isset($this->viewVars['_header_extra'])) {
         $_header_extra = '';
         if (isset($this->viewVars['_header_extra']['css'])) {
             foreach ($this->viewVars['_header_extra']['css'] as &$css) {
                 $_header_extra .= '        <link type="text/css" href="' . $this->request->base . $css . '" rel="stylesheet" />' . "\n";
             }
         }
         if (isset($this->viewVars['_header_extra']['js'])) {
             foreach ($this->viewVars['_header_extra']['js'] as &$js) {
                 $_header_extra .= '        <script type="text/javascript" src="' . $this->request->base . $js . '"></script>' . "\n";
             }
         }
         unset($this->viewVars['_header_extra']);
     } else {
         $_header_extra = '';
     }
     // dependiendo de la extensión de la página se renderiza
     $ext = substr($location, strrpos($location, '.') + 1);
     $class = App::findClass('View_Helper_Pages_' . ucfirst($ext));
     $page_content = $class::render($location, $this->viewVars);
     if ($this->layout === null) {
         return $page_content;
     }
     // buscar archivo del tema que está seleccionado, si no existe
     // se utilizará el tema por defecto
     $layout = $this->getLayoutLocation($this->layout);
     if (!$layout) {
         $this->layout = $this->defaultLayout;
         $layout = $this->getLayoutLocation($this->layout);
     }
     // página que se está viendo
     if (!empty($this->request->request)) {
         $slash = strpos($this->request->request, '/', 1);
         $page = $slash === false ? $this->request->request : substr($this->request->request, 0, $slash);
     } else {
         $page = '/' . Configure::read('homepage');
     }
     // determinar module breadcrumb
     $module_breadcrumb = [];
     if ($this->request->params['module']) {
         $modulos = explode('.', $this->request->params['module']);
         $url = '';
         foreach ($modulos as &$m) {
             $link = Utility_Inflector::underscore($m);
             $module_breadcrumb[$link] = $m;
             $url .= '/' . $link;
         }
         $module_breadcrumb += explode('/', substr(str_replace($url, '', $this->request->request), 1));
     }
     // determinar titulo
     $titulo_pagina = isset($this->viewVars['header_title']) ? $this->viewVars['header_title'] : $this->request->request;
     // renderizar layout de la página (con su contenido)
     return View_Helper_Pages_Php::render($layout, array_merge(array('_header_title' => Configure::read('page.header.title') . ($titulo_pagina ? ': ' . $titulo_pagina : ''), '_body_title' => Configure::read('page.body.title'), '_footer' => Configure::read('page.footer'), '_header_extra' => $_header_extra, '_page' => $page, '_nav_website' => Configure::read('nav.website'), '_nav_app' => Configure::read('nav.app'), '_timestamp' => date(Configure::read('time.format'), filemtime($location)), '_layout' => $this->layout, '_content' => $page_content, '_module_breadcrumb' => $module_breadcrumb), $this->viewVars));
 }
Ejemplo n.º 4
0
     */
    public static function variable($string)
    {
        if (!($result = self::_cache(__FUNCTION__, $string))) {
            $string2 = self::camelize(self::underscore($string));
            $replace = strtolower(substr($string2, 0, 1));
            $result = preg_replace('/\\w/', $replace, $string2, 1);
            self::_cache(__FUNCTION__, $string, $result);
        }
        return $result;
    }
    /**
     * Returns a string with all spaces converted to underscores (by default), accented
     * characters converted to non-accented characters, and non word characters removed.
     *
     * @param string $string the string you want to slug
     * @param string $replacement will replace keys in map
     * @return string
     * @link http://book.cakephp.org/2.0/en/core-utility-libraries/inflector.html#Inflector::slug
     */
    public static function slug($string, $replacement = '_')
    {
        $quotedReplacement = preg_quote($replacement, '/');
        $merge = array('/[^\\s\\p{Ll}\\p{Lm}\\p{Lo}\\p{Lt}\\p{Lu}\\p{Nd}]/mu' => ' ', '/\\s+/' => $replacement, sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '');
        $map = self::$_transliteration + $merge;
        return preg_replace(array_keys($map), array_values($map), $string);
    }
}
// Store the initial state
Utility_Inflector::reset();
Ejemplo n.º 5
0
 /**
  * Método que renderiza la vista del controlador
  * @param view Vista que se desea renderizar
  * @param location Ubicación de la vista
  * @return Objeto Response con la página ya renderizada
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl)
  * @version 2014-04-22
  */
 public function render($view = null, $location = null)
 {
     // Ejecutar eventos que se deben realizar antes de renderizar
     $this->beforeRender();
     // Si la vista es nula se carga la vista según el controlador y accion solicitado
     if (!$view) {
         $view = Utility_Inflector::camelize($this->request->params['controller']) . '/' . $this->request->params['action'];
     }
     // Crear vista para este controlador
     if (!$this->View) {
         $this->View = new View($this);
     }
     // Renderizar vista y layout
     $this->response->body($this->View->render($view, $location));
     // Entregar respuesta
     return $this->response;
 }
Ejemplo n.º 6
0
 /**
  * Determina a partir de una URL si esta corresponde o no a un módulo,
  * en caso que sea un módulo lo carga (aquí se hace la carga real del
  * módulo que se indicó con self::uses())
  * @param url Solicitud realizada (sin la base de la aplicación)
  * @return Nombre del módulo si es que existe uno en la url
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl)
  * @version 2014-03-22
  */
 public static function find($url)
 {
     // Separar por "/"
     $partes = explode('/', $url);
     // Quitar primer elemento, ya que si parte con / entonces será vacío
     if (!strlen($partes[0])) {
         array_shift($partes);
     }
     // Determinar hasta que elemento de la url corresponde a parte de un modulo
     $npartes = count($partes);
     $hasta = -1;
     for ($i = 0; $i < $npartes; ++$i) {
         // armar nombre del modulo
         $module = array();
         for ($j = 0; $j <= $i; ++$j) {
             $module[] = Utility_Inflector::camelize($partes[$j]);
         }
         $module = implode('.', $module);
         // determinar si dicho modulo existe
         if (array_key_exists($module, self::$_modules)) {
             $hasta = $i;
         }
     }
     // Si $hasta es mayor a -1
     if ($hasta >= 0) {
         // Armar nombre final del modulo (considerando hasta $hasta partes del arreglo de partes)
         $module = array();
         for ($i = 0; $i <= $hasta; ++$i) {
             $module[] = Utility_Inflector::camelize($partes[$i]);
         }
         // cargar módulo
         $module = implode('.', $module);
         // retornar nombre del modulo
         return $module;
     } else {
         return '';
     }
 }
Ejemplo n.º 7
0
 /**
  * Método que quita el módulo solicitado de la parte de la URL
  * @param url URL
  * @param module Nombre del módulo (ejemplo: Nombre.De.ModuloQueSeEjecuta)
  * @return URL sin el módulo
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl)
  * @version 2014-10-01
  */
 private static function urlClean($url, $module)
 {
     if ($module) {
         $url = substr(Utility_String::replaceFirst(str_replace('.', '/', Utility_Inflector::underscore($module)), '', $url), 1);
     }
     return $url;
 }
Ejemplo n.º 8
0
 /**
  * Método que obtiene el controlador
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl)
  * @version 2014-03-22
  */
 private static function _getController(Network_Request $request, Network_Response $response)
 {
     // Cargar clase del controlador
     $class = App::findClass('Controller_' . Utility_Inflector::camelize($request->params['controller']), $request->params['module']);
     if (!class_exists($class)) {
         return false;
     }
     // Se verifica que la clase no sea abstracta
     $reflection = new \ReflectionClass($class);
     if ($reflection->isAbstract()) {
         return false;
     }
     // Se retorna la clase instanciada del controlador con los parámetros
     // $request y $response al constructor
     return $reflection->newInstance($request, $response);
 }