Commit | Line | Data |
---|---|---|
6a488035 | 1 | #!/usr/bin/env bash |
5e43f8f4 | 2 | set -e |
6a488035 TO |
3 | |
4 | CALLEDPATH=`dirname $0` | |
5 | ||
6 | # Convert to an absolute path if necessary | |
7 | case "$CALLEDPATH" in | |
8 | .*) | |
9 | CALLEDPATH="$PWD/$CALLEDPATH" | |
10 | ;; | |
11 | esac | |
12 | ||
ea16a823 TO |
13 | if [ ! -f "$CALLEDPATH/setup.conf" ]; then |
14 | echo | |
15 | echo "Missing configuration file. Please copy $CALLEDPATH/setup.conf.txt to $CALLEDPATH/setup.conf and edit it." | |
16 | exit 1 | |
17 | fi | |
18 | ||
6a488035 | 19 | source "$CALLEDPATH/setup.conf" |
55f7d1ec | 20 | source "$CALLEDPATH/setup.lib.sh" |
6a488035 TO |
21 | |
22 | if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then | |
1b086766 TO |
23 | echo |
24 | echo "Usage: setup.sh [options] [schema file] [database data file] [database name] [database user] [database password] [database host] [database port] [additional args]" | |
25 | echo "[options] is a mix of zero or more of following:" | |
e16fa8d0 TO |
26 | echo " -a (All) Implies -Dgsef (default)" |
27 | echo " -D (Download) Download dependencies" | |
28 | echo " -g (GenCode) Generate DAO files, SQL files, etc" | |
29 | echo " -s (Schema) Load new schema in DB" | |
30 | echo " -d (Data-Plain) Load basic dataset in DB" | |
31 | echo " -e (Data-Examples) Load example dataset in DB" | |
32 | echo " -f (Flush) Flush caches and settings" | |
1b086766 TO |
33 | echo |
34 | echo "Example: Perform a full setup" | |
35 | echo " setup.sh -a" | |
36 | echo | |
37 | echo "Example: Setup all the code but leave the DB alone" | |
38 | echo " setup.sh -Dg" | |
39 | echo | |
40 | echo "Example: Keep the existing code but reset the DB" | |
e16fa8d0 | 41 | echo " setup.sh -sef" |
6a488035 TO |
42 | exit 0 |
43 | fi | |
44 | ||
1b086766 TO |
45 | ############################################################################### |
46 | ## Parse command line options | |
47 | ||
48 | FOUND_ACTION= | |
49 | DO_DOWNLOAD= | |
50 | DO_GENCODE= | |
51 | DO_SCHEMA= | |
52 | DO_DATA= | |
53 | DO_FLUSH= | |
e16fa8d0 | 54 | DEFAULT_DATA= |
1b086766 | 55 | |
e16fa8d0 | 56 | while getopts "aDgsdef" opt; do |
1b086766 TO |
57 | case $opt in |
58 | a) | |
59 | DO_DOWNLOAD=1 | |
60 | DO_GENCODE=1 | |
61 | DO_SCHEMA=1 | |
62 | DO_DATA=1 | |
63 | DO_FLUSH=1 | |
64 | FOUND_ACTION=1 | |
65 | ;; | |
66 | D) | |
67 | DO_DOWNLOAD=1 | |
68 | FOUND_ACTION=1 | |
69 | ;; | |
70 | g) | |
71 | DO_GENCODE=1 | |
72 | FOUND_ACTION=1 | |
73 | ;; | |
74 | s) | |
75 | DO_SCHEMA=1 | |
76 | FOUND_ACTION=1 | |
77 | ;; | |
78 | d) | |
79 | DO_DATA=1 | |
e16fa8d0 TO |
80 | DEFAULT_DATA=civicrm_data.mysql |
81 | FOUND_ACTION=1 | |
82 | ;; | |
83 | e) | |
84 | DO_DATA=1 | |
85 | DEFAULT_DATA=civicrm_generated.mysql | |
1b086766 TO |
86 | FOUND_ACTION=1 |
87 | ;; | |
88 | f) | |
89 | DO_FLUSH=1 | |
90 | FOUND_ACTION=1 | |
91 | ;; | |
92 | \?) | |
93 | echo "Invalid option: -$OPTARG" >&2 | |
94 | exit 1 | |
95 | ;; | |
96 | :) | |
97 | echo "Option -$OPTARG requires an argument." >&2 | |
98 | exit 1 | |
99 | ;; | |
100 | esac | |
101 | done | |
102 | if [ -z "$FOUND_ACTION" ]; then | |
103 | DO_DOWNLOAD=1 | |
104 | DO_GENCODE=1 | |
105 | DO_SCHEMA=1 | |
106 | DO_DATA=1 | |
107 | DO_FLUSH=1 | |
e16fa8d0 | 108 | DEFAULT_DATA=civicrm_generated.mysql |
1b086766 TO |
109 | fi |
110 | ||
111 | shift $((OPTIND-1)) | |
6a488035 TO |
112 | |
113 | # fetch command line arguments if available | |
5e43f8f4 TO |
114 | if [ ! -z "$1" ] ; then SCHEMA="$1"; fi |
115 | if [ ! -z "$2" ] ; then DBLOAD="$2"; fi | |
116 | if [ ! -z "$3" ] ; then DBNAME="$3"; fi | |
117 | if [ ! -z "$4" ] ; then DBUSER="$4"; fi | |
118 | if [ ! -z "$5" ] ; then DBPASS="$5"; fi | |
28c32cc5 PH |
119 | if [ ! -z "$6" ] ; then DBHOST="$6"; fi |
120 | if [ ! -z "$7" ] ; then DBPORT="$7"; fi | |
6a488035 TO |
121 | |
122 | # verify if we have at least DBNAME given | |
123 | if [ -z $DBNAME ] ; then | |
124 | echo "No database name defined!" | |
125 | exit 1 | |
126 | fi | |
127 | if [ -z $DBUSER ] ; then | |
128 | echo "No database username defined!" | |
129 | exit 1 | |
130 | fi | |
131 | if [ -z $DBPASS ] ; then | |
132 | read -p "Database password:" | |
133 | DBPASS=$REPLY | |
134 | fi | |
135 | ||
1b086766 TO |
136 | MYSQLCMD=$(mysql_cmd) |
137 | ############################################################################### | |
138 | ## Execute tasks | |
139 | set -x | |
140 | ||
141 | if [ -n "$DO_DOWNLOAD" ]; then | |
142 | pushd "$CALLEDPATH/.." | |
77665792 TO |
143 | COMPOSER=$(pickcmd composer composer.phar) |
144 | $COMPOSER install | |
145 | ||
146 | if has_commands bower karma ; then | |
147 | ## dev dependencies have been installed globally; don't force developer to redownload | |
148 | npm install --production | |
149 | else | |
150 | npm install | |
151 | fi | |
152 | ||
153 | BOWER=$(pickcmd node_modules/bower/bin/bower bower) | |
0292a407 TO |
154 | if [ -f "$BOWER" ]; then |
155 | NODE=$(pickcmd node nodejs) | |
156 | BOWER="$NODE $BOWER" | |
157 | fi | |
7ef63143 TO |
158 | # Without the force flag, bower may not check for new versions or verify that installed software matches version specified in bower.json |
159 | # With the force flag, bower will ignore all caches and download all deps. | |
160 | if [ -n "$OFFLINE" ]; then | |
161 | BOWER_OPT= | |
162 | elif [ ! -f "bower_components/.setupsh.ts" ]; then | |
163 | ## First run -- or cleanup from failed run | |
164 | BOWER_OPT=-f | |
165 | elif [ "bower.json" -nt "bower_components/.setupsh.ts" ]; then | |
166 | ## Bower.json has changed since last run | |
167 | BOWER_OPT=-f | |
168 | fi | |
169 | [ -f "bower_components/.setupsh.ts" ] && rm -f "bower_components/.setupsh.ts" | |
170 | $BOWER install $BOWER_OPT | |
171 | touch bower_components/.setupsh.ts | |
1b086766 TO |
172 | popd |
173 | fi | |
07565b0a | 174 | |
6a488035 TO |
175 | # run code generator if it's there - which means it's |
176 | # checkout, not packaged code | |
1b086766 TO |
177 | if [ -n "$DO_GENCODE" -a -d "$CALLEDPATH/../xml" ]; then |
178 | pushd "$CALLEDPATH/../xml" | |
179 | if [ -z "$DBPORT" ]; then | |
180 | PHP_MYSQL_HOSTPORT="$DBHOST" | |
181 | else | |
182 | PHP_MYSQL_HOSTPORT="$DBHOST:$DBPORT" | |
183 | fi | |
184 | "$PHP5PATH"php -d mysql.default_host="$PHP_MYSQL_HOSTPORT" -d mysql.default_user=$DBUSER -d mysql.default_password=$DBPASS GenCode.php $SCHEMA '' ${GENCODE_CMS} | |
185 | popd | |
28c32cc5 PH |
186 | fi |
187 | ||
1b086766 TO |
188 | if [ -n "$DO_SCHEMA" ]; then |
189 | pushd "$CALLEDPATH/../sql" | |
190 | echo; echo "Dropping civicrm_* tables from database $DBNAME" | |
191 | echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'VIEW'" \ | |
192 | | $MYSQLCMD \ | |
193 | | grep '^\(civicrm_\|log_civicrm_\)' \ | |
194 | | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop view " $1 ";"}' \ | |
195 | | $MYSQLCMD | |
196 | echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'BASE TABLE'" \ | |
197 | | $MYSQLCMD \ | |
198 | | grep '^\(civicrm_\|log_civicrm_\)' \ | |
199 | | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop table " $1 ";"}' \ | |
200 | | $MYSQLCMD | |
201 | ||
202 | echo; echo Creating database structure | |
203 | $MYSQLCMD < civicrm.mysql | |
204 | popd | |
6a488035 TO |
205 | fi |
206 | ||
1b086766 TO |
207 | if [ -n "$DO_DATA" ]; then |
208 | pushd "$CALLEDPATH/../sql" | |
e16fa8d0 | 209 | # load default data set unless system is configured with override |
1b086766 | 210 | if [ -z $DBLOAD ]; then |
e16fa8d0 TO |
211 | echo; |
212 | echo "Populating database with dataset - $DEFAULT_DATA" | |
213 | $MYSQLCMD < "$DEFAULT_DATA" | |
1b086766 TO |
214 | else |
215 | echo; echo Populating database with required data - civicrm_data.mysql | |
216 | $MYSQLCMD < civicrm_data.mysql | |
217 | echo; echo Populating database with $DBLOAD data | |
218 | $MYSQLCMD < $DBLOAD | |
219 | fi | |
220 | ||
221 | # load additional script if DBADD defined | |
222 | if [ ! -z $DBADD ]; then | |
223 | echo; echo Loading $DBADD | |
224 | $MYSQLCMD < $DBADD | |
225 | fi | |
226 | popd | |
6a488035 TO |
227 | fi |
228 | ||
1b086766 TO |
229 | if [ -n "$DO_FLUSH" ]; then |
230 | pushd "$CALLEDPATH/.." | |
1b086766 TO |
231 | # reset config_backend and userFrameworkResourceURL which gets set |
232 | # when config object is initialized | |
233 | $MYSQLCMD -e "UPDATE civicrm_domain SET config_backend = NULL; UPDATE civicrm_setting SET value = NULL WHERE name = 'userFrameworkResourceURL';" | |
234 | popd | |
235 | fi | |
6a488035 | 236 | |
1b086766 | 237 | echo; echo "NOTE: Logout from your CMS to avoid session conflicts." |
6a488035 | 238 |