Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/bin/bash
set -ex
## Setup a Drupal site with CiviCRM configured for unit-testing.
## If a site already exists, destroy and recreate it.
## Usage: mk-drupal-test-site <domain.name> <db_name> </path/to/drupal> </path/to/civi>
## Pre-requisites:
## - MySQL admin credentials in ~/.my.cnf
## - Apache vhost with mod_rewrite, etc
## - DNS or /etc/hosts entries for "url"
## - Drupal source tree
## - CiviCRM source tree (outside the drupal root)
## - makepasswd
## - drush
## - (strongly recommended) filesystem with "acl" support
SITE_URL="$1"
DB_NAME="$2"
DB_USER="$DB_NAME"
DB_PASS=$(makepasswd --chars=12)
DB_HOST=localhost
DRUPAL_ROOT="$3"
CIVI_ROOT="$4"
FACL_USERS="www-data $(whoami)"
SITE_KEY=$(makepasswd --chars=16)
ADMIN_USER="admin"
ADMIN_PASS=$(makepasswd --chars=12)
if [ -z "$CIVI_ROOT" -o ! -d "$CIVI_ROOT/bin" ]; then
echo "Failed to locate civi root: $CIVI_ROOT"
exit 1
fi
if [ -z "$DB_NAME" ]; then
echo "Missing database name"
exit 2
fi
## Create database
echo "DROP DATABASE IF EXISTS $DB_NAME" | mysql
echo "CREATE DATABASE $DB_NAME" | mysql
echo "GRANT ALL ON ${DB_NAME}.* TO '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}'" | mysql
echo "GRANT SUPER ON *.* TO '${DB_USER}'@'localhost'" | mysql
## Create Drupal site
pushd "$DRUPAL_ROOT"
if [ -d "sites/$SITE_URL" ]; then
chmod u+w "sites/$SITE_URL"
rm -rf "sites/$SITE_URL"
fi
drush site-install -y \
--db-url="mysql://${DB_USER}:${DB_PASS}@${DB_HOST}/${DB_NAME}" \
--account-name="$ADMIN_USER" \
--account-pass="$ADMIN_PASS" \
--sites-subdir="$SITE_URL"
chmod u+w "sites/$SITE_URL"
## Allow shell and WWW users to both manipulate "files" directory
if which setfacl; then
for FACL_USER in $FACL_USERS ; do
find "$DRUPAL_ROOT/sites/${SITE_URL}/files" -type d | xargs setfacl -m u:${FACL_USER}:rwx -m d:u:${FACL_USER}:rwx
done
fi
## Create Drupal-CiviCRM dirs and config
for SUBDIR in modules files files/civicrm files/civicrm/templates_c ; do
if [ ! -d "sites/${SITE_URL}/${SUBDIR}" ]; then
mkdir "sites/${SITE_URL}/${SUBDIR}"
fi
done
ln -s "$CIVI_ROOT" "sites/$SITE_URL/modules/"
cat "$CIVI_ROOT/templates/CRM/common/civicrm.settings.php.tpl" \
| sed "s;%%baseURL%%;http://${SITE_URL};" \
| sed "s;%%cms%%;Drupal;" \
| sed "s;%%CMSdbHost%%;${DB_HOST};" \
| sed "s;%%CMSdbName%%;${DB_NAME};" \
| sed "s;%%CMSdbPass%%;${DB_PASS};" \
| sed "s;%%CMSdbUser%%;${DB_USER};" \
| sed "s;%%crmRoot%%;${DRUPAL_ROOT}/sites/${SITE_URL}/modules/civicrm;" \
| sed "s;%%dbHost%%;${DB_HOST};" \
| sed "s;%%dbName%%;${DB_NAME};" \
| sed "s;%%dbPass%%;${DB_PASS};" \
| sed "s;%%dbUser%%;${DB_USER};" \
| sed "s;%%siteKey%%;${SITE_KEY};" \
| sed "s;%%templateCompileDir%%;${DRUPAL_ROOT}/sites/${SITE_URL}/files/civicrm/templates_c;" \
> "sites/$SITE_URL/civicrm.settings.php"
echo >> "sites/$SITE_URL/civicrm.settings.php"
echo "define('CIVICRM_MAIL_LOG', '/dev/null');" >> "sites/$SITE_URL/civicrm.settings.php"
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
popd
## Create CiviCRM config
cat > "$CIVI_ROOT/bin/setup.conf" << EOF
SVNROOT="$CIVI_ROOT"
SCHEMA=schema/Schema.xml
DBNAME="$DB_NAME"
DBUSER="$DB_USER"
DBPASS="$DB_PASS"
DBARGS=""
PHP5PATH=
DBLOAD=
# DBADD=
EOF
cat > "$CIVI_ROOT/tests/phpunit/CiviTest/civicrm.settings.local.php" << EOF
<?php
define('CIVICRM_DSN', "mysql://${DB_USER}:${DB_PASS}@${DB_HOST}/${DB_NAME}");
define('CIVICRM_TEMPLATE_COMPILEDIR', '${DRUPAL_ROOT}/sites/${SITE_URL}/files/civicrm/templates_c');
define('DONT_DOCUMENT_TEST_CONFIG', TRUE);
EOF
cat > "$CIVI_ROOT/tests/phpunit/CiviTest/CiviSeleniumSettings.php" << EOF
<?php
class CiviSeleniumSettings {
var \$publicSandbox = false;
var \$browser = '*firefox';
var \$sandboxURL = 'http://${SITE_URL}';
var \$sandboxPATH = '';
var \$username = 'demo';
var \$password = 'demo';
var \$adminUsername = '${ADMIN_USER}';
var \$adminPassword = '${ADMIN_PASS}';
var \$adminApiKey = 'apikey${ADMIN_PASS}';
var \$siteKey = '${SITE_KEY}';
var \$UFemail = 'noreply@civicrm.org';
function __construct() {
\$this->fullSandboxPath = \$this->sandboxURL . \$this->sandboxPATH;
}
}
EOF
pushd "$CIVI_ROOT"
./bin/setup.sh
popd
pushd "$DRUPAL_ROOT"
drush -l "${SITE_URL}" -y pm-enable civicrm
drush -l "${SITE_URL}" -y pm-enable civicrm_webtest
drush -l "${SITE_URL}" -y user-create --password=demo --mail='demo@example.com' demo
drush -l "${SITE_URL}" -y user-add-role civicrm_webtest_user demo
drush -l "${SITE_URL}" -y -u "$ADMIN_USER" civicrm-api contact.create id=user_contact_id api_key="apikey$ADMIN_PASS"