viernes, 6 de julio de 2012

Activar / Inactivar TouchPad de laptop

Bien hace unos días me canse de que el touchpad de la laptop se moviera al menor toque de mi mano.. yo usualmente trabajo con un mouse alambrico conectado, se me hace mas cómodo.. bien luego de mi frustración buscando como inactivar el dichoso touchpad en ubuntu decidi buscar alguna ayuda en la web y aqui les publico lo que consegui... funciona perfectamente.. solo hay q hacer 2 cosas primero hay conocer cual es el periferico especifico del touchpad, para eso hay que ejecutar esto:
$ xinput -list
bien, esto muestra varias cositas... en mi caso voy a seleccionar FSPPS/2 Sentelic FingerSensingPad, ahora el script (.sh) para apagar / encender el touchpad:
#!/bin/sh
clear
if zenity --question \
        --title="Encendido y apagado del TouchPad" \
        --text="Bienvenido al asistente, seleccione ahora entre las dos opciones si desea encender o apagar el touchpad de su portatil. \n \nTIP: Asegurese de tener un raton externo conectado en caso de apagar el touchpad " \
        --ok-label="Activar TouchPad" \
	--cancel-label="Apagar TouchPad" \ 
          then 
xinput set-int-prop "FSPPS/2 Sentelic FingerSensingPad" "Device Enabled" 8 1
zenity --info --timeout="2" --text="TouchPad Encendido correctamente"
          else 
xinput set-int-prop "FSPPS/2 Sentelic FingerSensingPad" "Device Enabled" 8 0
zenity --info --timeout="2" --text="Touchpad Desactivado correctamente"
fi
exit
ejecutas el .sh y listo.. Pd. recuerda darle permisos de ejecución al archivo!

jueves, 10 de mayo de 2012

Crear filtros con paginador en Symfony 1.4

Bien recientemente me vi en la necesidad de aplicar filtros a una lista paginada, bien el filtro funciona bien simpre y cuando no cambies de pagina en la lista. para solucionar esto realice algunos ajustes:
//Nota: el siguiente ej. es parte de un sistema de registro de actividades
en el action:
public function executeIndex(sfWebRequest $request)
  {
    $query = Doctrine_Core::getTable('Actividad')
            ->createQuery('a');
    $this->filtro = new ActividadFormFilter();
    if($request->isMethod('post')) {
        $this->filtro->bind($request->getParameter($this->filtro->getName()));
        if ($this->filtro->isValid()){
            $query =  $this->filtro->buildQuery($this->filtro->getValues());
        }
    }
    $this->pager = new sfDoctrinePager('Actividad',sfConfig::get('app_nb_results_per_page'));
    $this->pager->setQuery($query);
    $this->pager->setPage($request->getParameter('page', 1));
    $this->pager->init();
  }
app_nb_results_per_page se define en proy/apps/app/config/app.yml de la siguiente manera
all:
  nb_results_per_page: 50
en el template lo que sigue...
formulario del filtro:


Script:
 
vinculos del paginador:
<?php if ($pager->haveToPaginate()): ?>

<?php endif; ?>
Páginas :<?php echo $pager->getPage() ?> / <?php echo $pager->getLastPage()?>
Total de registros :<?php echo $pager->getNbResults() ?>

y para finalizar ajusto los widgets que necestio:


class ActividadFormFilter extends BaseActividadFormFilter
{
  public function configure()
  {
      
        //lista de widgets que quieres mostrar
      $this->wantedFields = array(
           'usuario_list',
           'fecha_inicio',
           'fecha_fin',
           'estatus_id',
           'centro_id',);
      foreach ($this as $fieldName => $widget){
        if (!in_array($fieldName, $this->wantedFields)){
            //unset a los widgets que no estan en el arreglo
            unset($this->widgetSchema[$fieldName]);
            unset($this->validatorSchema[$fieldName]);
        }
      }
        
      $years = range(date('Y'), 2010 );
      $this->widgetSchema['fecha_inicio'] = new sfWidgetFormFilterDate(array(
                 'from_date' =>new sfWidgetFormI18nDate(array('years' => array_combine($years, $years),
                                            'format' => '%day% %month% %year%',
                                            'culture' => 'es',
                                            'empty_values' => array('day' => '<- Día ->', 'month' => '<- Mes ->', 'year' => '<- Año ->'),
                                     )),
                 'to_date' => new sfWidgetFormI18nDate(array('years' => array_combine($years, $years),
                                            'format' => '%day% %month% %year%',
                                            'culture' => 'es',
                                            'empty_values' => array('day' => '<- Día ->', 'month' => '<- Mes ->', 'year' => '<- Año ->'),
                                     )),
                 'with_empty' => 0,                   // Para que no salga el checkbox
                 'template' => 'desde : %from_date% 
hasta :  %to_date%'
                ));
      $this->widgetSchema['fecha_fin'] = new sfWidgetFormFilterDate(array(
                 'from_date' =>new sfWidgetFormI18nDate(array('years' => array_combine($years, $years),
                                            'format' => '%day% %month% %year%',
                                            'culture' => 'es',
                                            'empty_values' => array('day' => '<- Día ->', 'month' => '<- Mes ->', 'year' => '<- Año ->'),
                                     )),
                 'to_date' => new sfWidgetFormI18nDate(array('years' => array_combine($years, $years),
                                            'format' => '%day% %month% %year%',
                                            'culture' => 'es',
                                            'empty_values' => array('day' => '<- Día ->', 'month' => '<- Mes ->', 'year' => '<- Año ->'),
                                     )),
                 'with_empty' => 1,                   // Para que salga el checkbox
                 'empty_label' =>'Sin Egreso',
                 'template' => 'desde : %from_date% 
hasta :  %to_date%'
                ));
     
     $this->widgetSchema['centro_id'] = new sfWidgetFormDoctrineChoice(array(
            'model'     => 'Centro',
            'add_empty' => '<- Seleccione Centro ->',
            'label' => 'Estado de Procedencia',
        ));
      
      
      $this->widgetSchema['usuario_list'] = new sfWidgetFormDoctrineChoice(
              array('multiple' => true,
                  'expanded' => true,
                  'model'=>  'Usuario',
                  'table_method'=>'getUsuariosByCoordinacion',
                  'key_method'=>'getId',
                  ));
      
      
      $this->widgetSchema->setLabels(array(
        'fecha_inicio'    =>'Fecha de inicio :',
        'fecha_fin' =>'Fecha de culminacion :',
        'tipo_actividad'    =>'Tipo de actividad :',
        'estatus_id'   =>'Estatus :',
        'lugar_actividad' =>'Lugarde la actividad :',
        'centro_id'    =>'Centro :',
        'recurso_humano' =>'Personas externas involucradas :',
        'institucion_list'    =>'Instituciones :',
        'usuario_list'   =>'Participantes :',
        'observacion_analista' =>'Observaciones del analista:',
        'descripcion'   =>'Titulo de la actividad :',
        'observacion' =>'Objetivo y Observaciones de la actividad:',
	));  
  }
}
Resumen: se crea el filtro como normalmente lo harias, al igual que el paginado, luego modificas los vinculos para navegar entre paginas eliminando el href y agregando onClick; agregas el javascript y listo!!
2 ejemplos en 1: filtros y paginador...
nota: al inicio de la clase para los filtros agregue una funcion muy util para hacer unset a los widgets que no necesitamos usar, hace un tiempo la consegui en un post y no he podido conseguirlo nuevamente... asi q ahi se los dejo...