Patches toepassen met Composer

Moeilijkheidsgraad

trefwoorden

Nu en dan kom je modules tegen die net niet doen wat je van ze verlangt, tenzij dat je een patch toepast.

Op het ogenblik dat ik deze bespreking maak is er bijvoorbeeld een patch voor de Fullcalender View module. Een kalender waar je interactief inhoud kunt toevoegen door te dubbelklikken op een dag in de kalender. Dit lukt aardig als administrator maar als je rechten geeft aan anonieme of geverifieerde gebruikers om hetzelfde te doen, dan loopt het mis.

De patch staat op: https://www.drupal.org/files/issues/2018-12-05/fullcalendar_view-301813…

en ziet er zo uit. Je kan nu in de 2 bestanden de juiste aanpassingen doen (+ is toevoegen, - is verwijderen) , maar dit is nogal omslachtig en dit is dan nog een simpele patch...

diff --git a/fullcalendar_view.theme.inc b/fullcalendar_view.theme.inc
index 9a05838..6fc4cf6 100644
--- a/fullcalendar_view.theme.inc
+++ b/fullcalendar_view.theme.inc
@@ -48,7 +48,7 @@ function template_preprocess_views_view_fullcalendar(array &$variables) {

   // Can the user add a new event?
   $dbl_click_to_create = FALSE;
-  if (!empty($user) && $user->hasPermission("create $event_bundle_type " . $entity_type->getLabel())) {
+  if (!empty($user) && $user->hasPermission(strtolower("create $event_bundle_type " . $entity_type->getLabel()))) {
     $dbl_click_to_create = TRUE;
   }
   // Pass entity type to twig template.
diff --git a/src/Controller/CalendarEventController.php b/src/Controller/CalendarEventController.php
index d2ec43e..141f3b3 100644
--- a/src/Controller/CalendarEventController.php
+++ b/src/Controller/CalendarEventController.php
@@ -202,10 +202,11 @@ class CalendarEventController extends ControllerBase {
     $end_field = $request->get('end_field', '');
     $form = [];

-    if (!empty($type)) {
+    if (!empty($type) && !empty($entity_id)) {
+      $entity_label = $this->entityTypeManager()->getDefinition($entity_id)->getLabel();
       $user = $this->currentUser();
       // Check the user permission.
-      if (!empty($user) && $user->hasPermission("create $type " . $entity_id)) {
+      if (!empty($user) && $user->hasPermission(strtolower("create $type " . $entity_label))) {
         $data = [
           'type' => $type,
         ];

Om dit met Composer uit te voeren, moet je in het composer.json bestand 2 zaken toevoegen.

Eerst moet je bij het require gedeelte "cweagans/composer-patches": "~1.0"  toevoegen. Je moet ook de vorige regel met een komma afsluiten.

Screen001794.png

Daarna moet je in het extra gedeelte dit toevoegen. Merk op dat dit de URL is van de patch vanuit drupal.org voorafgegan door een tekstgedeelte dat je zelf kiest. Je moet ook hier de vorige regel met een komma afsluiten.


Screen001795.png

De module moet je met Composer installeren. Met composer update voer je de controle uit om te zien of er patches zijn.

Screen001792.png

Deze methode geniet de voorkeur op de git methode, aangezien bij updates de patches, indien nodig, telkens worden uitgevoerd. Anders moet je dit telkens opnieuw uitvoeren. 

Bron: http://www.anexusit.com/blog/how-to-apply-patches-drupal-8-composer met de nodige aanpassingen om het effectief te laten werken.