#!/bin/sh

#********************************************************************
# Save FreePBX Web Setup
# Similar to Browser File > Save Page As > Web Page, complete
# Written By Samy Antoun
#
# 1. BasePath is the main dir where the files will be saved,
# 2. CommonDir contains images and scripts required
# 3. Change MySQLuser and MySQLpass
# 4. Change FreePBXuser and FreePBXpass
#********************************************************************

############### Variables ##############
BasePath="/usr/src/Backup/FreePBX/web"
CommonDir="/var/www/html/admin"
MySQLuser="user"
MySQLpass="pass"
FreePBXuser="user"
FreePBXpass="pass"

#******** url Prefix DONT CHANGE *******
urlPrefix="http://localhost/admin/config.php"

############ Get SQL Result ############
###### Parameter: Select Statment ######
function GetSqlResult {
	res=`mysql --skip-column-names -s -u$MySQLuser -p$MySQLpass -e "USE asterisk; $1"`
	echo $res
}

######## Save Web Page Function ########
##### Parameters: Folder,File,URL ######
########## ,Common Files Level #########
function SaveWebPage {
	dir=$BasePath/backup/$1
	if [ ! -d $dir ]
	then
		mkdir -p $dir
	fi
	curl "$urlPrefix?$3" -o $dir/$2".htm" -u "$FreePBXuser:$FreePBXpass" -w "Downloaded %{url_effective}\n" -s -S
	# Replace common and images reference
	level=""
	for n in `seq $4`
	do
		level=../$level
	done
	level=$level"common/"
	sed -i "s|common/|$level"common/"|g" $dir/$2".htm"
	sed -i "s|images/|$level"images/"|g" $dir/$2".htm"
}

#********** Saving Functions ***********
########### General Settings ###########
function SaveGeneralSettings {
	SaveWebPage GeneralSettings GeneralSettings "type=setup&display=general" 2
}

############## Extensions ##############
function SaveExtensions {
	res=`GetSqlResult "SELECT CONCAT(id,'|',tech) AS 'out' FROM devices"`
	for fld in $res
	do
		fld1=`echo $fld | awk -F'|' '{ print $1 }'`
		fld2=`echo $fld | awk -F'|' '{ print $2 }'`
		dir="Extensions/"$fld2
		file=$fld1
		url="type=setup&display=extensions&skip=0&extdisplay="$fld1
		SaveWebPage $dir $file $url 3
	done
}

############ Inbound Routes ############
function SaveInboundRoutes {
	res=`GetSqlResult "SELECT CONCAT(extension,'|',cidnum,'|',channel) AS 'out' FROM incoming"`
	for fld in $res
	do
		fld1=`echo $fld | awk -F'|' '{ print $1 }'`
		fld2=`echo $fld | awk -F'|' '{ print $2 }'`
		fld3=`echo $fld | awk -F'|' '{ print $3 }'`
		dir="InboundRoutes"
		file=$fld1$fld2$fld3
		url="display=did&extdisplay="$fld1/$fld2/$fld3
		SaveWebPage $dir $file $url 2
	done
}

############ Outbound Routes ###########
function SaveOutboundRoutes {
	res=`GetSqlResult "SELECT REPLACE(SUBSTRING(application,7),' ','+') As app FROM extensions WHERE left(application, 6 ) = 'outrt-'"`
	for fld in $res
	do
		dir="OutboundRoutes"
		file=$fld
		url="display=routing&extdisplay="$fld
		SaveWebPage $dir $file $url 2
	done
}

############# Ring Groups ##############
function SaveRingGroups {
	res=`GetSqlResult "SELECT grpnum FROM ringgroups"`
	for fld in $res
	do
		dir="RingGroups"
		file=$fld
		url="display=ringgroups&extdisplay=GRP-"$fld
		SaveWebPage $dir $file $url 2
	done
}

################ Trunks ################
function SaveTrunks {
	res=`GetSqlResult "SELECT CONCAT(variable,'|',REPLACE(value,' ','+')) AS 'out' FROM globals WHERE LEFT(variable, 4) = 'OUT_'"`
	for fld in $res
	do
		fld1=`echo $fld | awk -F'|' '{ print $1 }'`
		fld2=`echo $fld | awk -F'|' '{ print $2 }'`
		fld2_1=`echo $fld2 | awk -F'/' '{ print $1 }'`
		fld2_2=`echo $fld2 | awk -F'/' '{ print $2 }'`
		dir="Trunks/"$fld2_1
		file=$fld2_2
		# If the trunk has no name (Enum Trunk), Create a name
		cnt=0
		if [ "$file" = "" ]
		then
			let "cnt += 1"
			file=$fld2_1$cnt
		fi
		# Save
		url="display=trunks&extdisplay="$fld1
		SaveWebPage $dir $file $url 3
	done
}

########## CID Lookup Sources ##########
function SaveCIDlookup {
	res=`GetSqlResult "SELECT CONCAT(cidlookup_id,'|',REPLACE(description,' ','+')) AS 'out' FROM cidlookup"`
	for fld in $res
	do
		fld1=`echo $fld | awk -F'|' '{ print $1 }'`
		fld2=`echo $fld | awk -F'|' '{ print $2 }'`
		dir="CIDSource"
		file=$fld2
		url="display=cidlookup&itemid="$fld1
		SaveWebPage $dir $file $url 2
	done
}

################# DISA #################
function SaveDISA {
	res=`GetSqlResult "SELECT CONCAT(disa_id,'|',REPLACE(displayname,' ','+')) AS 'out' FROM disa"`
	for fld in $res
	do
		fld1=`echo $fld | awk -F'|' '{ print $1 }'`
		fld2=`echo $fld | awk -F'|' '{ print $2 }'`
		dir="DISA"
		file=$fld2
		url="display=disa&itemid="$fld1
		SaveWebPage $dir $file $url 2
	done
}

#************* Main Program ************
########### Delete Old Files ###########
rm -fR $BasePath/backup/*
rm -fR $BasePath/common/*

########## Copy Common Files ###########
cp -fR $CommonDir/common $BasePath/common
cp -LfR $CommonDir/images $BasePath/common

################ Saving ################
SaveGeneralSettings
SaveExtensions
SaveInboundRoutes
SaveOutboundRoutes
SaveRingGroups
SaveTrunks
SaveCIDlookup
SaveDISA