| 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 | "$PHP5PATH"php GenCode.php $SCHEMA '' $GENCODE_CMS |
| 55 | fi |
| 56 | |
| 57 | # someone might want to use empty password for development, |
| 58 | # let's make it possible - we asked before. |
| 59 | if [ -z $DBPASS ]; then # password still empty |
| 60 | PASSWDSECTION="" |
| 61 | else |
| 62 | PASSWDSECTION="-p$DBPASS" |
| 63 | fi |
| 64 | |
| 65 | HOSTSECTTION="" |
| 66 | if [ ! -z "$DBHOST" ]; then |
| 67 | HOSTSECTION="-h $DBHOST" |
| 68 | fi |
| 69 | |
| 70 | PORTSECTION="" |
| 71 | if [ ! -z "$DBPORT" ]; then |
| 72 | PORTSECTION="-P $DBPORT" |
| 73 | fi |
| 74 | |
| 75 | cd "$CALLEDPATH/../sql" |
| 76 | echo; echo "Dropping civicrm_* tables from database $DBNAME" |
| 77 | # mysqladmin -f -u $DBUSER $PASSWDSECTION $DBARGS drop $DBNAME |
| 78 | MYSQLCMD="mysql -u$DBUSER $PASSWDSECTION $HOSTSECTION $PORTSECTION $DBARGS $DBNAME" |
| 79 | echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'VIEW'" \ |
| 80 | | $MYSQLCMD \ |
| 81 | | grep '^\(civicrm_\|log_civicrm_\)' \ |
| 82 | | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop view " $1 ";"}' \ |
| 83 | | $MYSQLCMD |
| 84 | echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'BASE TABLE'" \ |
| 85 | | $MYSQLCMD \ |
| 86 | | grep '^\(civicrm_\|log_civicrm_\)' \ |
| 87 | | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop table " $1 ";"}' \ |
| 88 | | $MYSQLCMD |
| 89 | |
| 90 | |
| 91 | echo; echo Creating database structure |
| 92 | $MYSQLCMD < civicrm.mysql |
| 93 | |
| 94 | # load civicrm_generated.mysql sample data unless special DBLOAD is passed |
| 95 | if [ -z $DBLOAD ]; then |
| 96 | echo; echo Populating database with example data - civicrm_generated.mysql |
| 97 | $MYSQLCMD < civicrm_generated.mysql |
| 98 | else |
| 99 | echo; echo Populating database with required data - civicrm_data.mysql |
| 100 | $MYSQLCMD < civicrm_data.mysql |
| 101 | echo; echo Populating database with $DBLOAD data |
| 102 | $MYSQLCMD < $DBLOAD |
| 103 | fi |
| 104 | |
| 105 | # load additional script if DBADD defined |
| 106 | if [ ! -z $DBADD ]; then |
| 107 | echo; echo Loading $DBADD |
| 108 | $MYSQLCMD < $DBADD |
| 109 | fi |
| 110 | |
| 111 | # run the cli script to build the menu and the triggers |
| 112 | cd "$CALLEDPATH/.." |
| 113 | "$PHP5PATH"php bin/cli.php -e System -a flush --triggers 1 --session 1 |
| 114 | |
| 115 | # reset config_backend and userFrameworkResourceURL which gets set |
| 116 | # when config object is initialized |
| 117 | $MYSQLCMD -e "UPDATE civicrm_domain SET config_backend = NULL; UPDATE civicrm_setting SET value = NULL WHERE name = 'userFrameworkResourceURL';" |
| 118 | |
| 119 | echo; echo "Setup Complete. Logout from your CMS to avoid session conflicts." |
| 120 | |