@@ -9,7 +9,9 @@ use Drupal\Component\Utility\Unicode;
9
9
use Drupal \Component \Utility \UrlHelper ;
10
10
use Drupal \Core \Database \Database ;
11
11
use Drupal \Core \Extension \Dependency ;
12
+ use Drupal \Core \Extension \Extension ;
12
13
use Drupal \Core \Extension \ExtensionDiscovery ;
14
+ use Drupal \Core \Extension \InstallRequirementsInterface ;
13
15
use Drupal \Core \Installer \InstallerKernel ;
14
16
use Symfony \Component \HttpFoundation \RedirectResponse ;
15
17
@@ -616,6 +618,8 @@ function drupal_check_profile($profile) {
616
618
if (function_exists ($ function )) {
617
619
$ requirements = array_merge ($ requirements , $ function ('install ' ));
618
620
}
621
+
622
+ $ requirements = array_merge ($ requirements , install_check_class_requirements ($ module_list [$ module ]));
619
623
}
620
624
}
621
625
@@ -625,6 +629,9 @@ function drupal_check_profile($profile) {
625
629
$ requirements = array_merge ($ requirements , $ function ('install ' ));
626
630
}
627
631
632
+ $ extension = \Drupal::service ('extension.list.profile ' )->get ($ profile );
633
+ $ requirements = array_merge ($ requirements , install_check_class_requirements ($ extension ));
634
+
628
635
return $ requirements ;
629
636
}
630
637
@@ -660,13 +667,16 @@ function drupal_requirements_severity(&$requirements) {
660
667
function drupal_check_module ($ module ) {
661
668
/** @var \Drupal\Core\Extension\ModuleExtensionList $module_list */
662
669
$ module_list = \Drupal::service ('extension.list.module ' );
663
- $ file = DRUPAL_ROOT . '/ ' . $ module_list ->getPath ($ module ) . "/ $ module.install " ;
670
+ $ extension = $ module_list ->get ($ module );
671
+ $ file = \Drupal::root () . '/ ' . $ extension ->getPath () . "/ $ module.install " ;
664
672
if (is_file ($ file )) {
665
673
require_once $ file ;
666
674
}
667
675
// Check requirements
668
- $ requirements = \Drupal::moduleHandler ()->invoke ($ module , 'requirements ' , ['install ' ]);
669
- if (is_array ($ requirements ) && drupal_requirements_severity ($ requirements ) == REQUIREMENT_ERROR ) {
676
+ $ requirements = \Drupal::moduleHandler ()->invoke ($ module , 'requirements ' , ['install ' ]) ?? [];
677
+ $ requirements = array_merge ($ requirements , install_check_class_requirements ($ extension ));
678
+
679
+ if (!empty ($ requirements ) && drupal_requirements_severity ($ requirements ) == REQUIREMENT_ERROR ) {
670
680
// Print any error messages
671
681
foreach ($ requirements as $ requirement ) {
672
682
if (isset ($ requirement ['severity ' ]) && $ requirement ['severity ' ] == REQUIREMENT_ERROR ) {
@@ -790,3 +800,41 @@ function install_profile_info($profile, $langcode = 'en') {
790
800
}
791
801
return $ cache [$ profile ][$ langcode ];
792
802
}
803
+
804
+ /**
805
+ * Checks a module or profile requirements.
806
+ *
807
+ * See \Drupal\Core\Extension\InstallRequirementsInterface for more information.
808
+ *
809
+ * @param \Drupal\Core\Extension $extension
810
+ * The extension to check install requirements for.
811
+ *
812
+ * @return array
813
+ * The requirements.
814
+ *
815
+ * @internal
816
+ */
817
+ function install_check_class_requirements (Extension $ extension ): array {
818
+ $ extension_path = $ extension ->getPath ();
819
+ $ extension_name = $ extension ->getName ();
820
+ $ dir = \Drupal::root () . "/ $ extension_path/src/Install/Requirements " ;
821
+ $ requirements = [];
822
+ if (is_dir ($ dir )) {
823
+ $ fileSystemIterator = new FilesystemIterator ($ dir );
824
+ foreach ($ fileSystemIterator as $ fileInfo ) {
825
+ if ($ fileInfo ->isFile () && $ fileInfo ->getExtension () === 'php ' ) {
826
+ $ filename = $ fileInfo ->getFilename ();
827
+ $ requirements_path = $ dir . '/ ' . $ filename ;
828
+ require_once $ requirements_path ;
829
+
830
+ $ namespace = "Drupal \\$ extension_name \\Install \\Requirements " ;
831
+ $ class_name = $ namespace . '\\' . $ fileInfo ->getBasename ('.php ' );
832
+ if (class_exists ($ class_name ) && class_implements ($ class_name , InstallRequirementsInterface::class)) {
833
+ $ requirements = $ class_name ::getRequirements ();
834
+ }
835
+ }
836
+ }
837
+
838
+ }
839
+ return $ requirements ;
840
+ }
0 commit comments