GPL. Código libre (6) para el último dato

Esta sexta entrega de la serie ‘Crear un plugin desde 0’ va a aportarnos el último dato que necesitamos para nuestro plugin a través de un concepto nuevo: La licencia GNU GPL, que, en wordpress.org, es la que confiere condición de software libre y código abierto a todo lo que en wordpress.org se publica.

Introducción por Miguel Pujante

Cuando hablamos de software libre y de código abierto debemos tener muchas cosas en cuenta. Inversamente que el software propietario y de código cerrado que escribe su propia deontología el que se acoge a GNU/GPL debe seguir y conocer una serie de condiciones que no se pueden obviar.

 A menudo pensamos que en Internet todo es GNU/GPL y por tanto libre y gratuito, aunque me temo que no es así, en realidad las aplicaciones más populares no lo son (aunque contengan partes de ellas de código abierto) y mucho menos si hablamos de la propiedad intelectual.

 En el caso de plugins y complementos veremos que, por ejemplo, que para ser publicados en el repositorio de WordPress una de las exigencias es que lo sea, y por tanto todos los desarrolladores que quieran ver sus obras en esa plataforma tienen que adaptarse a estas licencias.

 Lo que no debemos confundir es libertad con libertinaje. Podemos usar aplicaciones (completas o complementos) de los repositorios oficiales siempre que se indique el nivel de derecho de uso o distribución que tienen atribuidas, pero no todo lo que se publica es libre o al menos no todo se puede distribuir libremente.

 Por otro lado existen sitios en los que parece que puedes descargar plantillas o plugins premium de manera gratuita, ojo que esto es un error. Lo que está etiquetado como premium y no se descarga de las web oficiales pueden contener virus, sniffers o malware completo, por lo que lo mejor es que no lo hagas. Si tienes dudas pregunta a la comunidad pero no uses algo que desde ya puede estar contaminado por software malicioso.

 Avisado quedas.

por Miguel Pujante

La licencia GPL y el código abierto

Licencia GNU GPL
Licencia GNU GPL

La definición de GPL la encontraréis en la Wikipedia, mucho mejor definida de lo que yo lo pueda hacer. Cualquier código que distribuyáis con licencia GNU GPLv2 o posterior, pasa a ser código abierto.

Esto significa que se puede usar, compartir, estudiar y modificar. Precisamente eso es lo que vamos a hacer en este artículo: vamos a aprovechar código de un tercero.

Esa persona se llama Sergey Biryukov, y el código es un plugin, ‘Find Posts Using Attachment’ (enlace a repositorio wordpress.org).

No tomo su código (una parte) tan libremente, sino que por ello le he pedido permiso para hacer figurar su nombre en la lista de contributors de nuestro plugin. Estoy a la espera de su respuesta.

¿Por qué puedo utilizar todo o parte de su plugin?

El autor ha incluido la licencia GNU GPLv2 o posterior en el fichero readme.txt de su plugin, pero, aunque no lo hubiera hecho, wordpress.org automáticamente se la confiere al publicar el plugin en su repositorio.

Your plugin must be compatible with the GNU General Public License v2 or later. We strongly recommend using the same license as WordPress — “GPLv2 or later.”
If you do not specify a compatible license, what you check in is considered GPLv2 or later.

 

Desarrollo de la idea

Nos faltaba un dato: saber a qué posts estaba vinculado cada attachment. De esa forma, tendríamos mayor seguridad a la hora de operar con ellos.

Pero, ¿cómo se vincula un attachment a un post?. He ahí el click de la cuestión, y lo que da más valía al plugin de Sergey Biryukov: Puede estar vinculado, principalmente, como un thumbnail, pero también como una imagen incluida dentro del texto del post.

Pues eso precisamente es lo que hace el plugin ‘Find Posts Using Attachments’. Buscar los posts a los que un attachment está vinculado, bien como thumbnail, bien como inserto en el texto.

 

Codificación

Vamos a ver a continuación el trozo de código que vamos a aprovechar, y lo comentamos:

 

Explicación

En primer lugar, hay que decir que get_posts_by_attachment_id() es una función que podemos utilizar tal cual, pasándole el id del attachment del cual queremos saber a qué posts está asociado. Y así lo haremos.

Empezamos en la línea 2, creando la matriz $used_as_thumbnail. En ella recogeremos los posts que incluyen el attachment como thumbnail.

Para ello, realizamos la consulta entre las líneas 4 a 12 y pasamos el resultado en la 14. Observad que en la consulta utiliza como índice ‘meta_key’ => ‘_thumbnail_id’, es un campo de la tabla de la base de datos ‘wp_postmeta’.

Además, en la línea 17 crea la matriz $attachment_urls con todas las url posibles del attachment. Entre las líneas 19 y 26, verifica las que corresponden con tamaños del registro del sistema.

Por otro lado, en la línea 28 crea la segunda matriz importante, $used_in_content(). Aprovecha entonces la matriz $attachment_urls para comprobar, mediante la consulta entre las líneas 30 a 39, si alguna url del attachment está contenida dentro del post.

Entonces, elimina los posibles valores repetidos en la línea 42.

Finalmente, incorpora las matrices $used_as_thumbnail$used_in_content en una matriz final $posts, que es la que devuelve la función.

 

Fichero de ejemplo

En esta entrega no voy a subir ningún fichero de ejemplo, ya que considero que el mejor ejemplo es el mismo plugin. Lo encontraréis disponible en el repositorio de wordpress.org.

 

Conclusión y próximo artículo

Gracias a la GPL, ya hemos recopilado todos los datos relativos a los attachments, los registros del sistema (tamaños de archivos) y los archivos del directorio ‘uploads’. Además, hemos establecido las taxonomías.

Por lo tanto, va siendo el momento de mostrar todo el conjunto de los datos de una forma ordenada. A partir de ahí veremos después cómo hacerlo en el back-end de WordPress.

 

Contributors

Seguimos con los mismos contributors. Esperaba con ánimo que Sergey Biryukov me hubiese aceptado mi solicitud, pero aún estoy a la espera de su respuesta.

miguelthepoohsergiotoca

Sigo animando a que participéis con vuestras críticas (constructivas, of course), comentarios, sugerencias o conocimientos técnicos.

 

Preguntas, retos y previos

Finalmente, planteo la consulta de esta entrega:

Como podéis ver en la ejecución del archivo de ejemplo de hace dos semanas, correspondiente al artículo Metadata. Todos los datos de un attachment, son muchos los datos, metadatos, tamaños del sistema y archivos vinculados, relativos a cada attachment. ¿Cómo dispondríais vosotros los datos principales y los datos adicionales para no crear una presentación inicial de los attachments excesivamente recargada?

Id pensándolo y hacer vuestras propuestas. Hasta la semana próxima.

2 opiniones en “GPL. Código libre (6) para el último dato”

  1. Me temo que sigo sin comprender mucho de lo que publicas, es vox populi que no soy desarrollador ni programador, pero me encanta ver que mis “necesidades” son atendidas más allá de lo que le apetece a programadores.

    Normalmente mis necesidades no tienen una solución sencilla y esta serie que estás montando lo demuestra con creces.

    En fin que seguiré aprendiendo poco a poco que mi cabeza no da para mucho de golpe.

    Mil gracias Sergio por dejarme participar en tu rinconcito con algo que si conozco.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *