Commit 11876449 authored by Sven Berg Ryen's avatar Sven Berg Ryen
Browse files

Issue #3278062 by svenryen, John_B: config form errors if...

Issue #3278062 by svenryen, John_B: config form errors if public://eu_cookie_compliance is not writable
parent a372a0df
Loading
Loading
Loading
Loading
+14 −4
Changes for eu_cookie_compliance.module: 14 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -14,7 +14,6 @@ use Drupal\Core\Url;
use Drupal\Component\Utility\UrlHelper;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Asset\AttachedAssetsInterface;
use Drupal\Component\Serialization\Json;
use Drupal\Component\Utility\Xss;
use Drupal\eu_cookie_compliance\PersonalInformationFormInterface;

@@ -179,25 +178,36 @@ function eu_cookie_compliance_page_attachments(&$variables) {

  // Add javascript.
  $uri = 'public://eu_cookie_compliance/eu_cookie_compliance.script.js';
  if (!empty($config->get('disabled_javascripts'))) {
    if (is_readable($uri)) {
      if ((float) \Drupal::VERSION < 9.3) {
        $url = file_url_transform_relative(file_create_url($uri));
      }
      else {
        $url = \Drupal::service('file_url_generator')->generateString($uri);
      }
  $query_string = \Drupal::state()->get('system.css_js_query_string') ?: '0';
      $query_string = \Drupal::state()
        ->get('system.css_js_query_string') ?: '0';
      $weight = 9;

      $variables['#attached']['html_head'][] = [
        [
          '#type' => 'html_tag',
          '#tag' => 'script',
      '#attributes' => ['src' => $url . '?' . $query_string, 'defer' => TRUE],
          '#attributes' => [
            'src' => $url . '?' . $query_string,
            'defer' => TRUE,
          ],
          '#weight' => $weight,
        ],
        'eu_cookie_compliance_script_tag__eu_cookie_compliance',
      ];

    }
    else {
      \Drupal::messenger()
        ->addError(t('Could not read the EU Cookie Compliance JavaScript file that is used to handle disabled scripts. There may be a problem with your file system or the file may be missing. Try accessing the EU Cookie Compliance settings page and re-save the form.'));
    }
  }
  // Add inline javascript.
  $disabled_javascripts = $config->get('disabled_javascripts');
  // Initialize a variable to keep libraries to we wish to disable.
+14 −3
Changes for src/EventSubscriber/EuCookieComplianceConfigEventsSubscriber.php: 14 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace Drupal\eu_cookie_compliance\EventSubscriber;
use Drupal\Core\Config\ConfigCrudEvent;
use Drupal\Core\Config\ConfigEvents;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Drupal\Component\Serialization\Json;

@@ -15,6 +16,8 @@ use Drupal\Component\Serialization\Json;
 */
class EuCookieComplianceConfigEventsSubscriber implements EventSubscriberInterface {

  use StringTranslationTrait;

  /**
   * {@inheritdoc}
   *
@@ -38,6 +41,7 @@ class EuCookieComplianceConfigEventsSubscriber implements EventSubscriberInterfa
    if (($event->getConfig()->getName() === 'eu_cookie_compliance.settings')) {

      $disabled_javascripts = $event->getConfig()->get('disabled_javascripts');
      if ($disabled_javascripts) {
        $script_snippet = 'window.euCookieComplianceLoadScripts = function(category) {' . $this->getDisabledJsScriptSnippet($disabled_javascripts) . "}";

        // Check if already directory exists.
@@ -47,8 +51,15 @@ class EuCookieComplianceConfigEventsSubscriber implements EventSubscriberInterfa
          $file_system->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
        }
        $uri = $directory . "/eu_cookie_compliance.script.js";
      \Drupal::service('file.repository')->writeData($script_snippet, $uri, FileSystemInterface::EXISTS_REPLACE);

        if (is_writable($directory)) {
          \Drupal::service('file.repository')
            ->writeData($script_snippet, $uri, FileSystemInterface::EXISTS_REPLACE);
        }
        else {
          \Drupal::messenger()
            ->addError($this->t('Could not generate the EU Cookie Compliance JavaScript file that would be used for handling disabled JavaScripts. There may be a problem with your files folder.'));
        }
      }
    }
  }

@@ -67,7 +78,7 @@ class EuCookieComplianceConfigEventsSubscriber implements EventSubscriberInterfa
    // Initialize a variable to keep libraries to we wish to disable.
    if ($disabled_javascripts !== '') {
      $load_disabled_scripts = '';
      $disabled_javascripts = _eu_cookie_compliance_explode_multiple_lines($disabled_javascripts);
      $disabled_javascripts = π_eu_cookie_compliance_explode_multiple_lines($disabled_javascripts);
      $disabled_javascripts = array_filter($disabled_javascripts, 'strlen');

      foreach ($disabled_javascripts as $key => $script) {