diff --git a/.gitignore b/.gitignore index 62a2f15..a6ad155 100644 --- a/.gitignore +++ b/.gitignore @@ -3,9 +3,6 @@ /bin/postscripts/commands/* /bin/postscripts/plugins/* /data/* -/etc/config -/etc/projects -/etc/customers -/etc/shortnames +/etc/* !/**/.keep \ No newline at end of file diff --git a/README.md b/README.md index 3378433..b5770ac 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,9 @@ Hope you will enjoy. Free to use. ## Installation and first use +### Prerequisites +- PHP + ### Install Project Manager In order to get you startet create first a folder, eg: diff --git a/bin/commands/create-project b/bin/commands/create-project index ef26c02..d9f67ea 100644 --- a/bin/commands/create-project +++ b/bin/commands/create-project @@ -59,19 +59,10 @@ confirm makeProjectManagerDirectories "$shortname" makeWorkspaceDirectories "$shortname" -addProjectConfig "$customer" "$project" "$shortname" +configSet "project_manager.projects.$shortname.customer" "$customer" +configSet "project_manager.projects.$shortname.project" "$project" -#if [ ! -f "$path/etc/config" ] -#then -# quoted="$(sedEscape "$project_manager_dir")" -# cat "$project_manager_dir/etc/.config_template" | \ -# sed "s/app_customer=''/app_customer='$customer'/" | \ -# sed "s/app_project=''/app_project='$project'/" | \ -# sed "s/app_project_manager_dir=''/app_project_manager_dir='$quoted'/" \ -# > "$path/etc/config" -#fi - -postScript "$project_manager_dir/bin/postscripts/commands/create-project" +runPostscripts "$shortname" "commands/create-project" echo echoSuccess "Project has been created, please configure $project_dir/etc" diff --git a/bin/commands/install-plugin b/bin/commands/install-plugin index 69fe63a..5fce23b 100644 --- a/bin/commands/install-plugin +++ b/bin/commands/install-plugin @@ -37,8 +37,7 @@ do cp "$etc_file" "$project_dir/etc/plugins/$plugin/." done -postScript "$project_manager_dir/bin/postscripts/commands/install-plugin" -postScript "$project_dir/bin/postscripts/commands/install-plugin" +runPostscripts "$shortname" "commands/install-plugin" echo echoSuccess "Plugin has been installed, please configure: $project_dir/etc/plugins/$plugin" diff --git a/bin/commands/install-project-manager b/bin/commands/install-project-manager index bd0ed29..22489dc 100644 --- a/bin/commands/install-project-manager +++ b/bin/commands/install-project-manager @@ -29,36 +29,14 @@ echoMainTitle "Install Sumedia Project Manager" echo echoSubTitle "Please configure Sumedia Project Manager" echo -workspaces_dir="$(readConsole "Workspaces dir" "Invalid selection" true "$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." &> /dev/null && pwd)")" -local_apache_httpdocs="$(readConsole "Local Apache httpdocs dir (optional)" "Invalid selection" true)" -sudo_password="$(readConsole "sudo password (optional)" "Invalid selection" true)" - -if [ ! -f "$project_manager_dir/etc/config" ] -then - cat "$project_manager_dir/etc/.project_manager_config_template" | \ - sed "s/project_manager_workspaces_dir=''/project_manager_workspaces_dir='$(sedEscape "$workspaces_dir")'/" | \ - sed "s/project_manager_local_apache_httpdocs=''/project_manager_local_apache_httpdocs='$(sedEscape "$local_apache_httpdocs")'/" \ - sed "s/project_manager_sudo_password=''/project_manager_sudo_password='$(sedEscape "$sudo_password")'/" \ - > "$project_manager_dir/etc/config" -fi - -if [ ! -f "$project_manager_dir/etc/projects" ] -then - cp "$project_manager_dir/etc/.projects_template" "$project_manager_dir/etc/projects" -fi -if [ ! -f "$project_manager_dir/etc/customers" ] -then - cp "$project_manager_dir/etc/.customers_template" "$project_manager_dir/etc/customers" -fi +workspaces_dir="$(readConsole "Workspaces dir" "Invalid selection" true "$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." &> /dev/null && pwd)")" +apache_httpdocs="$(readConsole "Local Apache httpdocs dir (optional)" "Invalid selection" true)" -if [ ! -f "$project_manager_dir/etc/shortnames" ] -then - cp "$project_manager_dir/etc/.shortnames_template" "$project_manager_dir/etc/shortnames" -fi +setConfig "project_manager.workspaces_dir" "$workspaces_dir" +setConfig "project_manager.apache_httpdocs" "$apache_httpdocs" postScript "$project_manager_dir/bin/postscripts/commands/install-project-manager" -postScript "$workspaces_dir/$customer/$project/bin/postscripts/commands/install-project-manager" echo echoSuccess "Project Manager has been installed." diff --git a/bin/commands/list-projects b/bin/commands/list-projects index d0064f0..50bdf05 100644 --- a/bin/commands/list-projects +++ b/bin/commands/list-projects @@ -40,3 +40,5 @@ then else listProjects fi + +postScript "$project_manager_dir/bin/postscripts/commands/list-projects" \ No newline at end of file diff --git a/bin/commands/remove-project b/bin/commands/remove-project index e5d1841..c1dd645 100644 --- a/bin/commands/remove-project +++ b/bin/commands/remove-project @@ -51,7 +51,8 @@ mv "$workspace_dir" "$trash_path/workspace/$customer/$project" removeProjectConfig "$shortname" -postScript "$project_manager_dir/bin/postscripts/commands/remove-project" +runPostscripts "$shortname" "commands/remove-project" +postScript "$trash_path/data/bin/postscripts/commands/remove-project" echo echoSuccess "Project has been removed" diff --git a/bin/includes/bash_header b/bin/includes/bash_header index 60a1438..6f11640 100644 --- a/bin/includes/bash_header +++ b/bin/includes/bash_header @@ -4,20 +4,14 @@ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)/includes" +project_manager_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." &> /dev/null && pwd)" + help="$(getParameter "--help" false "$*")" if [ "$help" == true ] || [ "$1" == "" ] then - usage - exit + if [ "$2" == false ] + then + usage + exit + fi fi - -project_manager_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../" &> /dev/null && pwd)" - -config_file="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." &> /dev/null && pwd)/etc/config" -if [ -f "$config" ]; then source "$config_file"; fi -projects_file="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." &> /dev/null && pwd)/etc/projects" -if [ -f "$projects_file" ]; then source "$projects_file"; fi -customers_file="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." &> /dev/null && pwd)/etc/customers" -if [ -f "$customers_file" ]; then source "$customers_file"; fi -shortnames_file="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." &> /dev/null && pwd)/etc/shortnames" -if [ -f "$shortnames_file" ]; then source "$shortnames_file"; fi \ No newline at end of file diff --git a/bin/includes/config b/bin/includes/config new file mode 100755 index 0000000..dc8e481 --- /dev/null +++ b/bin/includes/config @@ -0,0 +1,165 @@ +#!/usr/bin/php + $data) { + if ('project_manager' === $shortname) { + $config_file = "$project_manager_dir/etc/config.json"; + } elseif ('project' === $shortname) { + $config_file = "$project_manager_dir/data/$customer/$project/etc/config"; + } else { + $config_file = "$project_manager_dir/data/$customer/$project/etc/plugins/$shortname/config"; + } + file_put_contents($config_file, json_encode([$shortname => $data], JSON_PRETTY_PRINT)); + } + } \ No newline at end of file diff --git a/bin/includes/main_functions b/bin/includes/main_functions index ca58de9..17c6df4 100644 --- a/bin/includes/main_functions +++ b/bin/includes/main_functions @@ -162,4 +162,34 @@ then echo project_manager_sudo_password } + function runPostscripts { + local shortname="$(getArgument "$1")" + local script="$(getArgument "$2")" + local project="$(getProjectFromShortName "$shortname")" + local customer="$(getCustomerFromShortName "$shortname")" + local project_dir="$project_manager_dir/data/$customer/$project" + + postScript "$project_manager_dir/bin/postscripts/$script" + postScript "$project_dir/bin/postscripts/$script" + } + + function getConfig { + local configPath="$(getArgument "$1")" + local configScript="$project_manager_dir/bin/includes/config" + echo "$(source '$configScript' get "$configPath")" + } + + function setConfig { + local configPath="$(getArgument "$1")" + local value="$(getArgument "$2")" + local configScript="$project_manager_dir/bin/includes/config" + source '$configScript' set "$configPath" "$value" + } + + function removeConfig { + local configPath="$(getArgument "$1")" + local configScript="$project_manager_dir/bin/includes/config" + echo "$(source '$configScript' remove "$configPath")" + } + fi \ No newline at end of file diff --git a/bin/includes/project_manager b/bin/includes/project_manager index ca51e92..9f2df1a 100644 --- a/bin/includes/project_manager +++ b/bin/includes/project_manager @@ -107,195 +107,4 @@ then if [ ! -d "$project_manager_workspaces_dir/$customer/$project" ]; then mkdir -p "$project_manager_workspaces_dir/$customer/$project"; fi } - function addProjectConfig { - local shortname="$(getArgument "$1")" - local customer="$(getArgument "$2")" - local project="$(getArgument "$3")" - - _addProject "$project" - _addCustomer "$customer" - _addShortname "$shortname" - } - - function hasShortname { - local shortname="$(getArgument "$1")" - - for i in "${!project_manager_shortnames[@]}" - do - if [ "${project_manager_shortname[$i]}" == "$shortname" ] - then - echo true - fi - done - echo false - } - - function hasProject { - local project="$(getArgument "$1")" - - for i in "${!project_manager_projects[@]}" - do - if [ "${project_manager_projects[$i]}" == "$project" ] - then - echo true - fi - done - echo false - } - - function _addShortname { - local shortname="$(getArgument "$1")" - local hasShortname="$(hasShortname "$shortname")" - - if [ "$hasShortname" == true ] - then - echo - echoError "Shortname already exists" - echo - exit - fi - - local string=''; - for i in "${!project_manager_shortnames[@]}" - do - string+="$(echo -e "\n\t'${project_manager_shortnames[$i]}'")" - done - string+="$(echo -e "\n\t'$shortname'")" - _writeShortnames "$string" - } - - function _addProject { - local project="$(getArgument "$1")" - local hasProject="$(hasProject "$project")" - - if [ "$hasProject" == true ] - then - echo - echoError "Project already exists" - echo - exit - fi - - local string=''; - for i in "${!project_manager_projects[@]}" - do - string+="$(echo -e "\n\t'${project_manager_projects[$i]}'")" - done - string+="$(echo -e "\n\t'$project'")" - _writeProjects "$string" - } - - function _addCustomer { - local customer="$(getArgument "$1")" - - local string=''; - for i in "${!project_manager_customers[@]}" - do - string+="$(echo -e "\n\t'${project_manager_customers[$i]}'")" - done - string+="$(echo -e "\n\t'$customer'")" - _writeCustomers "$string" - } - - function _writeShortnames { - local string="$(getArgument "$1")" -cat <<- EOF > "$project_manager_dir/etc/shortnames" -#!/bin/bash - -project_manager_shortnames=($string -) -EOF - } - - function _writeCustomers { - local string="$(getArgument "$1")" -cat <<- EOF > "$project_manager_dir/etc/customers" -#!/bin/bash - -project_manager_customers=($string -) -EOF - } - - function _writeProjects { - local string="$(getArgument "$1")" -cat <<- EOF > "$project_manager_dir/etc/projects" -#!/bin/bash - -project_manager_projects=($string -) -EOF - } - - function removeProjectConfig { - local shortname="$(getArgument "$1")" - local pos="$(getProjectConfigPosition "$shortname")" - - _removeShortname "$pos" - _removeCustomer "$pos" - _removeProject "$pos" - } - - function getProjectConfigPosition { - local shortname="$(getArgument "$1")" - - for i in "${!project_manager_shortnames[@]}" - do - if [ "${$project_manager_shortnames[$i]}" == "$shortname" ] - then - ((ret=i+1)) - return "$ret" - fi - done - return 0 - } - - function _removeShortname { - local pos="$(getArgument "$1")" - - local string=''; - for i in "${!project_manager_shortnames[@]}" - do - ((nr=i+1)) - if [ "$pos" == "$nr" ] - then - continue - fi - string+="$(echo -e "\n\t'${project_manager_shortnames[$i]}'")" - done - _writeShortnames "$string" - } - - function _removeProjects { - local pos="$(getArgument "$1")" - - local string=''; - for i in "${!project_manager_projects[@]}" - do - ((nr=i+1)) - if [ "$pos" == "$nr" ] - then - continue - fi - string+="$(echo -e "\n\t'${project_manager_projects[$i]}'")" - done - _writeProjects "$string" - } - - function _removeCustomer { - local pos="$(getArgument "$1")" - - local string=''; - for i in "${!project_manager_customers[@]}" - do - ((nr=i+1)) - if [ "$pos" == "$nr" ] - then - continue - fi - string+="$(echo -e "\n\t'${project_manager_customers[$i]}'")" - done - _writeCustomers "$string" - } - fi \ No newline at end of file diff --git a/bin/project-manager b/bin/project-manager index 46c3315..65838be 100755 --- a/bin/project-manager +++ b/bin/project-manager @@ -3,23 +3,10 @@ set -e ### DO NOT EDIT THIS FILE -project_manager_dir="$(readlink -f "$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/..")" -source "$project_manager_dir/bin/includes/includes" -if [ -f "$project_manager_dir/etc/config" ] -then - source "$project_manager_dir/etc/config" -fi - -if [ -f "$project_manager_dir/etc/projects" ] -then - source "$project_manager_dir/etc/projects" -fi - -function use { +function usage { echo echoMainTitle "Sumedia Project Manager" echoSmall "Manager: $project_manager_dir" - echoSmall "Workspaces: $workspaces_dir" echo echoSubTitle "Usage:" echo @@ -35,6 +22,8 @@ function use { echo } +source "$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)/includes/bash_header" + function list { local dir=$1 @@ -154,12 +143,5 @@ else fi fi - echo - echoSubTitle "Running postscripts ..." postScript "$project_manager_dir/bin/postscripts/project-manager" - - echo - echoSuccess "Project Manager done" - echo - fi \ No newline at end of file diff --git a/etc/.config_template b/etc/.config_template deleted file mode 100644 index 31a4cba..0000000 --- a/etc/.config_template +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -### LOCAL STAGE ENV - -# url to stage -local_stage_url='' - -# The httpdocs folder on your server -local_stage_httpdocs_path='' - -### LOCAL LIVE ENV - -# url to live -local_live_url='' - -# The httpdocs folder on your server -local_live_httpdocs_path='' - -### POSTSCRIPTS - -app_dir= -if [ -f '$app_dir/etc/post_config.sh' ] -then - source '$app_dir/etc/post_config.sh' -fi diff --git a/etc/.customers_template b/etc/.customers_template deleted file mode 100644 index d9d7928..0000000 --- a/etc/.customers_template +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -project_manager_customers=() \ No newline at end of file diff --git a/etc/.project_manager_config_template b/etc/.project_manager_config_template deleted file mode 100644 index 519edd2..0000000 --- a/etc/.project_manager_config_template +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -project_manager_workspaces_dir='' -project_manager_local_apache_httpdocs='' # leave empty if you don't want to use -project_manager_sudo_password='' # leave empty to fetch on call diff --git a/etc/.projects_template b/etc/.projects_template deleted file mode 100644 index 1da510f..0000000 --- a/etc/.projects_template +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -project_manager_projects=() diff --git a/etc/.shortnames_template b/etc/.shortnames_template deleted file mode 100644 index e376c7d..0000000 --- a/etc/.shortnames_template +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -project_manager_shortnames=() diff --git a/plugins/db/etc/config b/plugins/db/etc/config deleted file mode 100644 index 2e49965..0000000 --- a/plugins/db/etc/config +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - -### STAGE - -db_stage_socket='' -db_stage_host='' -db_stage_port='' -db_stage_database='' -db_stage_user='' -db_stage_password='' - -# the admmin user is used to create and drop databases -db_stage_admin_user='' -db_stage_admin_password='' - -### LIVE - -db_live_socket='' -db_live_host='' -db_live_port='' -db_live_database='' -db_live_user='' -db_live_password='' - -# the admmin user is used to create and drop databases -db_live_admin_user='' -db_live_admin_password='' - -### LOCAL_STAGE - -# you can drive you local installation with a copy of stage or live - -db_local_stage_socket='' -db_local_stage_host='' -db_local_stage_port='' -db_local_stage_database='' -db_local_stage_user='' -db_local_stage_password='' - -# the admmin user is used to create and drop databases -db_local_stage_admin_user='' -db_local_stage_admin_password='' - -### LOCAL_LIVE - -# you can drive you local installation with a copy of stage or live - -db_local_live_socket='' -db_local_live_host='' -db_local_live_port='' -db_local_live_database='' -db_local_live_user='' -db_local_live_password='' - -# the admmin user is used to create and drop databases -db_local_live_admin_user='' -db_local_live_admin_password='' \ No newline at end of file diff --git a/plugins/db/etc/config.json b/plugins/db/etc/config.json new file mode 100644 index 0000000..d9e3da6 --- /dev/null +++ b/plugins/db/etc/config.json @@ -0,0 +1,44 @@ +{ + "db": { + "stage": { + "socket": "", + "host": "", + "port": "", + "database": "", + "user": "", + "password": "", + "admin_user": "", + "admin_password": "" + }, + "live": { + "socket": "", + "host": "", + "port": "", + "database": "", + "user": "", + "password": "", + "admin_user": "", + "admin_password": "" + }, + "local_stage": { + "socket": "", + "host": "", + "port": "", + "database": "", + "user": "", + "password": "", + "admin_user": "", + "admin_password": "" + }, + "local_live": { + "socket": "", + "host": "", + "port": "", + "database": "", + "user": "", + "password": "", + "admin_user": "", + "admin_password": "" + } + } +}