Following the amazing work @david-snopek posted:
- Blog post - CiviCRM & D8,
- David's StackExchange Post.
I spent the better part of last evening trying to get CiviCRM up and running on a Drupal 8.4 BLT project.
After trying a few different approaches, unfortunately I'm now seeing the following error when trying to enable the CiviCRM Core
Module
CiviCRM must be downloaded into the libraries folder.
No matter what I try, I can't seem to get the module to recognize that civicrm is installed.
Other things I've tried:
- manually copying the
[project_root]/vendor/civicrm-core
into[project_root]/docroot/libraries/civicrm-core
- Renaming
libraries/civicrm-core
tolibraries/civicrm
- Modifying
composer.json
to try and install CiviCRM into the libraries folder: - Creating symbolic links to the folder (my least favorite attempt)
Here is the composer.json update for number 3 above:
"require": {
"acquia/blt": "^8.3",
"phpoffice/PHPWord": "dev-zend-version as 0.13.0",
"civicrm/civicrm-core": "4.7.25"
},
...
"repositories": {
"phpword": {
"type": "vcs",
"url": "https://github.com/dsnopek/PHPWord.git"
},
"zetacomponents-mail": {
"type": "vcs",
"url": "https://github.com/civicrm/zetacomponents-mail.git"
},
"civicrm": {
"type": "package",
"package": {
"name": "civicrm/civicrm-core",
"version": "4.7.25",
"type": "drupal-library",
"source": {
"url": "https://github.com/civicrm/civicrm-core.git",
"type": "git",
"reference": "origin/master"
}
}
}
}
source: https://gist.github.com/mortenson/a5390d99013b5b8c0254081e89bb4d47
I think this has to do with an autoloader issue perhaps seeing that BLT does not use the Drupal composer.json file and the instructions @david-snopek posted were for the traditional Drupal installation method.
I was able to trace the error to modules/custom/civicrm-drupal/civicrm.install:125
.
/**
* Returns the path to where CiviCRM is installed.
*
* @return string|void
*
* Recommended location for civicrm is in /libraries/civicrm [citation needed].
* We also allow /modules/civicrm, which seems to work fine.
*/
function _civicrm_find_civicrm() {
if ($path = drupal_get_path('module', 'civicrm')) {
if (file_exists($path . '/CRM/Core/ClassLoader.php')) {
return \Drupal::service('file_system')->realpath($path);
}
}
$path = 'vendor/civicrm/civicrm-core';
if (file_exists($path . '/CRM/Core/ClassLoader.php')) {
return \Drupal::service('file_system')->realpath($path);
}
return NULL;
}
Notes on my process:
I ran into a couple snags with the Gist David posted.
When running
$ composer require 'phpoffice/PHPWord:dev-zend-version as 0.13.0'
, I noticed that Composer was trying to add the dependency as:"require": { "phpoffice/PHPWord": "dev-zend-version", "as 0.13.0" },
This failed but I was able to get past the issue by manually adding the dependency to the composer.json file as:
"require": {
"acquia/blt": "^8.3",
"phpoffice/PHPWord": "dev-zend-version as 0.13.0",
},
Unfortunately, I then got stuck on the next step requiring civicrm-core until I read the comment a bit closer. I believe this step is now incorrect as civicrm-core 4.7.25
has been released.
#Require civicrm-core at the requested version. #TODO: Need to keep using my fork until 4.7.25 is released! #composer require civicrm/civicrm-core:$CIVICRM_VERSION composer require "civicrm/civicrm-core:dev-roundearth-$CIVICRM_VERSION as $CIVICRM_VERSION"
I was able to get past that issue by updating the additional repository via:
composer config repositories.civicrm-core vcs https://github.com/civicrm/civicrm-core.git