  #!/bin/bash
  # Скрипт для работы с проектами
  # Автор: Роман Коноплев (korodm@gmail.com)
  
  # Функция вывода справки
  function help() {
      echo "Скрипт для работы с проектами"
      echo
      echo "Использование: `basename ${0}` -options project_name"
      echo "Опции:"
      echo " -c       Создать проект"
      echo " -r       Удалить проект"
      echo " -h       Коммит проекта"
      echo " -m       Создание/удаление/коммит вместе с базой данных"
      echo "          (использовать с -c, -r или -h)"
      echo
      echo " -i       Вывод этой справки"
      echo
  }
  
  ################################################################################
  #                          Стандартные переменные
  ################################################################################
  
  # Рабочий каталог
  WORK_DIR="/home/korodm/Documents/sites/"
  
  # Форматирование вывода
  END=$(tput hpa $(tput cols))$(tput cub 6)
  RED=$(tput setf 4)
  GREEN=$(tput setf 2)
  RESET=$(tput sgr0)
  
  ################################################################################
  #                                Проверки
  ################################################################################
  
  # Проверка на наличие передаваемых параметров
  if ! [ -n "${2}" ]
  then
      help
      exit 1
  else
      SITE=${2}
  fi
  
  # Проверка рабочего каталога
  while [[ ! -d ${WORK_DIR} ]]
  do
      printf "path to work dir: "
      read WORK_DIR
  done
  
  # Если рабочий каталог был указан без / вконце, добавим этот слэш
  if [[ "${WORK_DIR: -1}" != "/" ]]
  then
      WORK_DIR=${WORK_DIR}''"/"
  fi
  
  ################################################################################
  #                               Блок функций
  ################################################################################
  
  # Функция создания проекта
  function create() {    
      # Проверка на существование каталога для сайта в рабочем каталоге
      while [[ -d "${WORK_DIR}${SITE}" ]]
      do
          printf "path to project dir: "
          read SITE
      done
      
      mkdir ${WORK_DIR}${SITE}
      
      # Создание index.php
      printf "<h1>Сайт %s работает!</h1>
  <h2>%s%s/index.php</h2>
  <?php phpinfo(); ?>" ${SITE} ${WORK_DIR} ${SITE} > ${WORK_DIR}${SITE}/index.php
  
      echo "Создание сайта ${SITE}${END}${GREEN}[OK]${RESET}"
  }
  
  # Функция удаления проекта
  function delete() {
      # Проверка на существование каталога для сайта в рабочем каталоге
      while [[ ! -d "${WORK_DIR}${SITE}" ]]
      do
          printf "path to project dir: "
          read SITE
      done
      
      rm -R ${WORK_DIR}${SITE}
      
      echo "Удаление сайта ${SITE}${END}${GREEN}[OK]${RESET}"
  }
  
  # Функция коммита
  function commit() {
      # Проверка на существование каталога для сайта в рабочем каталоге
      while [[ ! -d "${WORK_DIR}${SITE}/.hg" ]]
      do
          printf "path to project dir: "
          read SITE
      done
      
      cd ${WORK_DIR}${SITE}
      
      for i in $(find . -type f -name "*.php")
      do
          if ! php -l ${i} > /dev/null
          then
              echo "Найдены ошибки ${SITE}${END}${RED}[FAIL]${RESET}"
              exit 1
          fi
      done
      
      hg addremove
      hg commit
      hg push
      
      cd - > /dev/null
      
      echo "Коммит сайта ${SITE}${END}${GREEN}[OK]${RESET}"
  }
  
  # Функция создания базы данных
  function mysql_create() {
      
      mysql -uroot -p --execute="create database ${SITE};"
      mysql -uroot -p --execute="GRANT ALL PRIVILEGES ON ${SITE}.* TO ${SITE}@localhost IDENTIFIED by '${SITE}' WITH GRANT OPTION;"
      
      echo "Создание базы данных ${SITE}${END}${GREEN}[OK]${RESET}"
  }
  
  # Функция удаления базы данных
  function mysql_delete() {
  
      mysql -uroot -p --execute="drop database ${SITE};"
      mysql -uroot -p --execute="USE mysql; DELETE FROM user WHERE User='${SITE}';"
      
      echo "Удаление базы данных ${SITE}${END}${GREEN}[OK]${RESET}"
  }
  
  # Функция бэкапа базы данных для последующего коммита
  function mysql_backup() {
      
      # Проверка на существование каталога для сайта в рабочем каталоге
      while [[ ! -d "${WORK_DIR}${SITE}/.hg" ]]
      do
          printf "path to project dir: "
          read SITE
      done
      
      cd ${WORK_DIR}${SITE}
      
      mysqldump -uroot -p ${SITE} > mysql-`date +%m%d%y`.sql
      
      echo "Бэкап базы ${SITE}${END}${GREEN}[OK]${RESET}"
  }
  
  ################################################################################
  #                                 Основной скрипт
  ################################################################################
  
  if [ $# -eq 0 ]  # Сценарий вызван без аргументов?
  then
      help
      exit 65
  fi
  
  while getopts ":crhi" OPTION
  do
      case ${OPTION} in
          
          c ) while getopts ":m" OTHER_OPTION
              do
                  case ${OTHER_OPTION} in
                  
                      m ) create
                          mysql_create
                          exit 0 ;;
                      
                      * ) echo "Недопустимый сценарий"
                          exit 1 ;;
                  
                  esac
              done
              
              create
              exit 0 ;;
          
          r ) while getopts ":m" OTHER_OPTION
              do
                  case ${OTHER_OPTION} in
                  
                      m ) delete
                          mysql_delete
                          exit 0 ;;
                      
                      * ) echo "Недопустимый сценарий"
                          exit 1 ;;
                  
                  esac
              done
              
              delete
              exit 0 ;;
          
          h ) while getopts ":m" OTHER_OPTION
              do
                  case ${OTHER_OPTION} in
                  
                      m ) mysql_backup
                          commit
                          exit 0 ;;
                      
                      * ) echo "Недопустимый сценарий"
                          exit 1 ;;
                  
                  esac
              done
              
              commit
              exit 0 ;;
          
          i ) help
              exit 0 ;;
          
          * ) echo "Недопустимый сценарий"
              exit 1 ;;
          
      esac
  done
  
  exit 0;