Only load autoload.php from local vendor directory if it exists
[civicrm-core.git] / CRM / Core / ClassLoader.php
index 29af6818eca95496d62e2e17c1a24702c78b940f..17aa8eb3e441fcc83b345574545397f5d951a930 100644 (file)
@@ -3,7 +3,7 @@
  +--------------------------------------------------------------------+
  | CiviCRM version 4.7                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2016                                |
+ | Copyright CiviCRM LLC (c) 2004-2017                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -29,7 +29,7 @@
  *
  *
  * @package CRM
- * @copyright CiviCRM LLC (c) 2004-2016
+ * @copyright CiviCRM LLC (c) 2004-2017
  * $Id$
  *
  */
@@ -79,6 +79,7 @@ class CRM_Core_ClassLoader {
       'CiviSeleniumTestCase',
       'CiviTestSuite',
       'CiviUnitTestCase',
+      'CiviEndToEndTestCase',
       'Contact',
       'ContributionPage',
       'Custom',
@@ -102,8 +103,11 @@ class CRM_Core_ClassLoader {
       return;
     }
     $civicrm_base_path = dirname(dirname(__DIR__));
+    $composer_autoload = "$civicrm_base_path/vendor/autoload.php";
 
-    require_once dirname(dirname(__DIR__)) . '/vendor/autoload.php';
+    if (file_exists($composer_autoload)) {
+      require_once $composer_autoload;
+    }
 
     // we do this to prevent a autoloader errors with joomla / 3rd party packages
     // use absolute path since we dont know the content of include_path as yet
@@ -122,7 +126,10 @@ class CRM_Core_ClassLoader {
     );
     $include_paths = implode(PATH_SEPARATOR, $include_paths);
     set_include_path($include_paths . PATH_SEPARATOR . get_include_path());
-    require_once "$civicrm_base_path/vendor/autoload.php";
+    // @todo Why do we need to load this again?
+    if (file_exists($composer_autoload)) {
+      require_once $composer_autoload;
+    }
   }
 
   /**
@@ -181,7 +188,7 @@ class CRM_Core_ClassLoader {
     if (
       // Only load classes that clearly belong to CiviCRM.
       // Note: api/v3 does not use classes, but api_v3's test-suite does
-      (0 === strncmp($class, 'CRM_', 4) || 0 === strncmp($class, 'api_v3_', 7) || 0 === strncmp($class, 'WebTest_', 8)) &&
+      (0 === strncmp($class, 'CRM_', 4) || 0 === strncmp($class, 'api_v3_', 7) || 0 === strncmp($class, 'WebTest_', 8) || 0 === strncmp($class, 'E2E_', 4)) &&
       // Do not load PHP 5.3 namespaced classes.
       // (in a future version, maybe)
       FALSE === strpos($class, '\\')