[PHP] Actualizando Drupal 8 con Drush

Standard

Drush update Drupal 8 Header image | Zarpele

Segunda entrada de Drupal 8, en la ultima [PHP] Instalando Drupal 8 en 5 minutos, nos dimos cuenta que teníamos nuestro Drupal desactualizado. Es importante mantener tu CMS actualizado, ya sea hablando del Core de Drupal, los modulos constribs, librerías, etc. para evitar que gente malintencionada se haga de información importante (o no) de nuestro sistema. Se acuerdan de los Panama Papers?, bueno al parecer un plugin desactualizado de WordPress, mas una versión vulnerable de Drupal causó estas famosas filtraciones.

Para mas información nos dirigimos a la sección Available Updates en la pestaña Reports (/admin/reports/updates), aquí vemos en el ejemplo que nuestro Drupal quedo en la versión 8.0.4 y al día de la fecha estamos en la versión 8.1.1.

Available updates Drupal 8 | Zarpele

Bien, ya verificamos via backend que tenemos nuestro Drupal desactualizado, ahora vamos con Drush.

$ drush up

Available updates Drupal 8 Drush | Zarpele

Drush encuentra la misma versión que nos propone el backend de Drupal, como warning nos informa que cualquier modificación en el core que se haya realizado sera reemplazada (si hicieron modificaciones en el core van mal), también nos dice que no se debe aplicar en ambientes de producción.

Drush guarda una copia antes de realizar el update y nos muestra el directorio, tambien nos informa los database updates pendientes. Ingresamos la tecla y y seguimos con las actualizaciones.

Available updates Drupal 8 Drush 3 | Zarpele

Listo nuestro Drupal 8 esta actualizado!!

Verificamos nuevamente con un Drush up…

$ drush up

Available updates Drupal 8 Drush 4 | Zarpele

Available updates Drupal 8 Drush 5 | Zarpele

[PHP] Instalando Drupal 8 en 5 minutos

Standard

drupal-8-released

Ya hace mas de 6 meses que Drupal 8 fue lanzado en su versión stable. Hoy vamos a aprender a instalar Drupal 8 de forma rápida con Drush en menos de lo que canta un gallo. Todo esto en Linux mas específicamente en un Debian Jessie 8.4.

Tenemos que tener Drush instalado en su ultima versión como mínimo la versión 8 que soporta Drupal 8. Para instalarlo lo pueden hacer con composer (recomendado) o bajar el código desde GitHub e instalarlo manualmente.

1. Creamos una carpeta dentro de nuestro workspace y descargamos Drupal 8 con Drush:

$ mkdir mof-drupal8

 

$ cd mof-drupal8

 

$ drush dl drupal-8

Con drush dl drupal-8 bajamos la ultima versión estable que en este momento es la 8.0.5, igualmente pueden poner una especifica o alguna versión dev o beta.

01 - drush-download-drupal-8-zarpele

2. Instalando Drupal 8

Drush nos crea una carpeta superior con la versión de Drupal que se a descargado, en este caso nos crea drupal-8.0.5 por lo que solo debemos crear un vhosts apuntado hacia la raíz del Drupal e ingresamos a través del browser.

El procedimiento es similar a la instalación a un Drupal 7 pero repasamos los pasos para aquel que se inicia en la versión 8 de este CMS.

2. 1. Seleccionamos el language…

02 - Drupal 8 Install page-zarpele

2. 2. Para el sistema necesito instalar una versión estandar, es decir con ciertos componentes básicos ya incluidos en el Drupal, si recién empiezas recomiendo esta opción.

03 - Drupal 8 Install page - standard-zarpele

2. 3. Ahora vamos a realizar una serie de cambios para tratar de validar el paso “Verify Requirements”

Creamos la carpeta files donde se almacenaran los archivos multimedia de Drupal y le damos los permisos adecuados.

$ mkdir sites/default/files

 

$ chmod 777 sites/default/files

Renombramos el archivo de configuración para que el script de instalación pueda trabajar sobre el, también le damos los permisos adecuados

$ cp /sites/default/default.settings.php /sites/default/settings.php

 

$ chmod 777 /sites/default/settings.php

03a - Drupal 8 Install page - verify requirement-zarpele

Si todo sale bien la anterior pantalla no la van a ver, sino se muestra una tabla con el error y descripción.

2. 4. Entramos al mysql y creamos la base de datos que vamos a configurar en nuestro Drupal.

$ mysql -uroot -p

 

CREATE DATABASE drupal8_mof;

04 - Drupal 8 Install page - database-zarpele

05 - Drupal 8 Install page - install bar-zarpele

2. 5. Ya instalado Drupal en la base de datos, nos resta solo ingresar el nombre, email y configuración básica para la administración.

06 - Drupal 8 Install page - Configure site-zarpele

2. 6. Listo Drupal 8 instalado.

07 - Drupal 8 Install page - Welcome to Drupal 8-zarpele

Algunas recomendaciones antes de empezar a trabajar.

Dejar los permisos mínimos al archivo settings.php y eliminar el archivo de ejemplo.

chmod 755 /sites/default/settings.php
rm /sites/default/default.settings.php

Por ultimo ingresar el Reports >> Status Report y verificar que todo este bien, en mi caso por ejemplo a la hora de escribir esta entrada salio un nuevo release de la versión 8.0.6 y me recomienda actualizarla.

08 - Drupal 8 Install page - admin report-zarpele

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…