Example of administrative interfaces using views, views bulk operations and rules

Drupal has a multitude of contributed modules that provide very flexible and robust functionality. Precisely 3 of these modules are the ones mentioned, with which we can build administrative or end-user interfaces in a simple, scalable way and, most importantly, using the “Drupal methodology”.

A practical example (which we will discuss below) involves creating an interface where an administrator user would select or filter which users they want to add to a group. The example presented here is not definitive. Naturally there can be many other ways and improvements, but for our purpose, it works as a sample of what we can achieve without having to write too much code. The concept is similar to the following:

sg

We will take into account the following:

  • Naturally, we need the  ViewsViews Bulk Operations  and  Rules modules . They must be installed previously.
  • The previous interface will act on the URL  group/%group/user/add . Take into account the argument (or those we need) in the URL. We can create this URL using a View, a Panels page or any other way

PROCEDURE:

1. Vamos a admin/config/workflow/rules/components y creamos un nuevo componente de tipo “Action Set”. En nuestro caso, los parámetros se muestran a continuación:

sg1

NOTA IMPORTANTE: Se debe marcar la opción de los permisos, ya que de no hacerlo, al momento de ejecución arrojará un error.

2. Como se trata de un Action set, únicamente podremos agregar condiciones. Se debe utilizar este tipo de componente, puesto que es el que se integra con Views Bulk Operations (VBO de ahora en adelante). Si necesitamos condiciones, es posible hacer uso del módulo Conditional Rules, pero en nuestro caso, no es necesario, por lo cual el componente luce como a continuación:

actions

En la imagen anterior, se observa lo siguiente:

  • Hay una acción “Get integer argument from URL”: Dicha acción la provee el módulo Rules Data Transforms. Permite obtener un valor de la URL en donde se ejecutará el componente. Como la View estará en la URL group/%group/user/add, le indicamos la posición del argumento. Tener en cuenta que el primero (group) sería “0”, el segundo (%group) sería 1 y así sucesivamente. En este caso, sería 1:

arg

  • La segunda acción “Fetch entity by ID” permite obtener una entidad dado el tipo y el ID de la misma. Es del módulo de Rules, así que no explicaremos en qué consiste. Lo que si debemos saber, es que la entidad (en este caso el grupo) es necesario, ya que al trabajar con referencias se debe pasar el objeto (en Rules).
  • La tercera acción no es más que un llamado a otro componente. En nuestro ejemplo, es un componente que realiza las funciones de agregar al grupo como tal. Se aconseja bastante hacer uso de componentes, ya que un mismo conjunto de acciones se pueden reutilizar en diferentes reglas, en diferentes ámbitos siempre y cuando se respeten los parámetros. Volviendo al ejemplo, se ve de la siguiente manera:

actions2

Y ésta es la configuración de parámetros de dicho componente “embebido”:

variables

3. Una vez creado el componente, creamos una View (un bloque en este caso). Agregamos los campos deseados, así como los filtros expuestos. No olvidar que para el caso de los bloques, se debe habilitar el uso de AJAX, o de lo contrario, no veremos los filtros:

displays

4. Nótese que en la anterior imagen, en el campo marcado en verde, hemos agregado el campo “Bulk operations: User (User)”. Dicho campo lo provee el módulo VBO. Veamos la configuración del campo, en el desplegable “BULK OPERATIONS SETTINGS”:

users

IMPORTANT NOTE:  For this example, and taking into account that in the configuration of the first component we have indicated that it takes an argument from the URL, we must deactivate batch processing, since if we do not do so, once the process is executed we will be taken to a batch page, therefore losing the URL argument. This example applies to few results (no more than 30 users in a group), so batch processing is not required. If necessary, the structure of the main component must be re-considered.

5. Next, in the “SELECTED BULK OPERATIONS” drop-down menu, we select the first component that we saw in this article:

conff

6. We save the configuration of the field and the View. Now we only have to place the block (the same View that we just created) in the previously mentioned route. It will look similar to the following image:

result

7. When selecting and running the selected component, it will ask us for the second argument of the component (the roles in this case):

buy them

NOTE:  In the tests carried out, the argument selector is presented as a textarea where the required values ​​must be entered separated by commas. From a usability point of view it is not practical (who is going to know the ID's of X entities?). A simple way to mitigate this could be to place another block with the possible values, and using jQuery to fill them in the field. But it's just an option. Everyone can look for more options.
 
8. The confirmation window will then appear. We can omit this in the configuration of the field within the View:

select

we will see the successful execution message:

confirm

10. Observing in the group (for this case):

result2

GENERAL NOTES: