Author: silik0n Date: Wed Mar 18 04:38:18 2009 New Revision: 12654 Log: xml_curl of the directory is now working... this means you can manage the users from the UI see the README for installation instructions Added: freeswitch/trunk/scripts/contrib/swk/php/xml_curl/ freeswitch/trunk/scripts/contrib/swk/php/xml_curl/FSDirectory.php freeswitch/trunk/scripts/contrib/swk/php/xml_curl/directory.php Modified: freeswitch/trunk/scripts/contrib/swk/README Modified: freeswitch/trunk/scripts/contrib/swk/README ============================================================================== --- freeswitch/trunk/scripts/contrib/swk/README (original) +++ freeswitch/trunk/scripts/contrib/swk/README Wed Mar 18 04:38:18 2009 @@ -23,8 +23,30 @@ make the files in amf-test1/bin-debug available on your webserver and point a browser at it. +copy the php/xml_curl directory to your webserver + +make sure you have mod_xml_curl built and installed and enabled + uncomment it in the modules.conf in your source tree + uncomment it in your modules.conf.xml in the conf/autoload_configs/modules.conf.xml + + +edit the gateway_url param in conf/autoload_configs/xml_curl.conf.xml to enabale the directory binding +EXAMPLE: + <param name="gateway-url" value="http://localhost/xml_curl/directory.php" bindings="directory"/> + + +rename conf/directory/default.xml to conf/directory/default.xml.NOLOAD + this is no longer required as we are now loading the directory using xml_curl + + If you are developing in flex you need to load the swf from your development webserver so that it can properly locate the service. -Any questions, feel free to find me as SwK via IRC at #freeswitch on irc.freenode.net +Any questions, feel free to find me as SwK via IRC at #freeswitch on irc.freenode.net or krice AT freeswitch DOT org + +TODO: +Fix Groups and Group Editing +Fix Conference Controls +Rework PHP Class Files for both the amfphp service and the xml_curl there is no need to maintain these seperately as they share a fair ammount of code +anything else I can come up with Added: freeswitch/trunk/scripts/contrib/swk/php/xml_curl/FSDirectory.php ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/swk/php/xml_curl/FSDirectory.php Wed Mar 18 04:38:18 2009 @@ -0,0 +1,156 @@ +<?php + +/* + * FreeSWITCH AMF-PHP ESL Client Library + * Copyright (C) 2009, Ken Rice <krice@tollfreegateway.com> + * + * 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 FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * + * The Initial Developer of the Original Code is + * Ken Rice <krice@tollfreegateway.com> + * Portions created by the Initial Developer are Copyright (C) + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Ken Rice <krice@tollfreegateway.com> + * + * freeswitch.php -- Initial Class file for XML_CURL responses for Codename: SHIPMENT + * + *************************************************************************************************** + * + * This Requires the FreeSWITCH ESL Extension to be installed properly on your system. + * + */ + +// require_once "ESL.php"; + +class FSDirectory { + // var $esl; + + var $dbh; + + public function __construct(){ + $dbtype='mysql'; /* Set the Database type */ + // $db_hostname = 'localhost'; /* Database Server hostname */ + $db_hostname = '192.168.1.140'; /* Database Server hostname */ + $db_port = '3306'; /* Database Server Port */ + $db_username = 'root'; /* Database Server username */ + $db_password = 'password'; /* Database Server password */ + $db_database = 'shipment'; /* DataBase Name */ + if ($dbtype == 'mysql') { + $pdo_flags = array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,); + } + $this->dbh = new PDO("$dbtype:host=$db_hostname;port=$db_port;dbname=$db_database", $db_username, $db_password, $pdo_flags); + + } + + private function getESL() { + $esl_server = "127.0.0.1"; /* ESL Server */ + $esl_port = "8021"; /* ESL Port */ + $esl_secret = "ClueCon"; /* ESL Secret */ + $this->esl = new eslConnection($esl_server, $esl_port, $esl_secret); + } + + /* + public function getStatus() { + $e = $this->esl->sendRecv("api status"); + $body = $e->getBody(); + return $body; + } + */ + + /*** Directory Methods ***/ + + /* Directory Domain Methods */ + public function getDirDomains(){ + $query = sprintf("select * from domains"); + $stmt = $this->dbh->query($query); + $results = $stmt->fetchAll(); + return $results; + } + + public function getDirDomainbyName($domain_name){ + $query = sprintf("select * from domains where name = '%s'", $domain_name); + $stmt = $this->dbh->query($query); + $results = $stmt->fetchAll(); + return $results[0]; + } + + public function getDirDomain($domains_uid){ + $query = sprintf("select * from domain_params where domains_uid = $domains_uid"); + $stmt = $this->dbh->query($query); + $results['params'] = $stmt->fetchAll(); + $query = sprintf("select * from domain_variables where domains_uid = $domains_uid"); + $stmt = $this->dbh->query($query); + $results['variables'] = $stmt->fetchAll(); + return $results; + } + + /* Directory User Methods */ + public function getDirUser($user_uid){ + $query = sprintf("select * from user_params where users_uid = $user_uid"); + $stmt = $this->dbh->query($query); + $results['params'] = $stmt->fetchAll(); + $query = sprintf("select * from user_variables where users_uid = $user_uid"); + $stmt = $this->dbh->query($query); + $results['variables'] = $stmt->fetchAll(); + return $results; + } + + public function getDirUsers($domains_uid){ + $query = sprintf("select * from users where domains_uid = $domains_uid"); + $stmt = $this->dbh->query($query); + $results = $stmt->fetchAll(); + return $results; + } + + public function getDirUsersByDomainUidByUsername($domain_uid, $user_name){ + $query = sprintf("select * from users where domains_uid = '%s' and username = '%s'", $domain_uid, $user_name); + $stmt = $this->dbh->query($query); + $results = $stmt->fetchAll(); + return $results[0]; + } + + /* Directory Group Methods */ + public function getDirGroups($domains_uid){ + $query = sprintf("select * from groups where domains_uid = $domains_uid"); + $stmt = $this->dbh->query($query); + $results = $stmt->fetchAll(); + return $results; + } + + public function getDirGroup($groups_uid){ + $query = sprintf("select a.uid as groupMemberUid, a.users_uid as usersUid, b.username as usersUsername from group_members as a, users as b where a.groups_uid = $groups_uid and a.users_uid = b.uid") ; + $stmt = $this->dbh->query($query); + $results['members'] = $stmt->fetchAll(); + $query = sprintf("select uid as usersUid, username as usersUsername from users where uid not in (select users_uid from group_members where groups_uid = $groups_uid) and domains_uid = (select domains_uid from groups where uid = $groups_uid)"); + $stmt = $this->dbh->query($query); + $results['nonmembers'] = $stmt->fetchAll(); + return $results; + } + +} +/* For Emacs: + * Local Variables: + * mode:c + * indent-tabs-mode:t + * tab-width:4 + * c-basic-offset:4 + * End: + * For VIM: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + */ +?> Added: freeswitch/trunk/scripts/contrib/swk/php/xml_curl/directory.php ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/swk/php/xml_curl/directory.php Wed Mar 18 04:38:18 2009 @@ -0,0 +1,73 @@ +<? + +require_once "FSDirectory.php"; + + +header ("content-type: text/xml"); + +foreach ($_REQUEST as $key => $value) { + $$key = $value; +} + +$fsd = new FSDirectory(); + +/* Uncomment and edit for debugging */ +/* +$section = "directory"; +$tag_name= "domain"; +$key_name ="name"; +$key_value="192.168.1.140"; +$user="1000"; +*/ +if ($section == "directory" && $tag_name == "domain" && $key_name == "name") { + $db_domain = $fsd->getDirDomainbyName($key_value); +} else { + printf("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"freeswitch/xml\">\n<section name=\"result\">\n". + "<result status=\"not found\" />\n</section>\n</document>"); + die(); +} + +$db_user = $fsd->getDirUsersByDomainUidByUsername($db_domain['uid'], $user); + +$db_user_settings = $fsd->getDirUser($db_user['uid']); + +$db_groups = $fsd->getDirGroups($db_domain['uid']); + +printf(" <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"); +printf(" <document type=\"freeswitch/xml\">\n"); +printf(" <section name=\"directory\" description=\"Codename: Shipment Directory\">\n"); +printf(" <domain name=\"%s\">\n", $db_domain['name']); +printf(" <groups>\n"); +printf(" <group name=\"default\">\n"); +printf(" <users>\n"); +printf(" <user id=\"%s\" mailbox=\"%s\">\n", $db_user['username'], $db_user['mailbox']); +printf(" <params>\n"); +foreach($db_user_settings['params'] as $db_params) { + printf(" <param name=\"%s\" value=\"%s\"/>\n", $db_params['name'], $db_params['value']); +} +printf(" </params>\n"); +printf(" <variables>\n"); +foreach($db_user_settings['variables'] as $db_variables) { + printf(" <variable name=\"%s\" value=\"%s\"/>\n", $db_variables['name'], $db_variables['value']); +} +printf(" </variables>\n"); +printf(" </user>\n"); +printf(" </users>\n"); +printf(" </group>\n"); +/* This is Broken need to talk to someone about this part... maybe I should load this at boot time instead +foreach($db_groups as $db_group){ + $db_members = $fsd->getDirGroup($db_group['uid']); + printf(" <group name=\"%s\">\n", $db_group['name']); + printf(" <users>\n"); + foreach($db_members['members'] as $db_member){ + printf(" <user id=\"%s\" type=\"pointer\"/>\n", $db_member['usersUsername']); + } + printf(" </users>\n"); + printf(" </group>\n"); +} +*/ +printf(" </groups>\n"); +printf(" </domain>\n"); +printf(" </section>\n"); +printf(" </document>\n"); +?>