#!/bin/bash
#
# Brandon Yap <byap@horizonhosting.com.au>
#
# This script merges a master domain from a subscription into a master domain of another subscription
#
# v1.0 - Initial release
# v1.1 - Fixed problem with emaillist


# Modify these before running
domain=domain.com.au
masterdomain=masterdomain.com.au
wwwroot=newroot


# Preliminary checks
domainid=`mysql -ss -uadmin -p\`cat /etc/psa/.psa.shadow\` psa -e "select id from domains where name='$domain'"`
if [ "$domainid" == "" ]; then
  echo "Invalid domain."
  exit
fi

pleskroot=`grep PRODUCT_ROOT_D /etc/psa/psa.conf | cut -d" " -f2`
mailnames=`grep PLESK_MAILNAMES_D /etc/psa/psa.conf | cut -d" " -f2`
emaillist="/tmp/emailaccounts"
masterdomainid=`mysql -ss -uadmin -p\`cat /etc/psa/.psa.shadow\` psa -e "select id from domains where name='$masterdomain'"`
oldwwwroot=`mysql -ss -uadmin -p\`cat /etc/psa/.psa.shadow\` psa -e "select www_root from hosting where dom_id=$domainid"`

# Change database ownerships
echo "Changing database ownerships..."
mysql -ss -uadmin -p`cat /etc/psa/.psa.shadow` psa -e "update data_bases set dom_id=$masterdomainid where dom_id=$domainid"

# Backup old wwwroot
echo "Backing up old wwwroot..."
tar czf /tmp/$domain.tar.gz -C $oldwwwroot .

# Backup mailboxes
echo "Backing up old mailboxes..."
tar czf /tmp/${domain}mailboxes.tar.gz -C $mailnames/$domain .

# Get list mailnames and passwords and dump to tab delimited file
echo "Writing mail account details to file..."
mysql -ss -uadmin -p`cat /etc/psa/.psa.shadow` psa -e "SELECT CONCAT_WS('@',mail.mail_name,domains.name),accounts.password FROM domains,mail,accounts WHERE domains.id=mail.dom_id AND accounts.id=mail.account_id AND dom_id=$domainid" > $emaillist

# Remove old subscription
echo "Removing $domain..."
$pleskroot/bin/subscription --remove $domain

# Create new domain under master domain
echo "Creating $domain under master domain $masterdomain..."
$pleskroot/bin/site -c $domain -webspace-name $masterdomain -www-root $wwwroot -hosting true

# Create email accounts
echo "Creating mail accounts..."
while read myline
do
  email=`echo $myline | awk '{print $1}'`
  password=`echo $myline | awk '{print $2}'`
  $pleskroot/bin/mail --create $email -passwd $password -mailbox true
  $pleskroot/bin/spamassassin --update $email -status true -action move
done < $emaillist

# Restore old wwwroot
echo "Restoring old wwwroot..."
tar xzf /tmp/$domain.tar.gz -C /var/www/vhosts/$masterdomain/$wwwroot

# Restore old mail files
echo "Restoring old mail files..."
tar xzf /tmp/${domain}mailboxes.tar.gz -C $mailnames/$domain

# Cleanup
rm /tmp/$domain.tar.gz
rm /tmp/${domain}mailboxes.tar.gz
rm $emaillist

echo "Complete."
echo "Now please check the ownerships of the files in the new wwwroot."
