Extender la duración del enlace ‘one time login’ en Drupal 7

Standard

d7-contributor-cloud-huge2

Visto y considerando que no dispongo de tiempo para realizar un entrada elaborada, les traigo un Tip en Drupal 7 cortito y al pie.

Cuando desde el administrador creamos una cuenta en un CMS como Drupal 7, el sistema envia un email con un link ([user:one-time-login-url]) para que este usuario ingrese y cambie su password, este enlace sirve para solo una vez por 24 horas.

Para extender (o acortar) este duración solo es necesario agregar una linea de configuración en nuestro setting.php. Al final de la linea agregamos:

$conf['user_password_reset_timeout'] = '604800'; 

Siendo 604800 (7 dias) los segundos que determinan la duracion del link one-time-login-url.

Saludos…

[PHP] Instalando FOSUserBundle en Symfony2

Standard

Instalando FOSUserBundle en Symfony2

Muchas veces es necesario en nuestro sistema, codificar todo lo que respecta a la administración de usuarios: perfiles, roles, grupos, recuperación de email, registro de usuarios, encriptación de password, etc.

Esto como muchas cosas en un sistema web, ya esta codificado y re codificado varias veces por el mundo, por lo que no es necesario “reinventar la rueda” para hacer andar nuestro sistema.

En Symfony2, es ahí donde entra FOSUserBundle que ademas de ofrecernos las características anteriores, sabemos que de por si posee las mejores practicas en programación y seguridad gracias a la comunidad FriendOfSymfony

Instalación

Para instalar el bundle como muchos otros, tenemos que agregar la siguiente linea en nuestro archivo compose.json dentro de la clausula “require”.

"doctrine/doctrine-fixtures-bundle": "dev-master"

Desde la consola actualizamos solamente este bundle (por lo tanto se instalará al no existir):

php composer.phar update friendsofsymfony/user-bundle

FOSUser Bundle - Zarpele 01

Listo ya tenemos el código descargado, ahora solo debemos agregarlo al Kernel de nuestro proyecto en el archivo AppKernel.php en la carpeta app.

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new FOS\UserBundle\FOSUserBundle(),
    );
}

Ahora creamos la entidad…

<?php
namespace Watchdev\MiBundleBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="usuario")
 */
class Usuario extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

Como pueden ver esta entidad extiende de la clase BaseUser importada lineas atrás.

Ahora es hora de configurar el archivo security.yml por lo que se debería ver semejante a este:

# app/config/security.yml
security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:       true
            anonymous:    true

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }

Agregamos parámetros de configuración dentro del archivo config.yml

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: Watchdev\MiBundleBundle\Entity\User
    use_listener: true

Importamos los routing del FOSUserBundle a nuestro sistema en el archivo routing.yml de la carpeta app

# app/config/routing.yml
fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"

fos_user_profile:
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
    prefix: /profile

fos_user_register:
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
    prefix: /register

fos_user_resetting:
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
    prefix: /resetting

fos_user_change_password:
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
    prefix: /profile

Como ultimo paso, nos queda actualizar nuestro schema con el siguiente comando:

php app/console doctrine:schema:update --force

Esto generará estos campos…

FOSUser Bundle - Zarpele 02

Listo, ya tenemos instalado y funcionando el bundle. En la próxima entrega veremos como integrarlos a nuestros templates…

Puedes seguir las publicaciones de Symfony2 a través de esta pagina.

Saludos…

[php] Creando nuestra primera entidad con Symfony2

Standard

Siguiendo con mis entradas para Symfony2, hoy nos toca crear nuestra primera entidad. Ya vimos como instalar Symfony2 en pocos pasos, ahora nos toca crear la entidad persona con un par de atributos básicos utilizando la consola de Symfony2.

A una entidad en Symfony2 la podemos asociar con una tabla en MySql, pero esta tiene los atributos de la misma (columnas), los getters y setters, y algunos métodos básicos para manejar dicha tabla.

Creando nuestra primera entidad con Symfony2 | Image1

Nos dirigimos a la raíz de nuestro proyecto utilizando la consola y ejecutamos

php app/console doctrine:generate:entity

En el primer paso nos pide que indiquemos el Bundle donde vamos a crear la entidad y el nombre así que ingresamos PruebaBundle:Persona siendo PruebaBundle nuestro Bundle y Persona nuestra entidad. En las nuevas versiones con escribir la letra con cual empieza el Bundle nos mostrara las opciones al estilo de una consola y la tecla Tab.

En el siguiente paso nos pide cual va a ser el formato para declarar la entidad, usaremos annotations, presionamos Enter y tomaremos como opción la propuesta.

Ahora nos pide el primer atributo de la entidad aclarándonos que el campo id generalmente usado como Primary Key ya es creado automáticamente.

Ingresamos el nombre de nuestra primera columna y le damos Enter. Luego le decimos que sea del tipo string. Luego indicamos la longitud de 255 caracteres dando un Enter aceptando su propuesta ([])

New field name (press <return> to stop adding fields): nombre
Field type [string]: string
Field length [255]: 

Luego, seguimos con las demás columnas y al finalizar damos un Enter para indicar el fin de la carga.

En el paso siguiente nos pregunta si queremos que nos cree un repositorio vacio y le decimos que no (esto lo veremos mas adelante).

Do you want to generate an empty repository class [no]? no

Para terminar confirmando la creacion de nuestra entidad

Do you confirm generation [yes]? yes

Si todo sale bien tendremos nuestra primera entidad creada.

You can now start using the generated code!

Ahora tenemos que sincornizar nuestro schema y aplicarlo a en la base de datos que hemos configurado en el archivo parameter.yml

php app/console doctrine:schema:create

Si todo sale bien…

Database schema created successfully!

Saludos…

[Drupal 7] Reinstalar módulo y actualizar nuestro schema

Standard

cc http://www.whenwhowhere.com/tech-blog/tools-developing-drupal-7 Muchas veces desarrollando nuestro módulo en Drupal 7 tenemos que actualizar el mismo para poder ejecutar los hooks hook_schema(), hook_install(), hook_uninstall().

Para no eliminar el modulo de la carpeta de modulos, limpiar el cache, volver a instalarlo (tarea mas que tediosa), y aun no estamos seguro de que se ejecuten los hook antes mencionado vamos a instalar Devel.

El módulo Devel es imprescindible para desarrollar con Drupal, proporciona un amplio abanico de herramientas que facilitan la labor de programación y también utilidades de administración, como generar contenido aleatorio o reinstalar módulos.

Para instalarlo deben bajarse el módulo y subirlo vía FTP a /sites/all/modules ir a la pagina de módulos y habilitarlo. Como alternativa les dejo una forma mas elegante por consola utilizando drush

drush dl devel
drush en -y devel

Nos dirigimos a http://[nuestro_drupal_7]/devel/reinstall seleccionamos los módulos a reinstalar y voilá tenemos los módulos reinstalados correctamente.

Tener en cuenta que al ejecutar esto se settean por defecto las variables y se eliminan los datos de la base de datos que corresponden al schema del modulo reinstalado.

Saludos…

Solucionar problema pagina en blanco en WordPress

Standard

Wordpress Pantalla Blanca - White Screen

De un día para otro me encuentro con el blog en blanco, pienso que es algo del hosting pero al entrar al FTP y mirar los archivos veo todo igual, entro a la base de datos y también. Lo raro es que no actualicé Wordrpess ni ningun plugins pero sabia que aquí estaba el problema.

SOLUCION: Entrar en /wp-content/plugins renombrar uno por uno las carpetas de cada plugins agregándole una Z por ejemplo al principio y entrar nuevamente al WordPress. Si no pasa nada seguir renombrando hasta encontrar el plugins defectuoso.

En mi caso fue el plugins snipplr, un plugins que instalé hace años y no me acuerdo por que :D

Saludos.

[php] Instalando Symfony 2 desde consola en 5 minutos

Standard

simfony-2

Cambiamos de directorio hacia nuestro directorio de proyectos web.

cd projectwebs

Creamos un nuevo proyecto (zarpele)

mkdir zarpele

Descargamos composer

curl -sS https://getcomposer.org/installer | php

Creamos la carpeta donde estar nuestro Symfony2

mkdir trunk

Le decimos a composer que instale nuestro Symfony2

php composer.phar create-project symfony/framework-standard-edition trunk/ 2.2.1

Notese aquí la versión 2.2.1 que es la mas actual en este momento, visita la web de Symfony y reemplazala por la mas actual.

Listo para generar nuestro bundle!

php app/console generate:bundle

Saludos….