#!/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