Commit 37263338 authored by catch's avatar catch
Browse files

Issue #3225812 by larowlan, Gábor Hojtsy, catch, andypost: Add lifecycle_link key to info.yml files

parent 16edf0a2
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -19,6 +19,11 @@ final class ExtensionLifecycle {
   */
  const LIFECYCLE_IDENTIFIER = 'lifecycle';

  /**
   * The string used to identify the lifecycle link in an .info.yml file.
   */
  const LIFECYCLE_LINK_IDENTIFIER = 'lifecycle_link';

  /**
   * Extension is experimental. Warnings will be shown if installed.
   */
+11 −2
Original line number Diff line number Diff line
@@ -108,14 +108,23 @@ public function parse($filename) {
        $parsed_info['version'] = \Drupal::VERSION;
      }
      $parsed_info += [ExtensionLifecycle::LIFECYCLE_IDENTIFIER => ExtensionLifecycle::STABLE];
      if (!ExtensionLifecycle::isValid($parsed_info[ExtensionLifecycle::LIFECYCLE_IDENTIFIER])) {
      $lifecycle = $parsed_info[ExtensionLifecycle::LIFECYCLE_IDENTIFIER];
      if (!ExtensionLifecycle::isValid($lifecycle)) {
        $valid_values = [
          ExtensionLifecycle::EXPERIMENTAL,
          ExtensionLifecycle::STABLE,
          ExtensionLifecycle::DEPRECATED,
          ExtensionLifecycle::OBSOLETE,
        ];
        throw new InfoParserException("'lifecycle: {$parsed_info[ExtensionLifecycle::LIFECYCLE_IDENTIFIER]}' is not valid in $filename. Valid values are: '" . implode("', '", $valid_values) . "'.");
        throw new InfoParserException("'lifecycle: {$lifecycle}' is not valid in $filename. Valid values are: '" . implode("', '", $valid_values) . "'.");
      }
      if (in_array($lifecycle, [ExtensionLifecycle::DEPRECATED, ExtensionLifecycle::OBSOLETE], TRUE)) {
        if (empty($parsed_info[ExtensionLifecycle::LIFECYCLE_LINK_IDENTIFIER])) {
          throw new InfoParserException(sprintf("Extension %s (%s) has 'lifecycle: %s' but is missing a '%s' entry.", $parsed_info['name'], $filename, $lifecycle, ExtensionLifecycle::LIFECYCLE_LINK_IDENTIFIER));
        }
        if (!filter_var($parsed_info[ExtensionLifecycle::LIFECYCLE_LINK_IDENTIFIER], FILTER_VALIDATE_URL)) {
          throw new InfoParserException(sprintf("Extension %s (%s) has a '%s' entry that is not a valid URL.", $parsed_info['name'], $filename, ExtensionLifecycle::LIFECYCLE_LINK_IDENTIFIER));
        }
      }
    }
    return $parsed_info;
+1 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ name: 'Entity Reference'
type: module
description: 'Obsolete. All the functionality has been moved to Core.'
lifecycle: obsolete
lifecycle_link: 'https://www.drupal.org/about/core/policies/core-change-policies/deprecated-and-obsolete-modules-and-themes#s-entity-reference'
package: Field types
version: VERSION
hidden: true
+1 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ name: Testing
type: module
description: 'Obsolete. SimpleTest has been removed from core.'
lifecycle: obsolete
lifecycle_link: 'https://www.drupal.org/about/core/policies/core-change-policies/deprecated-and-obsolete-modules-and-themes#s-simpletest'
package: Core
version: VERSION
hidden: true
+1 −0
Original line number Diff line number Diff line
@@ -4,3 +4,4 @@ description: 'Support module for testing an obsolete module extension.'
package: Testing
version: VERSION
lifecycle: obsolete
lifecycle_link: 'https://i.giphy.com/media/100JPq1ylYXEti/giphy.webp'
Loading