[commit] r12039 - in freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl: . libs
Author: mphill Date: Sun Feb 15 21:40:38 2009 New Revision: 12039 Log: New dialplan importer uses new schema. Now uses PDO instead of MDB2. fs_dialpan.php now uses the new schema. Modified: freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/dialplan_importer.php freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/fs_dialplan.php freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/global_defines.php freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/libs/fs_pdo.php Modified: freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/dialplan_importer.php ============================================================================== --- freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/dialplan_importer.php (original) +++ freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/dialplan_importer.php Sun Feb 15 21:40:38 2009 @@ -8,9 +8,12 @@ */ /** - * include MDB2 PEAR Extension + * Switched to simple xml, pdo and new schemea. Added several new supporint functions + * @author Michael Phillips */ -require_once('MDB2.php'); + +require_once('libs/fs_pdo.php'); + /** * require global definitions for FS_CURL */ @@ -23,10 +26,11 @@ */ function upload_form() { echo '<html>'; - echo '<h1>Select A File To Import</h1>'; + echo '<h2>Select A File To Import</h2>'; echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '" enctype="multipart/form-data">'; echo '<input type="file" name="file">'; echo '<input type="submit" name="confirmed">'; + echo '<p><input type="checkbox" name="clear_dialplan" value="true"> Clear all dialplan data before insert?</p>'; echo '</form>'; echo '</html>'; } @@ -41,7 +45,7 @@ function run_query($db, $query) { syslog(LOG_INFO, $query); $affected = $db -> exec($query); - if (MDB2::isError($affected)) { + if (FS_PDO::isError($affected)) { if (!defined('UNSUCCESSFUL_QUERY')) { define('UNSUCCESSFUL_QUERY', true); } @@ -95,52 +99,109 @@ // no need to do anything till we check that the file's ok if (check_uploaded_file($_FILES['file'])) { $xml_file = $_FILES['file']['tmp_name']; - move_uploaded_file($tmp_file, $xml_file); + //move_uploaded_file($tmp_file, $xml_file); + //is_uploaded_file + //echo filesize($xml_file); //echo $xml_file . "\n<br>"; - $xml_str = sprintf('%s', file_get_contents($xml_file)); - //echo $xml_str; + $xml_str = file_get_contents($xml_file); } -$db = MDB2::connect(DEFAULT_DSN); -if (MDB2::isError($db)) { - echo $db -> getMessage() . "\n"; -} - -$xml_obj = new SimpleXMLElement($xml_str); -foreach ($xml_obj -> context as $context) { - $cn = $context['name']; - $global_weight = 100; - foreach ($context -> extension as $extension) { - $en = $extension['name']; - //printf("<pre>%s</pre>", print_r($extension, true)); - $ec = $extension['continue']; - $global_weight+=100; - foreach ($extension -> condition as $condition) { - //print_r($condition); - $cf = $condition['field']; - $ce = addslashes($condition['expression']); - //echo "<pre>Condidtion Expression for $en:\n before: " . $condition['expression'] . "\n after: $ce</pre>"; - $cb = $condition['break']; - $weight = 0; - foreach ($condition as $type => $action) { - //echo "-------------------$type-----------------------------\n"; - $app_name = $action['application']; - $app_data = addslashes($action['data']); - $weight++; - //echo "$cn\t$en\t$cf\t$ce\t$cc\t$app_name\t$app_data\t$ec\t$global_weight\t$weight\n"; - $query = sprintf('%s %s %s %s %s %s;', - "INSERT INTO dialplan SET", - "context='$cn', extension='$en', condition_field='$cf',", - "condition_expression='$ce', application_name='$app_name',", - "application_data='$app_data', weight='$weight', type='$type',", - "ext_continue='$ec', global_weight='$global_weight',", - "cond_break='$cb'" - ); - run_query($db, $query); - } - } - } + +try { + $db = new FS_PDO(DEFAULT_DSN,DEFAULT_DSN_LOGIN, DEFAULT_DSN_PASSWORD); +} catch(Exception $e) { + die($e->getMessage()); +} + +if($_POST['clear_dialplan']) { + truncate_dialplan(); +} + +echo "<pre>"; +$xml = simplexml_load_string($xml_str); +$num_of_conext = sizeof($xml->context); + + +$dialplan_id = insert_dialplan(); +foreach($xml->children() as $context => $context_children) { + //echo $context . " => " . $context_children->attributes()->name . "\n"; + $context_id = insert_dialplan_context($dialplan_id, $context_children->attributes()->name); + + foreach($context_children as $extension => $extension_children) { + //echo "\t" . $extension . " => name: " . $extension_children->attributes()->name . " continue: " . $extension_children->attributes()->continue . "\n" ; + if($extension == 'extension') { //verify again bad input + $extension_id = insert_dialplan_extension($context_id, $extension_children->attributes()->name, $extension_children->attributes()->continue); + } + foreach($extension_children as $condition => $condition_children) { + //echo "\t\t" . $condition . " => " . $condition_children->attributes()->field . ", expression; " .$condition_children->attributes()->expression . "\n"; + $condition_id = insert_dialplan_condition($extension_id, $condition_children->attributes()->field, $condition_children->attributes()->expression); + foreach($condition_children as $action => $action_childress) { + //echo "\t\t\t" . $action . " => " . $action_childress->attributes()->application . ", expression; " .$action_childress->attributes()->data . "\n"; + if($action == ('action' || 'anti-action')) { //verify again bad input + insert_dialplan_actions($condition_id, $action_childress->attributes()->application , $action_childress->attributes()->data, $action); + } else { + echo "bad xml $action"; + }// end if + } //end foreach + } //end foreach + }// end foreach +} // end foreach + +echo "</pre>"; + +function insert_dialplan($domain = 'freeswitch' , $ip_address = '127.0.0.1') { + global $db; + $sql = sprintf("INSERT INTO dialplan (`domain`, `ip_address`) VALUES ('%s', '%s')", $domain, $ip_address); + $db->query($sql); + return $db->lastInsertId() ; +} + +function insert_dialplan_context($dialplan_id, $context) { + global $db; + $sql = sprintf("INSERT INTO dialplan_context (`dialplan_id`, `context`, `weight`) VALUES (%d, '%s', %d)", $dialplan_id, $context, get_next_weight('context')); + $db->query($sql); + return $db->lastInsertId() ; +} + +function insert_dialplan_extension($context_id, $name, $continue) { + global $db; + $sql = sprintf("INSERT INTO dialplan_extension (`context_id`, `name`, `continue`, `weight`) VALUES (%d, '%s', '%s', %d)", $context_id, $name, $continue, get_next_weight('extension')); + get_next_weight('extension'); + $db->query($sql); + return $db->lastInsertId() ; +} + +function insert_dialplan_condition($extension_id, $field, $expression) { + global $db; + $sql = sprintf("INSERT INTO dialplan_condition (`extension_id`, `field`, `expression`, `weight`) VALUES (%d, '%s', '%s', %d)", $extension_id, addslashes($field), addslashes($expression),get_next_weight('condition') ); + //echo $sql . "\n"; + $db->query($sql); + return $db->lastInsertId() ; +} + +function insert_dialplan_actions($condition_id, $application , $data, $type) { + global $db; + $sql = sprintf("INSERT INTO dialplan_actions(`condition_id`, `application`, `data`, `type`, `weight`) VALUES (%d, '%s', '%s', '%s', %d)", $condition_id, addslashes($application), addslashes($data), $type, get_next_weight('actions')); + $db->query($sql); + return $db->lastInsertId() ; +} + +function get_next_weight($table) { //used for weighting system + global $db; + $sql = sprintf("SELECT MAX(weight) as max FROM dialplan_%s", $table); + $res = $db->queryAll($sql); + return ($res[0]['max'] + 10); +} + +function truncate_dialplan() { + global $db; + $db->query('TRUNCATE dialplan_extension'); + $db->query('TRUNCATE dialplan'); + $db->query('TRUNCATE dialplan_context'); + $db->query('TRUNCATE dialplan_condition'); + $db->query('TRUNCATE dialplan_actions'); } + if (defined(UNSUCCESSFUL_QUERY) && UNSUCCESSFUL_QUERY == true) { echo "<h2>Some Queries Were Not Successful</h2>"; } else { @@ -149,4 +210,4 @@ upload_form(); //printf("<pre>%s</pre>", print_r($xml_obj, true); - +?> \ No newline at end of file Modified: freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/fs_dialplan.php ============================================================================== --- freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/fs_dialplan.php (original) +++ freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/fs_dialplan.php Sun Feb 15 21:40:38 2009 @@ -83,10 +83,23 @@ */ private function get_dialplan($context) { $dp_array = array(); - $dpQuery = sprintf("%s %s;" - , "SELECT * FROM dialplan WHERE context='$context' ORDER BY" - , "global_weight, context, extension, weight" - ); + $dpQuery = sprintf("SELECT + `context`, + `name` as extension, + `application` as application_name, + `data` as application_data, + `field` as condition_field, + `expression` as condition_expression, + `continue` as ext_continue, + `type` + FROM dialplan + INNER JOIN dialplan_context USING(dialplan_id) + INNER JOIN dialplan_extension USING(context_id) + INNER JOIN dialplan_condition USING(extension_id) + INNER JOIN dialplan_actions USING(condition_id) + WHERE context = '%s' + ORDER BY dialplan_context.weight, dialplan_extension.weight, dialplan_condition.weight, dialplan_actions.weight", $context); + $res = $this -> db -> query($dpQuery); if (FS_PDO::isError($res)) { $this -> comment($this -> db -> getMessage()); @@ -99,11 +112,11 @@ $ec = $row['ext_continue']; $app = $row['application_name']; $data = $row['application_data']; - $app_cdata = $row['app_cdata']; + //$app_cdata = $row['app_cdata']; $type = $row['type']; $cf = $row['condition_field']; $ce = $row['condition_expression']; - $rcd = $row['re_cdata']; + //$rcd = $row['re_cdata']; $cc = empty($row['cond_break']) ? '0' : $row['cond_break']; $dp_array[$ct]["$et;$ec"]["$cf;$ce;$cc;$rcd"][] = array( 'type'=>$type, Modified: freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/global_defines.php ============================================================================== --- freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/global_defines.php (original) +++ freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/global_defines.php Sun Feb 15 21:40:38 2009 @@ -17,11 +17,11 @@ /** * Defines the default dsn login for the PDO class */ -define('DEFAULT_DSN_LOGIN', 'freeswitch'); +define('DEFAULT_DSN_LOGIN', 'root'); /** * Defines the default dsn password for the PDOclass */ -define('DEFAULT_DSN_PASSWORD', 'fr33sw1tch'); +define('DEFAULT_DSN_PASSWORD', 'aasml2009'); /** * Generic return success */ @@ -74,4 +74,4 @@ //define('', ''); - +?> \ No newline at end of file Modified: freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/libs/fs_pdo.php ============================================================================== --- freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/libs/fs_pdo.php (original) +++ freeswitch/trunk/scripts/contrib/intralanman/PHP/fs_curl/libs/fs_pdo.php Sun Feb 15 21:40:38 2009 @@ -105,5 +105,5 @@ return $this->rowCount(); } -} -?> +} +?> \ No newline at end of file
participants (1)
-
FreeSWITCH SVN