fi
source "$CALLEDPATH/setup.conf"
+source "$CALLEDPATH/setup.lib.sh"
if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then
- echo; echo Usage: setup.sh [schema file] [database data file] [database name] [database user] [database password] [database host] [database port] [additional args]; echo
+ echo
+ echo "Usage: setup.sh [options] [schema file] [database data file] [database name] [database user] [database password] [database host] [database port] [additional args]"
+ echo "[options] is a mix of zero or more of following:"
+ echo " -a (All) Implies -Dgsef (default)"
+ echo " -D (Download) Download dependencies"
+ echo " -g (GenCode) Generate DAO files, SQL files, etc"
+ echo " -s (Schema) Load new schema in DB"
+ echo " -d (Data-Plain) Load basic dataset in DB"
+ echo " -e (Data-Examples) Load example dataset in DB"
+ echo " -f (Flush) Flush caches and settings"
+ echo
+ echo "Example: Perform a full setup"
+ echo " setup.sh -a"
+ echo
+ echo "Example: Setup all the code but leave the DB alone"
+ echo " setup.sh -Dg"
+ echo
+ echo "Example: Keep the existing code but reset the DB"
+ echo " setup.sh -sef"
exit 0
fi
+###############################################################################
+## Parse command line options
+
+FOUND_ACTION=
+DO_DOWNLOAD=
+DO_GENCODE=
+DO_SCHEMA=
+DO_DATA=
+DO_FLUSH=
+DEFAULT_DATA=
+
+while getopts "aDgsdef" opt; do
+ case $opt in
+ a)
+ DO_DOWNLOAD=1
+ DO_GENCODE=1
+ DO_SCHEMA=1
+ DO_DATA=1
+ DO_FLUSH=1
+ FOUND_ACTION=1
+ ;;
+ D)
+ DO_DOWNLOAD=1
+ FOUND_ACTION=1
+ ;;
+ g)
+ DO_GENCODE=1
+ FOUND_ACTION=1
+ ;;
+ s)
+ DO_SCHEMA=1
+ FOUND_ACTION=1
+ ;;
+ d)
+ DO_DATA=1
+ DEFAULT_DATA=civicrm_data.mysql
+ FOUND_ACTION=1
+ ;;
+ e)
+ DO_DATA=1
+ DEFAULT_DATA=civicrm_generated.mysql
+ FOUND_ACTION=1
+ ;;
+ f)
+ DO_FLUSH=1
+ FOUND_ACTION=1
+ ;;
+ \?)
+ echo "Invalid option: -$OPTARG" >&2
+ exit 1
+ ;;
+ :)
+ echo "Option -$OPTARG requires an argument." >&2
+ exit 1
+ ;;
+ esac
+done
+if [ -z "$FOUND_ACTION" ]; then
+ DO_DOWNLOAD=1
+ DO_GENCODE=1
+ DO_SCHEMA=1
+ DO_DATA=1
+ DO_FLUSH=1
+ DEFAULT_DATA=civicrm_generated.mysql
+fi
+
+shift $((OPTIND-1))
# fetch command line arguments if available
if [ ! -z "$1" ] ; then SCHEMA="$1"; fi
DBPASS=$REPLY
fi
-# run code generator if it's there - which means it's
-# checkout, not packaged code
-if [ -d "$CALLEDPATH/../xml" ]; then
- cd "$CALLEDPATH/../xml"
- if [ -z "$DBPORT" ]; then
- PHP_MYSQL_HOSTPORT="$DBHOST"
- else
- PHP_MYSQL_HOSTPORT="$DBHOST:$DBPORT"
- fi
- "$PHP5PATH"php -d mysql.default_host="$PHP_MYSQL_HOSTPORT" -d mysql.default_user=$DBUSER -d mysql.default_password=$DBPASS GenCode.php $SCHEMA '' $GENCODE_CMS
+MYSQLCMD=$(mysql_cmd)
+###############################################################################
+## Execute tasks
+set -x
+
+if [ -n "$DO_DOWNLOAD" ]; then
+ pushd "$CALLEDPATH/.."
+ COMPOSER=$(pickcmd composer composer.phar)
+ $COMPOSER install
+
+ if has_commands bower karma ; then
+ ## dev dependencies have been installed globally; don't force developer to redownload
+ npm install --production
+ else
+ npm install
+ fi
+
+ BOWER=$(pickcmd node_modules/bower/bin/bower bower)
+ if [ -f "$BOWER" ]; then
+ NODE=$(pickcmd node nodejs)
+ BOWER="$NODE $BOWER"
+ fi
+ # Without the force flag, bower may not check for new versions or verify that installed software matches version specified in bower.json
+ # With the force flag, bower will ignore all caches and download all deps.
+ if [ -n "$OFFLINE" ]; then
+ BOWER_OPT=
+ elif [ ! -f "bower_components/.setupsh.ts" ]; then
+ ## First run -- or cleanup from failed run
+ BOWER_OPT=-f
+ elif [ "bower.json" -nt "bower_components/.setupsh.ts" ]; then
+ ## Bower.json has changed since last run
+ BOWER_OPT=-f
+ fi
+ [ -f "bower_components/.setupsh.ts" ] && rm -f "bower_components/.setupsh.ts"
+ $BOWER install $BOWER_OPT
+ touch bower_components/.setupsh.ts
+ popd
fi
-# someone might want to use empty password for development,
-# let's make it possible - we asked before.
-if [ -z $DBPASS ]; then # password still empty
- PASSWDSECTION=""
-else
- PASSWDSECTION="-p$DBPASS"
+# run code generator if it's there - which means it's
+# checkout, not packaged code
+if [ -n "$DO_GENCODE" -a -d "$CALLEDPATH/../xml" ]; then
+ pushd "$CALLEDPATH/../xml"
+ if [ -z "$DBPORT" ]; then
+ PHP_MYSQL_HOSTPORT="$DBHOST"
+ else
+ PHP_MYSQL_HOSTPORT="$DBHOST:$DBPORT"
+ fi
+ "$PHP5PATH"php -d mysql.default_host="$PHP_MYSQL_HOSTPORT" -d mysql.default_user=$DBUSER -d mysql.default_password=$DBPASS GenCode.php $SCHEMA '' ${GENCODE_CMS}
+ popd
fi
-HOSTSECTTION=""
-if [ ! -z "$DBHOST" ]; then
- HOSTSECTION="-h $DBHOST"
+if [ -n "$DO_SCHEMA" ]; then
+ pushd "$CALLEDPATH/../sql"
+ echo; echo "Dropping civicrm_* tables from database $DBNAME"
+ echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'VIEW'" \
+ | $MYSQLCMD \
+ | grep '^\(civicrm_\|log_civicrm_\)' \
+ | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop view " $1 ";"}' \
+ | $MYSQLCMD
+ echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'BASE TABLE'" \
+ | $MYSQLCMD \
+ | grep '^\(civicrm_\|log_civicrm_\)' \
+ | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop table " $1 ";"}' \
+ | $MYSQLCMD
+
+ echo; echo Creating database structure
+ $MYSQLCMD < civicrm.mysql
+ popd
fi
-PORTSECTION=""
-if [ ! -z "$DBPORT" ]; then
- PORTSECTION="-P $DBPORT"
+if [ -n "$DO_DATA" ]; then
+ pushd "$CALLEDPATH/../sql"
+ # load default data set unless system is configured with override
+ if [ -z $DBLOAD ]; then
+ echo;
+ echo "Populating database with dataset - $DEFAULT_DATA"
+ $MYSQLCMD < "$DEFAULT_DATA"
+ else
+ echo; echo Populating database with required data - civicrm_data.mysql
+ $MYSQLCMD < civicrm_data.mysql
+ echo; echo Populating database with $DBLOAD data
+ $MYSQLCMD < $DBLOAD
+ fi
+
+ # load additional script if DBADD defined
+ if [ ! -z $DBADD ]; then
+ echo; echo Loading $DBADD
+ $MYSQLCMD < $DBADD
+ fi
+ popd
fi
-cd "$CALLEDPATH/../sql"
-echo; echo "Dropping civicrm_* tables from database $DBNAME"
-# mysqladmin -f -u $DBUSER $PASSWDSECTION $DBARGS drop $DBNAME
-MYSQLCMD="mysql -u$DBUSER $PASSWDSECTION $HOSTSECTION $PORTSECTION $DBARGS $DBNAME"
-echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'VIEW'" \
- | $MYSQLCMD \
- | grep '^\(civicrm_\|log_civicrm_\)' \
- | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop view " $1 ";"}' \
- | $MYSQLCMD
-echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'BASE TABLE'" \
- | $MYSQLCMD \
- | grep '^\(civicrm_\|log_civicrm_\)' \
- | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop table " $1 ";"}' \
- | $MYSQLCMD
-
-
-echo; echo Creating database structure
-$MYSQLCMD < civicrm.mysql
-
-# load civicrm_generated.mysql sample data unless special DBLOAD is passed
-if [ -z $DBLOAD ]; then
- echo; echo Populating database with example data - civicrm_generated.mysql
- $MYSQLCMD < civicrm_generated.mysql
-else
- echo; echo Populating database with required data - civicrm_data.mysql
- $MYSQLCMD < civicrm_data.mysql
- echo; echo Populating database with $DBLOAD data
- $MYSQLCMD < $DBLOAD
-fi
+if [ -n "$DO_FLUSH" ]; then
+ pushd "$CALLEDPATH/.."
+ # run the cli script to build the menu and the triggers
+ "$PHP5PATH"php bin/cli.php -e System -a flush --triggers 1 --session 1
-# load additional script if DBADD defined
-if [ ! -z $DBADD ]; then
- echo; echo Loading $DBADD
- $MYSQLCMD < $DBADD
+ # reset config_backend and userFrameworkResourceURL which gets set
+ # when config object is initialized
+ $MYSQLCMD -e "UPDATE civicrm_domain SET config_backend = NULL; UPDATE civicrm_setting SET value = NULL WHERE name = 'userFrameworkResourceURL';"
+ popd
fi
-# run the cli script to build the menu and the triggers
-cd "$CALLEDPATH/.."
-"$PHP5PATH"php bin/cli.php -e System -a flush --triggers 1 --session 1
-
-# reset config_backend and userFrameworkResourceURL which gets set
-# when config object is initialized
-$MYSQLCMD -e "UPDATE civicrm_domain SET config_backend = NULL; UPDATE civicrm_setting SET value = NULL WHERE name = 'userFrameworkResourceURL';"
-
-echo; echo "Setup Complete. Logout from your CMS to avoid session conflicts."
+echo; echo "NOTE: Logout from your CMS to avoid session conflicts."