miércoles, 24 de agosto de 2011

Para ver el error en un al grabar un formulario


if ($form->isValid()){
     $form->save();
}else {
     echo $form->getErrorSchema()->getMessage();
}

¿ Que módulo o acción se está ejecutando?


Para saber el modulo que se está ejecutando:
$this->getModuleName()

Y para saber la acción:
$this->getActionName()


Fuente: http://www.informaticosinmemoria.com/2009/11/%c2%bf-que-modulo-o-accion-se-esta-ejecutando/

Mejorando el selector de culturas de Symfony

Extraído de Practical Symfony – Día 19: Internacionalización y Localización:
Pero la mayor parte del tiempo, tu sitio web no estará disponible en los 136 principales idiomas. El método getPreferredCulture() devuelve el mejor lenguaje mediante la comparación de los idiomas preferidos del usuario y los idiomas de tu sitio web:
// in an action
$language = $request->getPreferredCulture(array('en', 'fr'));
Sí, pero si quieres hilar fino en tus aplicaciones pronto descubrirás que se queda corto con el método getPreferredCulture():
/**
   * Returns the preferred culture for the current request.
   *
   * @  array  $cultures  An array of ordered cultures available
   *
   * @ string The preferred culture
   */
  public function getPreferredCulture(array $cultures = null)
  {
    $preferredCultures = $this->getLanguages();
 
    if (null === $cultures)
    {
      return isset($preferredCultures[0]) ? $preferredCultures[0] : null;
    }
 
    if (!$preferredCultures)
    {
      return $cultures[0];
    }
 
    $preferredCultures = array_values(array_intersect($preferredCultures, $cultures));
 
    return isset($preferredCultures[0]) ? $preferredCultures[0] : $cultures[0];
  }
O lo que viene a ser lo mismo: Devuélveme el primero que exista, el primero de los definidos en el navegador o nada en absoluto.
Aunque resulte raro, en la mayoría de los casos este nivel de complejidad es el suficiente ya que Symfony arreglará cualquier imprecisión que pueda darse si este mecanismo falla. No hay que olvidar que en el fichero settings.yml debemos definir una cultura por defecto para nuestra aplicación.
Pero, ¿qué pasa si un usuario configura su navegador para español de México e inglés (en ese orden de prioridad) y mi aplicación admite español (genérico) e inglés? El algoritmo anterior nos devolverá como preferido el inglés erróneamente. Según la configuración del navegador, se debería presentar un texto en español (aunque no sea en su variedad mexicana) y si esto no fuera posible, una traducción en inglés.
Es decir, los códigos de 5 carácteres de culturas como es_MX especifican una variedad del español pero no excluyen la cultura es a secas.
Por lo tanto, propongo el siguiente método para realizar una selección más precisa y configurable:
/**
   * Makes the best choice of culture. It can check the domain of preferred
   * languages in order to choose a more generic language if it's available.
   *
   * Example:
   * 
   * preferred cultures: es_ES, en
   * available cultures: es, en, fr
   * 
   * In this example this method will return 'es' over 'en' as the best choice
   * if $checkCultureDomains flag is enabled.
   *
   * If no preferred culture is available this method will return the
   * $defaultCulture.
   * 
   * @ array $availableCultures Array of valid available cultures
   * @ array $preferredCultures Array of preferred cultures. Order DOES matter (lower index => higher priority)
   * @ string $defaultCulture A default culture if none of the preferred cultures is available
   * @ bool $checkCultureDomains Flag to enable/disable language domain check
   * @ string best choice culture
   */
  public static function bestChoiceCulture($availableCultures, $preferredCultures, $defaultCulture, $checkCultureDomains = true) {
    foreach ($preferredCultures as $culture) {
      if (in_array($culture, $availableCultures)) {
        return $culture;
      }
      if ($checkCultureDomains) {
        $domain = substr($culture, 0, 2);
        if ($domain != $culture && in_array($domain, $availableCultures)) {
          return $domain;
        }
      }
    }
    return $defaultCulture;
  }
El único aspecto sobre el que dudo en este método es sobre la corrección de pasarle un valor por defecto a la función para ser devuelto si el algoritmo no encuentra una cultura apropiada. Qué se yo, prefiero dejarlo así por darle coherencia y atomicidad al método cuando lo use por ahí. Si molesta, se puede quitar y reemplazarlo por un return null o incluso una excepción. Al gusto del consumidor.
Happy coding!

viernes, 1 de julio de 2011

No puedo iniciar sesion como Cliente de Terminal Server

Seguro a muchos le han dado el mismo problema...

  1. Debemos añadir a los usuarios a "usuarios de escritorio remoto", 
  2. Abrir las politicas del sistema (gpedit.msc) 
  3. Ir a la ruta:
    1. Configuración del Equipo >
    2. Configuración de Windows >
    3. Configuración de Seguridad >
    4. Directivas Locales >
    5. Asignación de Derechos de Usuarios
  4. Y en la entrada "Permitir inicio de sesión a través de servicios de terminal server" 
  5. Añadí tanto al grupo de usuarios de escritorio remoto como a los que me interesan
  6. Aceptar y Aplicar todas las veces que sean necesarias para cerrar todo.
Una solución muy útil y un poco rebuscada para habilitar el acceso por Terminal Server.

Fuente: http://foro.ethek.com/viewtopic.php?f=7&t=9844#p54527

lunes, 27 de junio de 2011

No funciona el numpad en mi Ubuntu

Me paso esto en el trabajo (y a pesar de todo) no queria dejar de postear la solución, para usar el numpad como mouse, o recuperar el numpad, debes presionar

Shift + Bloq Num

Hagan la prueba.

fuente: http://www.prothotype.com/blog/archives/668/no-funcion-el-numpad-en-mi-ubuntu-o-como-usar-el-numpad-como-mouse/

jueves, 26 de mayo de 2011

Conditional object actions for the admin generator Explained

http://snippets.symfony-project.org/snippet/467


ReUse of:
Conditional object actions for the admin generator By Georg Sorst

The list view of the admin generator currently always displays all defined object actions for each object. There is no way to display an object action for an object only if some condition on this object itself is met.

In order to extend the admin generator with this functionality only a small enhancement is required. You can either apply this change per module or create a new admin generator theme as described in the Symfony book.

The templates/_list_td_actions.php has to be extended to look roughly like this, depending on whether you already have your own modifications in there.

I use sf v1.4.11, for make this enhancement...

First, you should find the partial _list_td_actions.php found in
lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/data/generator/sfDoctrineModule/admin/template/templates/_list_td_actions.php 
And modify the original code like this:
<td>
    <?php if ($this->configuration->getValue('list.object_actions')): ?> 
    <ul class="sf_admin_td_actions">

    <?php foreach ($this->configuration->getValue('list.object_actions') as $name => $params): ?>

        <?php if ( isset( $params['condition'] ) ): ?>

            [?php if ( <?php echo ( isset( $params['condition']['invert'] ) && $params['condition']['invert'] ? '!' : '') . '$' . $this->getSingularName( ) . '->' . $params['condition']['function'] ?>( <?php echo ( isset( $params['condition']['params'] ) ? $params['condition']['params'] : '' ) ?> ) ): ?] 
        <?php endif; ?>

 
        <?php if ('_delete' == $name): ?>
            <?php echo $this->addCredentialCondition('[?php echo $helper->linkToDelete($'.$this->getSingularName().', '.$this->asPhp($params).') ?]', $params) ?>

        <?php elseif ('_edit' == $name): ?>
            <?php echo $this->addCredentialCondition('[?php echo $helper->linkToEdit($'.$this->getSingularName().', '.$this->asPhp($params).') ?]', $params) ?>

        <?php elseif ('_show' == $name): ?>
            <?php echo $this->addCredentialCondition('[?php echo $helper->linkToShow($'.$this->getSingularName().', '.$this->asPhp($params).') ?]', $params) ?>

        <?php else: ?>
            <li class="sf_admin_action_<?php echo $params['class_suffix'] ?>">
                <?php echo $this->addCredentialCondition($this->getLinkToAction($name, $params, true), $params) ?>

            </li>
        <?php endif; ?>
 
        <?php if ( isset( $params['condition'] ) ): ?>

            [?php endif; ?]
        <?php endif; ?>
    <?php endforeach; ?>

    </ul>
    <?php endif; ?>
</td>
 

Second, in the generator.yml you should add aditional lines like

actionName:
            label:          actionLabel
            action:         executeAction
            #Now the enhancement =D
            condition:
              # function is the name of function in the model::functionName and must return boolean
              function:     functionName 
              # params are the params to send to functionName
              params:       "$model->getDbField(), $sf_user, 'test'"

              # invert is used if you need invert the result of functionName
              invert:       false
 

Third and final step, go to

lib/model/doctrine/model.class.php
 

and create the functionName like:

/**
* $param1 is $model->getDbField()
* $param2 is $sf_user
* $param3 is 'test'
*/
public function functionName($param1, $param2, $param3){

        //code personal
        return boolean;
    }
 

Final, important!

php symfony cache:clear 
 

Well that's all, sorry for my bad English =S
Thanks Georg Sorst and Google Translator

lunes, 16 de mayo de 2011

Symfony url_for in ACTION

symfony tutorial

Symfony url_for() method return the URL according to current context, remember url_for method is available only in VIEW part of Symfony MVC, what if one wants to create a HTML in MODEL (although it is not recommended, just in case) and in that HTML there are link which needs to be formatted according to current context, for that there is a method in Symfony generateUrl().

generateUrl() Method Signature

string generateUrl('URL_ROUTE',  
         array(  
        'module'=>'MODULE_NAME',  
        'action'=>'ACTION_CALLED',  
        'PARAMS'=>'VALUE'  
             ),  
        $isAbsolute  
);  

URL_ROUTE is the SEO Friendly URL pattern you defined in config file of module, if not defined use 'default' second is the config array in which we define module name and the action we want to call next is the parameter we want to pass via URL you can pass as many as you want params through it, in the form 'PARAM1'=>'VALUE1','PARAM2'=>'VALUE2',.... and last parameter is $isAbsolute it instruct whether we want relative or absolute URL, default is false it generate relative URL by default.

Example

$this->generateUrl('default',
array('module'=>'User','action'=>'EditUser','uid'=>$id))  

the out will be something like this...

backend_dev.php/User/EditUser/uid/1130  

hope it helps...

Fuente: http://www.tutorialjinni.com/2011/04/symfony-urlfor-in-action.html

viernes, 15 de abril de 2011

Conociendo el P2K Tools




Barra de herramientas, con los botones

SWITCH TO AT MODE/P2K MODE:
Nos permite poner el tel. en modo AT o P2K. Por ahora el que nos interesa es P2K, así que esto lo dejamos como está.



RESTART: Para reiniciar el teléfono, se utiliza luego de realizar algún cambio como por ej: modificación de volumen o al instalar una nueva skin. 

ALL SILENT: Nos pone todos los eventos del celu (llamada, aviso de mensaje, alarma) en Silencioso. Lo utilizamos cuando por ej. borramos algún archivo de sonido y luego no nos deja entrar al menú de sonidos. 

FIX MELODYDB: Se utiliza también para el caso que describí arriba, sólo que este lo que hace es reconstruirnos los archivos mytonedb.db y temptonedb.db. También es posible hacer esto de forma manual (yo prefiero manual más adelante explicaré cómo). 

VIEW: Nos filtra los archivos por atributo (o sea, sólo nos mostrará los que nosotros queramos, ya sean de sistema, ocultos, sólo lectura o de usuario).

STYLE: Define el estilo de listado para el administrador de archivos. Acá deben elegir el que les quede más cómodo (lista, detalles, íconos grandes, pequeños, etc.)



Menú TOOLS (Herramientas)

OPTIONS:
Nos permite elegir entre los modos (AT ó P2K) y configurar su funcionamiento (en modo AT, el puerto, velocidad, etc.).

CHANGE VOLUME: Opciones para cambiar el volumen de los speakers.

EXTERNAL LCD: Para cambiar el texto de la pantalla externa.

WEB ACCESS: Para configurar las sesiones web de nuestro celu.

CUSTOM ANIMATION: Opciones para modificar las pantallas de encendido/apagado y los sonidos.

MY MENU y CUSTOM LANGUAGE: Para menús y lenguajes personalizados. Nunca pude probarlos porque por lo menos en mi caso me aparecen caracteres extraños al leerlos desde el celu.


Administrador de archivos

FOLDER TREE:
Nos muestra las carpetas de nuestro celu.

FILE OPERATIONS: contiene las operaciones que el programa nos permite realizar con los archivos, las cuales son:

REFRESH: para actualizar la lista de archivos.

DOWNLOAD: para bajar archivos desde el celu a la computadora.

DELETE: para borrar archivos del celu.

UPLOAD: para subir archivos de la compu al celu.

USE SEARCH PATTERN: para filtrar los archivos que queremos ver en el administrador de archivos, por ejemplo: "*.*" nos mostrará todos los archivos, "A*.GIF" nos mostrará todos los archivos .GIF cuyo nombre empiece con la letra A, etc.

USE UPLOAD PATH: define la carpeta a la que queremos subir los archivos. No es necesario tocarla ya que las carpetas las elegiremos nosotros en Folder Tree.

FILE INFORMATION: ofrece información acerca del archivo que hayamos seleccionado en la lista del administrador.

PATH: nos informa de la ubicación del archivo.

NAME: nos informa el nombre completo del archivo.

SIZE: tamaño del archivo.

ATTRIBUTES: sus atributos. Tenemos: read-only (sólo lectura), hidden (oculto, los vemos en el administrador de archivos pero no desde el celu), system (archivo de sistema).

CHANGE: una vez establecidos los atributos que queramos para determinado archivo, mediante las casillas de verificación, debemos hacer clic acá para aplicarlos. 


4 - Barra lateral: Permite acceder a las distintas "secciones" del programa, que son las siguientes:
FILE MANAGER: es el administrador de archivos, sobre el que ya estuvimos tratando unas líneas más arriba.
SEEM EDITOR: para editar las seems. No recomiendo utilizar este programa, sino el XVI32 y el P2KMan. Uno ya lo tienen posteado, el otro lo subiré cuando les escriba algo referente a edición de seems.
OTHER FEATURES: nos permite modificar características del celu tales como Mensajes y Multimedia, esto es, agregar/quitar opciones, y modificar otras. Más adelante lo explicaré con mayor detalle.
KJAVA: para instalar/borrar programas JAVA. No recomiendo utilizar P2KTools para esto, para JAVA usen el MotoMidMan.
P2KINFO: información del celu, como ser: flex, language pack, modelo, etc.
FLEX: para modificar la flex de nuestros celus.
ALARM CLOCK: para modificar y definir alarmas.
RING STYLES: para modificar y definir estilos de timbre.

5 - Barra de estado: Nos ofrece información como ser:
STATUS: puede variar entre CONNECTED (conectado, luz verde) cuando el celu está conectado correctamente, ó NOT CONNECTED (no conectado, luz roja) cuando no tenemos el celu conectado.
FREE SPACE: nos muestra el espacio que nos queda libre en nuestro celu. En mi caso muestra el que queda libre en latarjeta de memoria.
FILES: cantidad total de archivos que tenemos en nuestro celu.
MODEL: tan simple como el modelo de celular.

Programas Útiles




Drivers USB: 
Necesarios para que la PC reconozca tu celular. 
El mejor programa para realizar cualquier tipo de edición a nuestro celular de forma segura.

Modifica opciones de tu celular, tales como la imagen de la pantalla externa, o aumentar la duración de la grabación de video.

MotoMidMan: Sirve subir, bajar o eliminar juegos y aplicaciones Java a tu celular. 

Java Adapter for Mobile: Utilizado para cambiar las resoluciones de juegos o aplicaciones javas. 

SkinMan: Sirve subir, bajar o eliminar skins a tu celular. 

Skin View: Sirve para previsualizar los skins antes de subirlo a nuestro celular. 

Skinner4Moto: Sirve para crear o modificar skins. 

MSNap: Para sacar screenshots (capturas de pantalla) de tu celular Motorola. 

MP3 To Ringtone Gold: Convierte cualquier sonido desde formatos estándar para PC y CD de audio (.mp3, .wma, .wav, .ogg, etc.) a formato compatible y de tamaño reducido para tu teléfono móvil (.mmf, .amr, .mp3, .wav, .qcp). 

MotoTables: Para editar el gain_table del celular. 

Opedit: Se utiliza para cambiar el texto del operador "a mano", editando el archivo plmn_text_table.bin. 

Funlights Editor: Para editar las luces disco/luces de ritmo del celular. 

MotoSpeed: Utilizado para acelerar los menús del celular, USAR CON CUIDADO. 

PST Phone Programmer: Sirve para averiguar el código de bloqueo de funciones. 

YAMP: Sirve para poder editar nuestro celular. 

Flash & Backup: Programa utilizado para realizar backup y flasheo. 

RSD LITE: Programa utilizado para el flasheo.

SHXCoDec: Utilizado para compilar/descompilar archivos .SHX (flashes). 

Random’s SHX Toolkit: Para trabajar con flashes en formato .SHX 

Moteasy: Programa utilizado para cambiar el IMEI de nuestro celular.

Motorola V3


Descripción:

El Moto RAZR V3 fue creado con tecnología de punta, para un excepcional desempeño. Dentro de su diseño ultrafino encontramos avanzadas características como: reproducción de vídeo en MPEG4, tecnología inalámbrica Bluetooth® y cámara digital, entre otras. Además, con su teclado de gran precisión, sencillo estilo y acabado metálico, el V3 tiene una apariencia original e inconfundible.