2
0
Эх сурвалжийг харах

Add the hunt group code that was removed from resources/switch.php to the dev/apps/hunt_groups/resources/functions directory.

Mark Crane 12 жил өмнө
parent
commit
345f890a22

+ 643 - 0
hunt_groups/resources/functions/save_hunt_group.php

@@ -0,0 +1,643 @@
+<?php
+/*
+	FusionPBX
+	Version: MPL 1.1
+
+	The contents of this file are subject to the Mozilla Public License Version
+	1.1 (the "License"); you may not use this file except in compliance with
+	the License. You may obtain a copy of the License at
+	http://www.mozilla.org/MPL/
+
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+
+	The Original Code is FusionPBX
+
+	The Initial Developer of the Original Code is
+	Mark J Crane <[email protected]>
+	Portions created by the Initial Developer are Copyright (C) 2008-2012
+	the Initial Developer. All Rights Reserved.
+
+	Contributor(s):
+	Mark J Crane <[email protected]>
+*/
+
+
+function save_hunt_group() {
+
+	//Hunt Group Lua Notes:
+		//get the domain
+		//loop through all Hunt Groups
+			//get the Hunt Group information such as the name and description
+			//add each Hunt Group to the dialplan
+			//get the list of destinations then build the Hunt Group lua
+
+	//get the domain
+		global $db, $domain_uuid, $host, $config;
+
+		$tmp = "";
+		$tmp .= "\n";
+		$tmp .= " domain_name = \"".$domain."\"; //by default this is the ipv4 address of FreeSWITCH used for transfer to voicemail\n";
+		$tmp .= "\n";
+		$tmp .= "\n";
+
+	//prepare for hunt group .lua files to be written. delete all hunt groups that are prefixed with huntgroup_ and have a file extension of .lua
+		$v_prefix = 'v_huntgroup_';
+		if($dh = opendir($_SESSION['switch']['scripts']['dir'])) {
+			$files = Array();
+			while($file = readdir($dh)) {
+				if($file != "." && $file != ".." && $file[0] != '.') {
+					if(is_dir($dir . "/" . $file)) {
+						//this is a directory
+					} else {
+						if (substr($file,0, strlen($v_prefix)) == $v_prefix && substr($file,-4) == '.lua') {
+							if ($file != "huntgroup_originate.lua") {
+								unlink($_SESSION['switch']['scripts']['dir'].'/'.$file);
+							}
+						}
+					}
+				}
+			}
+			closedir($dh);
+		}
+
+	//loop through all Hunt Groups
+		$x = 0;
+
+		$sql = "select * from v_hunt_groups ";
+		$prep_statement = $db->prepare(check_sql($sql));
+		$prep_statement->execute();
+		$result = $prep_statement->fetchAll(PDO::FETCH_ASSOC);
+		foreach ($result as &$row) {
+				//get the Hunt Group information such as the name and description
+					//$row['hunt_group_uuid']
+					//$row['hunt_group_extension']
+					//$row['hunt_group_name']
+					//$row['hunt_group_type']
+					//$row['hunt_group_timeout']
+					//$row['hunt_group_context']
+					//$row['hunt_group_ringback']
+					//$row['hunt_group_cid_name_prefix']
+					//$row['hunt_group_pin']
+					//$row['hunt_group_caller_announce']
+					//$row['hunt_group_enabled']
+					//$row['hunt_group_description']
+					$domain_uuid = $row['domain_uuid'];
+					$dialplan_uuid = $row['dialplan_uuid'];
+
+				//add each hunt group to the dialplan
+					if (strlen($row['hunt_group_uuid']) > 0) {
+						//set default action to add
+							$action = 'add';
+						//check whether the dialplan entry exists in the database
+							$action = 'add'; //set default action to add
+							$i = 0;
+							$sql = "select count(*) as num_rows from v_dialplans ";
+							$sql .= "where domain_uuid = '".$domain_uuid."' ";
+							$sql .= "and dialplan_uuid = '".$dialplan_uuid."' ";
+							$prep_statement_2 = $db->prepare(check_sql($sql));
+							if ($prep_statement_2) {
+								$prep_statement_2->execute();
+								$row2 = $prep_statement_2->fetch(PDO::FETCH_ASSOC);
+								if ($row2['num_rows'] > 0) {
+									//$num_rows = $row2['num_rows'];
+									$action = 'update';
+								}
+							}
+							unset($prep_statement, $result);
+
+						if ($action == 'add') {
+							//create dialplan entry for each huntgroup
+								$app_uuid = '0610f841-2e27-4c5f-7926-08ab3aad02e0';
+								if ($row['hunt_group_enabled'] == "false") {
+									$dialplan_enabled = 'false';
+								}
+								else {
+									$dialplan_enabled = 'true';
+								}
+								if (strlen($dialplan_uuid) == 0) {
+									//create a dialplan uuid
+										$dialplan_uuid = uuid();
+									//update the hunt groups table with the database
+										$sql = "update v_hunt_groups ";
+										$sql .= "set dialplan_uuid = '".$dialplan_uuid."' ";
+										$sql .= "where domain_uuid = '".$domain_uuid."' ";
+										$sql .= "and hunt_group_uuid = '".$row['hunt_group_uuid']."' ";
+										$db->query($sql);
+										unset($sql);
+								}
+
+								require_once "resources/classes/dialplan.php";
+								$dialplan = new dialplan;
+								$dialplan->domain_uuid = $domain_uuid;
+								$dialplan->app_uuid = $app_uuid;
+								$dialplan->dialplan_uuid = $dialplan_uuid;
+								$dialplan->dialplan_name = $row['hunt_group_name'];
+								//$dialplan->dialplan_continue = $dialplan_continue;
+								$dialplan->dialplan_order = '330';
+								$dialplan->dialplan_context = $_SESSION['context'];
+								$dialplan->dialplan_enabled = $dialplan_enabled;
+								$dialplan->dialplan_description = $row['hunt_group_description'];
+								$dialplan->dialplan_add();
+								unset($dialplan);
+						}
+
+						if ($action == 'update') {
+							//update the huntgroup fifo
+								$dialplan_name = $row['hunt_group_name'];
+								$dialplan_order = '330';
+								$context = $row['hunt_group_context'];
+								if ($row['hunt_group_enabled'] == "false") {
+									$enabled = 'false';
+								}
+								else {
+									$enabled = 'true';
+								}
+								$description = $row['hunt_group_description'];
+								$hunt_group_uuid = $row['hunt_group_uuid'];
+
+								$sql = "update v_dialplans set ";
+								$sql .= "dialplan_name = '$dialplan_name', ";
+								$sql .= "dialplan_order = '$dialplan_order', ";
+								$sql .= "dialplan_context = '$context', ";
+								$sql .= "dialplan_enabled = '$enabled', ";
+								$sql .= "dialplan_description = '$description' ";
+								$sql .= "where domain_uuid = '".$domain_uuid."' ";
+								$sql .= "and dialplan_uuid = '".$dialplan_uuid."' ";
+								$db->query($sql);
+								unset($sql);
+
+								$sql = "delete from v_dialplan_details ";
+								$sql .= "where domain_uuid = '$domain_uuid' ";
+								$sql .= "and dialplan_uuid = '$dialplan_uuid' ";
+								$db->query($sql);
+								unset($sql);
+						}
+
+						//if action is add or update
+							if ($action == 'add' || $action == 'update') {
+								require_once "resources/classes/dialplan.php";
+								$dialplan = new dialplan;
+								$dialplan->domain_uuid = $domain_uuid;
+								$dialplan->dialplan_uuid = $dialplan_uuid;
+								$dialplan->dialplan_detail_tag = 'condition'; //condition, action, antiaction
+								$dialplan->dialplan_detail_type = 'destination_number';
+								$dialplan->dialplan_detail_data = '^'.$row['hunt_group_extension'].'$';
+								//$dialplan->dialplan_detail_break = '';
+								//$dialplan->dialplan_detail_inline = '';
+								$dialplan->dialplan_detail_group = '1';
+								$dialplan->dialplan_detail_order = '010';
+								$dialplan->dialplan_detail_add();
+								unset($dialplan);
+
+								$dialplan = new dialplan;
+								$dialplan->domain_uuid = $domain_uuid;
+								$dialplan->dialplan_uuid = $dialplan_uuid;
+								$dialplan->dialplan_detail_tag = 'action'; //condition, action, antiaction
+								$dialplan->dialplan_detail_type = 'lua';
+								$dialplan->dialplan_detail_data = 'v_huntgroup_'.$_SESSION['domains'][$domain_uuid]['domain_name'].'_'.$row['hunt_group_extension'].'.lua';
+								//$dialplan->dialplan_detail_break = '';
+								//$dialplan->dialplan_detail_inline = '';
+								$dialplan->dialplan_detail_group = '1';
+								$dialplan->dialplan_detail_order = '020';
+								$dialplan->dialplan_detail_add();
+								unset($dialplan);
+
+								$dialplan = new dialplan;
+								$dialplan->domain_uuid = $domain_uuid;
+								$dialplan->dialplan_uuid = $dialplan_uuid;
+								$dialplan->dialplan_detail_tag = 'condition'; //condition, action, antiaction
+								$dialplan->dialplan_detail_type = 'destination_number';
+								$dialplan->dialplan_detail_data = '^\*'.$row['hunt_group_extension'].'$';
+								$dialplan->dialplan_detail_break = 'on-true';
+								//$dialplan->dialplan_detail_inline = '';
+								$dialplan->dialplan_detail_group = '2';
+								$dialplan->dialplan_detail_order = '020';
+								$dialplan->dialplan_detail_add();
+								unset($dialplan);
+
+								$dialplan = new dialplan;
+								$dialplan->domain_uuid = $domain_uuid;
+								$dialplan->dialplan_uuid = $dialplan_uuid;
+								$dialplan->dialplan_detail_tag = 'action'; //condition, action, antiaction
+								$dialplan->dialplan_detail_type = 'set';
+								$dialplan->dialplan_detail_data = 'fifo_music=$${hold_music}';
+								//$dialplan->dialplan_detail_break = '';
+								//$dialplan->dialplan_detail_inline = '';
+								$dialplan->dialplan_detail_group = '2';
+								$dialplan->dialplan_detail_order = '020';
+								$dialplan->dialplan_detail_add();
+								unset($dialplan);
+
+								$hunt_group_timeout_type = $row['hunt_group_timeout_type'];
+								$hunt_group_timeout_destination = $row['hunt_group_timeout_destination'];
+								if ($hunt_group_timeout_type == "voicemail") { $hunt_group_timeout_destination = '*99'.$hunt_group_timeout_destination; }
+								$dialplan = new dialplan;
+								$dialplan->domain_uuid = $domain_uuid;
+								$dialplan->dialplan_uuid = $dialplan_uuid;
+								$dialplan->dialplan_detail_tag = 'action'; //condition, action, antiaction
+								$dialplan->dialplan_detail_type = 'set';
+								$dialplan->dialplan_detail_data = 'fifo_orbit_exten='.$hunt_group_timeout_destination.':'.$row['hunt_group_timeout'];
+								//$dialplan->dialplan_detail_break = '';
+								//$dialplan->dialplan_detail_inline = '';
+								$dialplan->dialplan_detail_group = '2';
+								$dialplan->dialplan_detail_order = '030';
+								$dialplan->dialplan_detail_add();
+								unset($dialplan);
+
+								$dialplan = new dialplan;
+								$dialplan->domain_uuid = $domain_uuid;
+								$dialplan->dialplan_uuid = $dialplan_uuid;
+								$dialplan->dialplan_detail_tag = 'action'; //condition, action, antiaction
+								$dialplan->dialplan_detail_type = 'fifo';
+								$dialplan->dialplan_detail_data = $row['hunt_group_extension'].'@${domain_name} in';
+								//$dialplan->dialplan_detail_break = '';
+								//$dialplan->dialplan_detail_inline = '';
+								$dialplan->dialplan_detail_group = '2';
+								$dialplan->dialplan_detail_order = '040';
+								$dialplan->dialplan_detail_add();
+								unset($dialplan);
+							}
+
+					} //end if strlen hunt_group_uuid; add the Hunt Group to the dialplan
+
+				//get the list of destinations then build the Hunt Group Lua
+					$tmp = "\n";
+					$tmp .= "session:preAnswer();\n";
+					$tmp .= "extension = '".$row['hunt_group_extension']."';\n";
+					$tmp .= "result = '';\n";
+					$tmp .= "timeoutpin = 7500;\n";
+					$tmp .= "sip_profile = 'internal';\n";
+					$tmp .= "\n";
+
+					$tmp .=	"function extension_registered(domain_name, sip_profile, extension)\n";
+					$tmp .=	"	api = freeswitch.API();\n";
+					$tmp .=	"	result = api:execute(\"sofia_contact\", sip_profile..\"/\"..extension..\"@\"..domain_name);\n";
+					$tmp .=	"	if (result == \"error/user_not_registered\") then\n";
+					$tmp .=	"		return false;\n";
+					$tmp .=	"	else\n";
+					$tmp .=	"		return true;\n";
+					$tmp .=	"	end\n";
+					$tmp .=	"end\n";
+					$tmp .=	"\n";
+
+					$tmp .= "\n";
+					$tmp .= "sounds_dir = session:getVariable(\"sounds_dir\");\n";
+					$tmp .= "uuid = session:getVariable(\"uuid\");\n";
+					$tmp .= "dialed_extension = session:getVariable(\"dialed_extension\");\n";
+					$tmp .= "domain_name = session:getVariable(\"domain_name\");\n";
+					$tmp .= "caller_id_name = session:getVariable(\"caller_id_name\");\n";
+					$tmp .= "caller_id_number = session:getVariable(\"caller_id_number\");\n";
+					$tmp .= "outbound_caller_id_name = session:getVariable(\"outbound_caller_id_name\");\n";
+					$tmp .= "outbound_caller_id_number = session:getVariable(\"outbound_caller_id_number\");\n";
+					$tmp .= "\n";
+
+					$tmp .= "--set the sounds path for the language, dialect and voice\n";
+					$tmp .= "	default_language = session:getVariable(\"default_language\");\n";
+					$tmp .= "	default_dialect = session:getVariable(\"default_dialect\");\n";
+					$tmp .= "	default_voice = session:getVariable(\"default_voice\");\n";
+					$tmp .= "	if (not default_language) then default_language = 'en'; end\n";
+					$tmp .= "	if (not default_dialect) then default_dialect = 'us'; end\n";
+					$tmp .= "	if (not default_voice) then default_voice = 'callie'; end\n";
+					$tmp .= "\n";
+
+					//pin number requested from caller if provided
+						if (strlen($row['hunt_group_pin']) > 0) {
+							$tmp .= "pin = '".$row['hunt_group_pin']."';\n";
+							$tmp .= "digits = session:playAndGetDigits(".strlen($row['hunt_group_pin']).", ".strlen($row['hunt_group_pin']).", 3, 3000, \"#\", sounds_dir..\"/\"..default_language..\"/\"..default_dialect..\"/\"..default_voice..\"/custom/please_enter_the_pin_number.wav\", \"\", \"\\\\d+\");\n";
+							$tmp .= "\n";
+							$tmp .= "\n";
+							$tmp .= "if (digits == pin) then\n";
+							$tmp .= "	--continue\n";
+							$tmp .= "\n";
+						}
+
+					//caller announce requested from caller if provided
+						if ($row['hunt_group_caller_announce'] == "true" || $row['hunt_group_call_prompt'] == "true") {
+							if ($row['hunt_group_caller_announce'] == "true") {
+								$tmp .=	"function originate(domain_name, session, sipuri, extension, caller_id_name, caller_id_number, caller_announce) \n";
+							}
+							else {
+								$tmp .=	"function originate(domain_name, session, sipuri, extension, caller_id_name, caller_id_number) \n";
+							}
+							$tmp .=	"	--caller_id_name = caller_id_name.replace(\" \", \"..\");\n";
+							$tmp .=	"	caller_id_name = string.gsub(caller_id_name, \" \", \"..\");\n";
+							//$tmp .=	"	--session:execute(\"luarun\", \"huntgroup_originate.lua \"..domain_name..\" \"..uuid..\" \"..sipuri..\" \"..extension..\" \"..caller_id_name..\" \"..caller_id_number..\" \"..caller_announce);\n";
+							$tmp .=	"	api = freeswitch.API();\n";
+							if ($row['hunt_group_caller_announce'] == "true") {
+								$tmp .=	"	result = api:execute(\"luarun\", \"huntgroup_originate.lua \"..domain_name..\" \"..uuid..\" \"..sipuri..\" \"..extension..\" \"..caller_id_name..\" \"..caller_id_number..\" \"..caller_announce);\n";
+							}
+							else {
+								$tmp .=	"	result = api:execute(\"luarun\", \"huntgroup_originate.lua \"..domain_name..\" \"..uuid..\" \"..sipuri..\" \"..extension..\" \"..caller_id_name..\" \"..caller_id_number..\"\");\n";
+							}
+							$tmp .=	"end";
+							$tmp .=	"\n";
+
+							if ($row['hunt_group_caller_announce'] == "true") {
+								$tmp .=	"caller_announce = \"".$tmp_dir."/\"..extension..\"_\"..uuid..\".wav\";\n";
+								$tmp .=	"session:streamFile(sounds_dir..\"/\"..default_language..\"/\"..default_dialect..\"/\"..default_voice..\"/custom/please_say_your_name_and_reason_for_calling.wav\");\n";
+								$tmp .=	"session:execute(\"gentones\", \"%(1000, 0, 640)\");\n";
+								$tmp .=	"session:execute(\"set\", \"playback_terminators=#\");\n";
+								$tmp .=	"session:execute(\"record\", caller_announce..\" 180 200\");\n";
+							}
+							$tmp .=	"\n";
+							$tmp .=	"session:setAutoHangup(false);\n";
+							$tmp .=	"session:execute(\"transfer\", \"*\"..extension..\" XML ".$_SESSION["context"]."\");\n";
+							$tmp .=	"\n";
+						}
+
+					//set caller id
+						if (strlen($row['hunt_group_cid_name_prefix'])> 0) {
+							$tmp .= "session:execute(\"set\", \"effective_caller_id_name=".$row['hunt_group_cid_name_prefix']."#\"..caller_id_name);\n";
+							$tmp .= "session:execute(\"set\", \"outbound_caller_id_name=".$row['hunt_group_cid_name_prefix']."#\"..caller_id_name);\n";
+						}
+
+					//set ring back
+						if (isset($row['hunt_group_ringback'])){
+							if ($row['hunt_group_ringback'] == "music"){
+								$tmp .= "session:execute(\"set\", \"ringback=\${hold_music}\");          --set to music\n";
+								$tmp .= "session:execute(\"set\", \"transfer_ringback=\${hold_music}\"); --set to music\n";
+							}
+							else {
+								$tmp .= "session:execute(\"set\", \"ringback=".$row['hunt_group_ringback']."\"); --set to ringtone\n";
+								$tmp .= "session:execute(\"set\", \"transfer_ringback=".$row['hunt_group_ringback']."\"); --set to ringtone\n";
+							}
+							if ($row['hunt_group_ringback'] == "ring"){
+								$tmp .= "session:execute(\"set\", \"ringback=\${us-ring}\"); --set to ringtone\n";
+								$tmp .= "session:execute(\"set\", \"transfer_ringback=\${us-ring}\"); --set to ringtone\n";
+							}
+						}
+						else {
+							$tmp .= "session:execute(\"set\", \"ringback=\${hold_music}\");          --set to ringtone\n";
+							$tmp .= "session:execute(\"set\", \"transfer_ringback=\${hold_music}\"); --set to ringtone\n";
+						}
+
+					if ($row['hunt_group_timeout'] > 0) {
+						//$tmp .= "session:setVariable(\"call_timeout\", \"".$row['hunt_group_timeout']."\");\n";
+						$tmp .= "session:setVariable(\"continue_on_fail\", \"true\");\n";
+					}
+					$tmp .= "session:setVariable(\"hangup_after_bridge\", \"true\");\n";
+					$tmp .= "\n";
+					$tmp .= "--freeswitch.consoleLog( \"info\", \"dialed extension:\"..dialed_extension..\"\\n\" );\n";
+					$tmp .= "--freeswitch.consoleLog( \"info\", \"domain: \"..domain..\"\\n\" );\n";
+					$tmp .= "--freeswitch.consoleLog( \"info\", \"us_ring: \"..us_ring..\"\\n\" );\n";
+					$tmp .= "--freeswitch.consoleLog( \"info\", \"domain_name: \"..domain_name..\"\\n\" );\n";
+					$tmp .= "\n";
+
+					$tmp .= "--freeswitch.consoleLog( \"info\", \"action call now don't wait for dtmf\\n\" );\n";
+					if ($row['hunt_group_caller_announce'] == "true" || $row['hunt_group_call_prompt'] == "true") {
+						//do nothing
+					}
+					else {
+						$tmp .= "if session:ready() then\n";
+						//$tmp .= "	session.answer();\n";
+					}
+					$tmp .= "\n";
+
+					$i = 0;
+					$sql = "select * from v_hunt_group_destinations ";
+					$sql .= "where hunt_group_uuid = '".$row['hunt_group_uuid']."' ";
+					$sql .= "and domain_uuid = '$domain_uuid' ";
+					//$sql .= "and destination_enabled = 'true' ";
+					$sql .= "order by destination_order asc ";
+					$prep_statement_2 = $db->prepare($sql);
+					$prep_statement_2->execute();
+					while($ent = $prep_statement_2->fetch(PDO::FETCH_ASSOC)) {
+						//$ent['hunt_group_uuid']
+						//$ent['destination_data']
+						//$ent['destination_type']
+						//$ent['destination_profile']
+						//$ent['destination_order']
+						//$ent['destination_enabled']
+						//$ent['destination_description']
+
+						$destination_timeout = $ent['destination_timeout'];
+						$hunt_group_cid_name_prefix = $row['hunt_group_cid_name_prefix'];
+						if (strlen($hunt_group_cid_name_prefix) > 0) {
+							$hunt_group_cid_name_prefix .= "#";
+						}
+						if (strlen($destination_timeout) == 0) {
+							if (strlen($row['hunt_group_timeout']) == 0) {
+								$destination_timeout = '30';
+							}
+							else {
+								$destination_timeout = $row['hunt_group_timeout'];
+							}
+						}
+
+						//set the default profile
+						if (strlen($ent['destination_data']) == 0) { $ent['destination_data'] = "internal"; }
+
+						if ($ent['destination_type'] == "extension") {
+							//$tmp .= "	sofia_contact_".$ent['destination_data']." = \"\${sofia_contact(".$ent['destination_profile']."/".$ent['destination_data']."@\"..domain_name..\")}\";\n";
+							$tmp_sub_array["application"] = "bridge";
+							$tmp_sub_array["type"] = "extension";
+							$tmp_sub_array["extension"] = $ent['destination_data'];
+
+							//$tmp_sub_array["data"] = "\"[leg_timeout=$destination_timeout]\"..sofia_contact_".$ent['destination_data'];
+							$tmp_sub_array["data"] = "\"[leg_timeout=$destination_timeout,origination_caller_id_name='".$hunt_group_cid_name_prefix."\"..caller_id_name..\"',origination_caller_id_number=\"..caller_id_number..\"]user/".$ent['destination_data']."@\"..domain_name";
+							$tmp_array[$i] = $tmp_sub_array;
+							unset($tmp_sub_array);
+						}
+						if ($ent['destination_type'] == "voicemail") {
+							$tmp_sub_array["application"] = "voicemail";
+							$tmp_sub_array["type"] = "voicemail";
+							$tmp .= "	session:answer();\n";
+							$tmp .= "	session:execute(\"transfer\", \"*99".$ent['destination_data']." XML ".$_SESSION["context"]." \");\n";
+							//$tmp_sub_array["application"] = "voicemail";
+							//$tmp_sub_array["data"] = "default \${domain_name} ".$ent['destination_data'];
+							//$tmp_array[$i] = $tmp_sub_array;
+							unset($tmp_sub_array);
+						}
+						if ($ent['destination_type'] == "sip uri") {
+							$tmp_sub_array["application"] = "bridge";
+							$tmp_sub_array["type"] = "sip uri";
+							//$destination_data = "{user=foo}loopback/".$ent['destination_data']."/default/XML";
+							$bridge_array = outbound_route_to_bridge ($domain_uuid, $ent['destination_data']);
+							$destination_data = $bridge_array[0];
+							$tmp_sub_array["application"] = "bridge";
+							$tmp_sub_array["data"] = "\"[leg_timeout=$destination_timeout,origination_caller_id_name='".$hunt_group_cid_name_prefix."\"..caller_id_name..\"',origination_caller_id_number=\"..caller_id_number..\"]".$destination_data."\"";
+							$tmp_array[$i] = $tmp_sub_array;
+							unset($tmp_sub_array);
+							unset($destination_data);
+						}
+						$i++;
+					} //end while
+					unset ($sql, $prep_statement_2);
+					unset($i, $ent);
+
+					$i = 0;
+					if(count($tmp_array) > 0) {
+						foreach ($tmp_array as $ent) {
+							$tmpdata = $ent["data"];
+							if ($ent["application"] == "voicemail") { $tmpdata = "*99".$tmpdata; }
+							if ($i < 1) {
+								$tmp_buffer = $tmpdata;
+							}
+							else {
+								$tmp_buffer .= "..\",\"..".$tmpdata;
+							}
+							$i++;
+						}
+					}
+					unset($i);
+					$tmp_application = $tmp_array[0]["application"];
+
+					if ($row['hunt_group_type'] == "simultaneous" || $row['hunt_group_type'] == "follow_me_simultaneous" || $row['hunt_group_type'] ==  "call_forward") {
+						$tmp_switch = "simultaneous";
+					}
+					if ($row['hunt_group_type'] == "sequence" || $row['hunt_group_type'] == "follow_me_sequence" || $row['hunt_group_type'] ==  "sequentially") {
+						$tmp_switch = "sequence";
+					}
+					switch ($tmp_switch) {
+					case "simultaneous":
+						if ($row['hunt_group_caller_announce'] == "true" || $row['hunt_group_call_prompt'] == "true") {
+							$i = 0;
+							if (count($tmp_array) > 0) {
+								foreach ($tmp_array as $tmp_row) {
+									$tmpdata = $tmp_row["data"];
+									if ($tmp_row["application"] == "voicemail") {
+										$tmpdata = "*99".$tmpdata;
+									}
+									else {
+										if ($tmp_row["type"] == "extension") {
+											$tmp .= "if (extension_registered(domain_name, sip_profile, '".$tmp_row["extension"]."')) then\n";
+											$tmp .= "	";
+										}
+										if ($row['hunt_group_caller_announce'] == "true") {
+											$tmp .= "result = originate (domain_name, session, ".$tmpdata.", extension, caller_id_name, caller_id_number, caller_announce);\n";
+										}
+										else {
+											$tmp .= "result = originate (domain_name, session, ".$tmpdata.", extension, caller_id_name, caller_id_number);\n";
+										}
+										if ($tmp_row["type"] == "extension") {
+											$tmp .= "end\n";
+										}
+									}
+								}
+							}
+						}
+						else {
+							$tmp .= "\n";
+							if (strlen($tmp_buffer) > 0) {
+								$tmp .= "	session:execute(\"".$tmp_application."\", $tmp_buffer);\n";
+							}
+						}
+						break;
+					case "sequence":
+						$tmp .= "\n";
+						$i = 0;
+						if (count($tmp_array) > 0) {
+							if ($row['hunt_group_caller_announce'] == "true" || $row['hunt_group_call_prompt'] == "true") {
+								$i = 0;
+								if (count($tmp_array) > 0) {
+									foreach ($tmp_array as $tmp_row) {
+										$tmpdata = $tmp_row["data"];
+										if ($tmp_row["application"] == "voicemail") {
+											$tmpdata = "*99".$tmpdata;
+										}
+										else {
+											if ($tmp_row["type"] == "extension") {
+												$tmp .= "if (extension_registered(domain_name, sip_profile, '".$tmp_row["extension"]."')) then\n";
+												$tmp .= "	";
+											}
+											if ($row['hunt_group_caller_announce'] == "true") {
+												$tmp .= "result = originate (domain_name, session, ".$tmpdata.", extension, caller_id_name, caller_id_number, caller_announce);\n";
+											}
+											else {
+												$tmp .= "result = originate (domain_name, session, ".$tmpdata.", extension, caller_id_name, caller_id_number);\n";
+											}
+											if ($tmp_row["type"] == "extension") {
+												$tmp .= "end\n";
+											}
+										}
+									}
+								}
+							}
+							else {
+								foreach ($tmp_array as $tmp_row) {
+									if (strlen($tmp_row["data"]) > 0) {
+										$tmp .= "	session:execute(\"".$tmp_application."\", ".$tmp_row["data"].");\n";
+									}
+								}
+							}
+							unset($tmp_row);
+						}
+						break;
+					}
+					unset($tmp_switch, $tmp_buffer, $tmp_array);
+
+					//set the timeout destination
+						$hunt_group_timeout_destination = $row['hunt_group_timeout_destination'];
+						if ($row['hunt_group_timeout_type'] == "extension") { $hunt_group_timeout_type = "transfer"; }
+						if ($row['hunt_group_timeout_type'] == "voicemail") { $hunt_group_timeout_type = "transfer"; $hunt_group_timeout_destination = "*99".$hunt_group_timeout_destination." XML ".$_SESSION["context"]; }
+						if ($row['hunt_group_timeout_type'] == "sip uri") { $hunt_group_timeout_type = "bridge"; }
+						$tmp .= "\n";
+						if ($row['hunt_group_caller_announce'] == "true" || $row['hunt_group_call_prompt'] == "true") {
+							//do nothing
+						}
+						else {
+							$tmp .= "	--timeout\n";
+							if ($row['hunt_group_type'] != 'dnd') {
+								$tmp .= "	originate_disposition = session:getVariable(\"originate_disposition\");\n";
+								$tmp .= "	if originate_disposition ~= \"SUCCESS\" then\n";
+							}
+							if ($row['hunt_group_timeout_type'] == "voicemail") {
+								$tmp .= "			session:answer();\n";
+							}
+							$tmp .= "			session:execute(\"".$hunt_group_timeout_type."\", \"".$hunt_group_timeout_destination."\");\n";
+							if ($row['hunt_group_type'] != 'dnd') {
+								$tmp .= "	end\n";
+							}
+						}
+
+						if ($row['hunt_group_caller_announce'] == "true" || $row['hunt_group_call_prompt'] == "true") {
+							//do nothing
+						}
+						else {
+							$tmp .= "end --end if session:ready\n";
+						}
+						$tmp .= "\n";
+						//pin number requested from caller if provided
+						if (strlen($row['hunt_group_pin']) > 0) {
+							$tmp .= "else \n";
+							$tmp .= "	session:streamFile(sounds_dir..\"/\"..default_language..\"/\"..default_dialect..\"/\"..default_voice..\"/custom/your_pin_number_is_incorect_goodbye.wav\");\n";
+							$tmp .= "	session:hangup();\n";
+							$tmp .= "end\n";
+							$tmp .= "\n";
+						}
+
+					//unset variables
+						$tmp .= "\n";
+						$tmp .= "--clear variables\n";
+						$tmp .= "dialed_extension = \"\";\n";
+						$tmp .= "new_extension = \"\";\n";
+						$tmp .= "domain_name = \"\";\n";
+						$tmp .= "\n";
+
+					//remove invalid characters from the file names
+						$huntgroup_extension = $row['hunt_group_extension'];
+						$huntgroup_extension = str_replace(" ", "_", $huntgroup_extension);
+						$huntgroup_extension = preg_replace("/[\*\:\\/\<\>\|\'\"\?]/", "", $huntgroup_extension);
+
+					//write the hungroup lua script
+						if (strlen($row['hunt_group_extension']) > 0) {
+							if ($row['hunt_group_enabled'] != "false") {
+								$hunt_group_filename = "v_huntgroup_".$_SESSION['domains'][$domain_uuid]['domain_name']."_".$huntgroup_extension.".lua";
+								//echo "location".$_SESSION['switch']['scripts']['dir']."/".$hunt_group_filename;
+								$fout = fopen($_SESSION['switch']['scripts']['dir']."/".$hunt_group_filename,"w");
+								fwrite($fout, $tmp);
+								unset($hunt_group_filename);
+								fclose($fout);
+							}
+						}
+		} //end while
+
+	//save the dialplan xml files
+		save_dialplan_xml();
+
+} //end huntgroup function lua
+
+?>