Merge branch 'master' of github.com:webaccess/civicrm-core into sales-tax
[civicrm-core.git] / bin / setup.sh
1 #!/usr/bin/env bash
2 set -e
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
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
19 source "$CALLEDPATH/setup.conf"
20
21 if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then
22 echo; echo Usage: setup.sh [schema file] [database data file] [database name] [database user] [database password] [database host] [database port] [additional args]; echo
23 exit 0
24 fi
25
26
27 # fetch command line arguments if available
28 if [ ! -z "$1" ] ; then SCHEMA="$1"; fi
29 if [ ! -z "$2" ] ; then DBLOAD="$2"; fi
30 if [ ! -z "$3" ] ; then DBNAME="$3"; fi
31 if [ ! -z "$4" ] ; then DBUSER="$4"; fi
32 if [ ! -z "$5" ] ; then DBPASS="$5"; fi
33 if [ ! -z "$6" ] ; then DBHOST="$6"; fi
34 if [ ! -z "$7" ] ; then DBPORT="$7"; fi
35
36 # verify if we have at least DBNAME given
37 if [ -z $DBNAME ] ; then
38 echo "No database name defined!"
39 exit 1
40 fi
41 if [ -z $DBUSER ] ; then
42 echo "No database username defined!"
43 exit 1
44 fi
45 if [ -z $DBPASS ] ; then
46 read -p "Database password:"
47 DBPASS=$REPLY
48 fi
49
50 # run code generator if it's there - which means it's
51 # checkout, not packaged code
52 if [ -d "$CALLEDPATH/../xml" ]; then
53 cd "$CALLEDPATH/../xml"
54 if [ -z "$DBPORT" ]; then
55 PHP_MYSQL_HOSTPORT="$DBHOST"
56 else
57 PHP_MYSQL_HOSTPORT="$DBHOST:$DBPORT"
58 fi
59 "$PHP5PATH"php -d mysql.default_host="$PHP_MYSQL_HOSTPORT" -d mysql.default_user=$DBUSER -d mysql.default_password=$DBPASS GenCode.php $SCHEMA '' $GENCODE_CMS
60 fi
61
62 # someone might want to use empty password for development,
63 # let's make it possible - we asked before.
64 if [ -z $DBPASS ]; then # password still empty
65 PASSWDSECTION=""
66 else
67 PASSWDSECTION="-p$DBPASS"
68 fi
69
70 HOSTSECTTION=""
71 if [ ! -z "$DBHOST" ]; then
72 HOSTSECTION="-h $DBHOST"
73 fi
74
75 PORTSECTION=""
76 if [ ! -z "$DBPORT" ]; then
77 PORTSECTION="-P $DBPORT"
78 fi
79
80 cd "$CALLEDPATH/../sql"
81 echo; echo "Dropping civicrm_* tables from database $DBNAME"
82 # mysqladmin -f -u $DBUSER $PASSWDSECTION $DBARGS drop $DBNAME
83 MYSQLCMD="mysql -u$DBUSER $PASSWDSECTION $HOSTSECTION $PORTSECTION $DBARGS $DBNAME"
84 echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'VIEW'" \
85 | $MYSQLCMD \
86 | grep '^\(civicrm_\|log_civicrm_\)' \
87 | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop view " $1 ";"}' \
88 | $MYSQLCMD
89 echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'BASE TABLE'" \
90 | $MYSQLCMD \
91 | grep '^\(civicrm_\|log_civicrm_\)' \
92 | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop table " $1 ";"}' \
93 | $MYSQLCMD
94
95
96 echo; echo Creating database structure
97 $MYSQLCMD < civicrm.mysql
98
99 # load civicrm_generated.mysql sample data unless special DBLOAD is passed
100 if [ -z $DBLOAD ]; then
101 echo; echo Populating database with example data - civicrm_generated.mysql
102 $MYSQLCMD < civicrm_generated.mysql
103 else
104 echo; echo Populating database with required data - civicrm_data.mysql
105 $MYSQLCMD < civicrm_data.mysql
106 echo; echo Populating database with $DBLOAD data
107 $MYSQLCMD < $DBLOAD
108 fi
109
110 # load additional script if DBADD defined
111 if [ ! -z $DBADD ]; then
112 echo; echo Loading $DBADD
113 $MYSQLCMD < $DBADD
114 fi
115
116 # run the cli script to build the menu and the triggers
117 cd "$CALLEDPATH/.."
118 "$PHP5PATH"php bin/cli.php -e System -a flush --triggers 1 --session 1
119
120 # reset config_backend and userFrameworkResourceURL which gets set
121 # when config object is initialized
122 $MYSQLCMD -e "UPDATE civicrm_domain SET config_backend = NULL; UPDATE civicrm_setting SET value = NULL WHERE name = 'userFrameworkResourceURL';"
123
124 echo; echo "Setup Complete. Logout from your CMS to avoid session conflicts."
125