<?php /* $Id$ */ /* v_public_includes_details_edit.php Copyright (C) 2008 Mark J Crane All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ require("guiconfig.inc"); require("/usr/local/pkg/v_config.inc"); $a_public_includes_details = &$config['installedpackages']['freeswitchpublicincludedetails']['config']; $id = $_GET['id']; if (isset($_POST['id'])) { $id = $_POST['id']; } $parentid = $_GET['parentid']; if (isset($_POST['parentid'])) { $parentid = $_POST['parentid']; } $publicincludeid = $_GET['publicincludeid']; if (isset($_POST['publicincludeid'])) { $publicincludeid = $_POST['publicincludeid']; } //publicincludeid //tag //condition //action //antiaction //param //fieldtype //fielddata //fieldorder //000-999 if (isset($id) && $a_public_includes_details[$id]) { $pconfig['publicincludeid'] = $a_public_includes_details[$id]['publicincludeid']; $pconfig['tag'] = $a_public_includes_details[$id]['tag']; $pconfig['fieldtype'] = $a_public_includes_details[$id]['fieldtype']; $pconfig['fielddata'] = $a_public_includes_details[$id]['fielddata']; $pconfig['fieldorder'] = $a_public_includes_details[$id]['fieldorder']; } //else { // if (isset($_GET['a'])) { // if ($_GET['a'] == "action"){ $pconfig['optionaction'] = "action"; } // if ($_GET['a'] == "antiaction"){ $pconfig['optionaction'] = "anti-action"; } // } //} if ($_POST) { unset($input_errors); $pconfig = $_POST; if (!$input_errors) { $ent = array(); $ent['publicincludeid'] = $_POST['publicincludeid']; $ent['tag'] = $_POST['tag']; $ent['fieldtype'] = $_POST['fieldtype']; $ent['fielddata'] = $_POST['fielddata']; $ent['fieldorder'] = $_POST['fieldorder']; if (isset($id) && $a_public_includes_details[$id]) { //update $a_public_includes_details[$id] = $ent; } else { //add $a_public_includes_details[] = $ent; } //touch($d_hostsdirty_path); write_config(); sync_package_v_public_includes(); header("Location: v_public_includes_edit.php?id=".$parentid); exit; } } include("head.inc"); ?> <body link="#0000CC" vlink="#0000CC" alink="#0000CC"> <?php include("fbegin.inc"); if ($v_label_show) { echo "<p class=\"pgtitle\">$v_label: Public: Details: Edit</p>\n"; } if ($input_errors) { print_input_errors($input_errors); } ?> <div id="mainlevel"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr><td class="tabnavtbl"> <?php build_menu(); ?> </td></tr> </table> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td class="tabcont" > <br /> <form action="v_public_includes_details_edit.php" method="post" name="iform" id="iform"> <table width="100%" border="0" cellpadding="6" cellspacing="0"> <tr> <td width="22%" valign="top" class="vncellreq">Tag</td> <td width="78%" class="vtable"> <script type="text/javascript"> function public_include_details_tag_onchange() { var tag = document.getElementById("form_tag").value; if (tag == "condition") { document.getElementById("label_fieldtype").innerHTML = "Field"; document.getElementById("label_fielddata").innerHTML = "Expression"; } else if (tag == "action") { document.getElementById("label_fieldtype").innerHTML = "Application"; document.getElementById("label_fielddata").innerHTML = "Data"; } else if (tag == "anti-action") { document.getElementById("label_fieldtype").innerHTML = "Application"; document.getElementById("label_fielddata").innerHTML = "Data"; } else if (tag == "param") { document.getElementById("label_fieldtype").innerHTML = "Name"; document.getElementById("label_fielddata").innerHTML = "Value"; } if (tag == "") { document.getElementById("label_fieldtype").innerHTML = "Type"; document.getElementById("label_fielddata").innerHTML = "Data"; } } </script> <?php echo " <select name='tag' class='formfld' id='form_tag' onchange='public_include_details_tag_onchange();'>\n"; echo " <option></option>\n"; switch (htmlspecialchars($pconfig['tag'])) { case "condition": echo " <option selected='yes'>condition</option>\n"; echo " <option>action</option>\n"; echo " <option>anti-action</option>\n"; //echo " <option>param</option>\n"; break; case "action": echo " <option>condition</option>\n"; echo " <option selected='yes'>action</option>\n"; echo " <option>anti-action</option>\n"; //echo " <option>param</option>\n"; break; case "anti-action": echo " <option>condition</option>\n"; echo " <option>action</option>\n"; echo " <option selected='yes'>anti-action</option>\n"; //echo " <option>param</option>\n"; break; case "param": echo " <option>condition</option>\n"; echo " <option>action</option>\n"; echo " <option>anti-action</option>\n"; //echo " <option selected='yes'>param</option>\n"; break; default: echo " <option>condition</option>\n"; echo " <option>action</option>\n"; echo " <option>anti-action</option>\n"; //echo " <option>param</option>\n"; } echo " </select>\n"; //condition //field expression //action //application //data //antiaction //application //data //param //name //value ?> </td> </tr> <tr> <td width="22%" valign="top" class="vncellreq" id="label_fieldtype">Type</td> <td width="78%" class="vtable"> <input name="fieldtype" type="text" class="formfld" id="fieldtype" size="40" value="<?=htmlspecialchars($pconfig['fieldtype']);?>"> </td> </tr> <tr> <td width="22%" valign="top" class="vncellreq" id="label_fielddata">Data</td> <td width="78%" class="vtable"> <input name="fielddata" type="text" class="formfld" id="fielddata" size="40" value="<?=htmlspecialchars($pconfig['fielddata']);?>"> <br> <span class="vexpl"></span></td> </tr> <tr> <td width="22%" valign="top" class="vncellreq" id="label_fieldtype">Order</td> <td width="78%" class="vtable"> <?php echo " <select name='fieldorder' class='formfld'>\n"; //echo " <option></option>\n"; if (strlen(htmlspecialchars($pconfig['fieldorder']))> 0) { echo " <option selected='yes' value='".htmlspecialchars($pconfig['fieldorder'])."'>".htmlspecialchars($pconfig['fieldorder'])."</option>\n"; } $i=0; while($i<=999) { if (strlen($i) == 1) { echo " <option value='00$i'>00$i</option>\n"; } if (strlen($i) == 2) { echo " <option value='0$i'>0$i</option>\n"; } if (strlen($i) == 3) { echo " <option value='$i'>$i</option>\n"; } $i++; } echo " </select>\n"; ?> </td> </tr> <tr> <td width="22%" valign="top"> </td> <td width="78%"> <input name="publicincludeid" type="hidden" value="<?=$publicincludeid;?>"> <input name="parentid" type="hidden" value="<?=$parentid;?>"> <?php if (isset($id) && $a_public_includes_details[$id]): ?> <input name="id" type="hidden" value="<?=$id;?>"> <?php endif; ?> <input name="Submit" type="submit" class="formbtn" value="Save"> <input class="formbtn" type="button" value="Cancel" onclick="history.back()"> </td> </tr> </table> </form> <br /> <br /> <b>Example</b> <br /> <br /> If the inbound call matches the DID 12085551234 then proceed to the action. <br /> <br /> <table cellpadding='3'> <tr><th class="vncellreq" width='75' align="left">Tag:</th><td class="vtable">condition</td></tr> <tr><th class="vncellreq" align="left">Type:</th><td class="vtable">destination_number</td></tr> <tr><th class="vncellreq" align="left">Data:</th><td class="vtable">^(12085551234)$</td></tr> </table> <br /> <br /> Transfer the inbound call to an auto attendant with extension of 5000. <br /> <br /> <table cellpadding='3'> <tr><th class="vncellreq" width='75' align="left">Tag:</th><td class="vtable">action</td></tr> <tr><th class="vncellreq" align="left">Application:</th><td class="vtable">transfer</td></tr> <tr><th class="vncellreq" align="left">Data:</th><td class="vtable">5000 XML default</td></tr> </table> <br /> <br /> Or transfer the inbound call to extension 1001. <br /> <br /> <table cellpadding='3'> <tr><th class="vncellreq" width='75' align="left">Tag:</th><td class="vtable">action</td></tr> <tr><th class="vncellreq" align="left">Application:</th><td class="vtable">transfer</td></tr> <tr><th class="vncellreq" align="left">Data:</th><td class="vtable">1001 XML default</td></tr> </table> <br /> <br /> Or bridge the inbound call a SIP URI. <br /> <br /> <table cellpadding='3'> <tr><th class="vncellreq" width='75' align="left">Tag:</th><td class="vtable">action</td></tr> <tr><th class="vncellreq" align="left">Application:</th><td class="vtable">bridge</td></tr> <tr><th class="vncellreq" align="left">Data:</th><td class="vtable">sofia/internal/*98@${domain}</td></tr> </table> <br /> <br /> <br /> <br /> <b>SIP URI examples:</b> <br /> <br /> voicemail: sofia/internal/*98@${domain}<br /> external number: sofia/gateway/gatewayname/12081231234<br /> auto attendant: sofia/internal/5002@${domain}<br /> user: /user/1001@${domain}<br /> <br /> <br /> <br /> <b>Conditions</b> <br /> <br /> Conditions are pattern matching tags that help FreeSwitch decide if the current call should be processed in this extension or not. When matching conditions against the current call you have several <b>fields</b> that you can compare against. <ul> <li><b>context</b></li> <li><b>rdnis</b> Redirected Number, the directory number to which the call was last presented.</li> <li><b>destination_number</b> Called Number, the number this call is trying to reach (within a given context)</li> <li><b>public</b> Name of the public module that are used, the name is provided by each public module. Example: XML</li> <li><b>caller_id_name</b> Name of the caller (provided by the User Agent that has called us).</li> <li><b>caller_id_number</b> Directory Number of the party who called (callee) -- can be masked (hidden)</li> <li><b>ani</b> Automatic Number Identification, the number of the calling party (callee) -- cannot be masked</li> <li><b>ani2</b> The type of device placing the call [1]</li> <li><b>uuid</b> Unique identifier of the current call? (looks like a GUID)</li> <li><b>source</b> Name of the FreeSwitch module that received the call (e.g. PortAudio)</li> <li><b>chan_name</b> Name of the current channel (Example: PortAudio/1234). Give us examples when this one can be used.</li> <li><b>network_addr</b> IP address of the signalling source for a VoIP call.</li> </ul> In addition to the above you can also do variables using the syntax ${variable} or api functions using the syntax %{api} {args} <br /> <br /> Variables may be used in either the field or the expression, as follows <br /> <br /> <br /> <br /> <b>Action and Anti-Actions</b> <br /> <br /> Actions are executed when the <b>condition matches</b>. Anti-Actions are executed when the <b>condition does NOT match</b>. <?php if ($v_path_show) { echo "Additional information on applications for Actions and Anti-Actions.<br />\n"; echo "<a href='http://wiki.freeswitch.org/wiki/Modules#Applications' target='_blank'>http://wiki.freeswitch.org/wiki/Modules#Applications</a>\n"; echo "<br />\n"; echo "<a href='http://wiki.freeswitch.org/wiki/public_Functions' target='_blank'>http://wiki.freeswitch.org/wiki/public_Functions</a>\n"; } ?> <br /> <br /> <br /> The following is a partial list of <b>applications</b>. <ul> <li><b>answer</b> answer the call</li> <li><b>bridge</b> bridge the call<li> <li><b>cond</b></li> <li><b>db</b> is a a runtime database either sqlite by default or odbc</li> <li><b>global_set</b> allows setting of global vars similar to the ones found in vars.xml</li> <li><b>group</b> allows grouping of several extensions for things like ring groups</li> <li><b>expr</b></li> <li><b>hangup</b> hangs up the call</li> <li><b>info</b> sends call info to the console</li> <li><b>javascript</b> run javascript .js files</li> <li><b>playback</b></li> <li><b>reject</b> reject the call</li> <li><b>respond</b></li> <li><b>ring_ready</b></li> <li><b>set</b> set a variable</li> <li><b>set_user</b></li> <li><b>sleep</b></li> <li><b>sofia_contact</b></li> <li><b>transfer</b> transfer the call to another extension or number<li> <li><b>voicemail</b> send the call to voicemail</li> </ul> <br /> <br /> <!-- <b>Param</b> Example parameters by name and value<br /> <?php if ($v_path_show) { echo "<a href='http://wiki.freeswitch.org/wiki/Special:Search?search=param&go=Go' target='_blank'>http://wiki.freeswitch.org/wiki/Special:Search?search=param&go=Go</a>\n"; } ?> <ul> <li><b>codec-ms</b> 20</li> <li><b>codec-prefs</b> PCMU@20i</li> <li><b>debug</b> 1</li> <li><b>public</b> XML</li> <li><b>dtmf-duration</b> 100</li> <li><b>rfc2833-pt</b>" 101</li> <li><b>sip-port</b> 5060</li> <li><b>use-rtp-timer</b> true</li> </ul> <br /> <br /> --> <br /> <br /> <br /> <br /> <br /> </td> </tr> </table> </div> <?php include("fend.inc"); ?> </body> </html>