Minor code restructuring taking the Horde lessons I've learned into account.
authorBen Klang <ben@alkaloid.net>
Thu, 26 Jan 2006 23:39:22 +0000 (23:39 +0000)
committerBen Klang <ben@alkaloid.net>
Thu, 26 Jan 2006 23:39:22 +0000 (23:39 +0000)
Will be branching the code soon so this can become the first "beta" release.

git-svn-id: https://svn.alkaloid.net/gpl/shout/trunk@266 06cd67b6-e706-0410-b29e-9de616bca6e9

20 files changed:
andrew.session
andrew.webprj
config/conf.xml
config/defines.php.dist [new file with mode: 0644]
dialplan.php
index.php
lib/Driver.php
lib/Driver/ldap.php
lib/Shout.php
lib/User.php
lib/api.php
lib/defines.php [deleted file]
main/dialplan.php [deleted file]
main/moh.php [deleted file]
main/users.php [deleted file]
moh.php [new file with mode: 0644]
security.php
templates/common-header.inc
templates/users/userlist.inc
usermgr.php

index a4a82b2..263f3d9 100644 (file)
       </profile>
       <profile remote_host="dev04.alkaloid.net" remote_port="22" remote_path="/srv/vhost/sites/shout.dev04.alkaloid.net/shout" remote_protocol="sftp" user="bklang" name="Shout Dev" >
         <uploadeditem upload_time="0" url="config/" />
-        <uploadeditem upload_time="1134254292" url="config/conf.xml" />
-        <uploadeditem upload_time="1134254292" url="dialplan.php" />
+        <uploadeditem upload_time="1138313705" url="config/conf.xml" />
+        <uploadeditem upload_time="1138316043" url="config/defines.php.dist" />
+        <uploadeditem upload_time="1138315048" url="dialplan.php" />
         <uploadeditem upload_time="0" url="dialplan/" />
-        <uploadeditem upload_time="1134254291" url="dialplan/edit.php" />
-        <uploadeditem upload_time="1134254292" url="index.php" />
+        <uploadeditem upload_time="1134075506" url="dialplan/edit.php" />
+        <uploadeditem upload_time="1138315961" url="index.php" />
         <uploadeditem upload_time="0" url="lib/" />
-        <uploadeditem upload_time="1134254292" url="lib/Dialplan.php" />
-        <uploadeditem upload_time="1134254292" url="lib/Driver.php" />
+        <uploadeditem upload_time="1134075506" url="lib/Dialplan.php" />
+        <uploadeditem upload_time="1138316130" url="lib/Driver.php" />
         <uploadeditem upload_time="0" url="lib/Driver/" />
-        <uploadeditem upload_time="1134254292" url="lib/Driver/ldap.php" />
-        <uploadeditem upload_time="1134254292" url="lib/Shout.php" />
-        <uploadeditem upload_time="1134254292" url="lib/System.php" />
-        <uploadeditem upload_time="1134326322" url="lib/User.php" />
-        <uploadeditem upload_time="1134254292" url="lib/api.php" />
-        <uploadeditem upload_time="1134254292" url="lib/base.php" />
-        <uploadeditem upload_time="1134254292" url="lib/defines.php" />
+        <uploadeditem upload_time="1138318043" url="lib/Driver/ldap.php" />
+        <uploadeditem upload_time="1138316386" url="lib/Shout.php" />
+        <uploadeditem upload_time="1134075507" url="lib/System.php" />
+        <uploadeditem upload_time="1134350019" url="lib/User.php" />
+        <uploadeditem upload_time="1138317614" url="lib/api.php" />
+        <uploadeditem upload_time="1134367769" url="lib/base.php" />
+        <uploadeditem upload_time="1134075507" url="lib/defines.php" />
+        <uploadeditem upload_time="1137381911" url="lib/version.php" />
         <uploadeditem upload_time="0" url="main/" />
         <uploadeditem upload_time="1134254292" url="main/dialplan.php" />
         <uploadeditem upload_time="1134254291" url="main/moh.php" />
-        <uploadeditem upload_time="1134254292" url="main/system.php" />
+        <uploadeditem upload_time="1134075507" url="main/system.php" />
         <uploadeditem upload_time="1134254291" url="main/users.php" />
-        <uploadeditem upload_time="1134254292" url="security.php" />
+        <uploadeditem upload_time="1138315048" url="moh.php" />
+        <uploadeditem upload_time="1138315048" url="security.php" />
         <uploadeditem upload_time="0" url="templates/" />
-        <uploadeditem upload_time="1134254292" url="templates/common-header.inc" />
-        <uploadeditem upload_time="1134254292" url="templates/content_page" />
+        <uploadeditem upload_time="1138311990" url="templates/common-header.inc" />
+        <uploadeditem upload_time="1134075418" url="templates/content_page" />
         <uploadeditem upload_time="0" url="templates/context/" />
-        <uploadeditem upload_time="1134254292" url="templates/context/contextline.inc" />
+        <uploadeditem upload_time="1134075418" url="templates/context/contextline.inc" />
         <uploadeditem upload_time="0" url="templates/dialplan/" />
         <uploadeditem upload_time="1131723538" url="templates/dialplan/contexttree.inc" />
-        <uploadeditem upload_time="1134254292" url="templates/dialplan/dialplanlist.inc" />
+        <uploadeditem upload_time="1134075418" url="templates/dialplan/dialplanlist.inc" />
         <uploadeditem upload_time="1131767776" url="templates/dialplan/extensiondetail.inc" />
-        <uploadeditem upload_time="1134254292" url="templates/dialplan/manager.inc" />
-        <uploadeditem upload_time="1134254292" url="templates/dialplan/priority-form-begin.inc" />
-        <uploadeditem upload_time="1134254292" url="templates/dialplan/priority-form-end.inc" />
-        <uploadeditem upload_time="1134254292" url="templates/dialplan/priority-form-line.inc" />
+        <uploadeditem upload_time="1134075418" url="templates/dialplan/manager.inc" />
+        <uploadeditem upload_time="1134075418" url="templates/dialplan/priority-form-begin.inc" />
+        <uploadeditem upload_time="1134075418" url="templates/dialplan/priority-form-end.inc" />
+        <uploadeditem upload_time="1134075418" url="templates/dialplan/priority-form-line.inc" />
         <uploadeditem upload_time="0" url="templates/javascript/" />
-        <uploadeditem upload_time="1134254292" url="templates/javascript/dialplan.js" />
-        <uploadeditem upload_time="1134254292" url="templates/menu.inc" />
-        <uploadeditem upload_time="1134254292" url="templates/table-limiter-begin.inc" />
-        <uploadeditem upload_time="1134254292" url="templates/table-limiter-end.inc" />
+        <uploadeditem upload_time="1134075507" url="templates/javascript/dialplan.js" />
+        <uploadeditem upload_time="1134075418" url="templates/menu.inc" />
+        <uploadeditem upload_time="1134075418" url="templates/table-limiter-begin.inc" />
+        <uploadeditem upload_time="1134075418" url="templates/table-limiter-end.inc" />
         <uploadeditem upload_time="0" url="templates/users/" />
-        <uploadeditem upload_time="1134254292" url="templates/users/userlist.inc" />
+        <uploadeditem upload_time="1138316597" url="templates/users/userlist.inc" />
         <uploadeditem upload_time="0" url="themes/" />
         <uploadeditem upload_time="0" url="themes/graphics/" />
-        <uploadeditem upload_time="1134254292" url="themes/graphics/add-extension.gif" />
-        <uploadeditem upload_time="1134254292" url="themes/graphics/add-user.gif" />
-        <uploadeditem upload_time="1134254292" url="themes/screen.css" />
+        <uploadeditem upload_time="1134075418" url="themes/graphics/add-extension.gif" />
+        <uploadeditem upload_time="1134075418" url="themes/graphics/add-user.gif" />
+        <uploadeditem upload_time="1134075418" url="themes/screen.css" />
+        <uploadeditem upload_time="1138318295" url="usermgr.php" />
+        <uploadeditem upload_time="0" url="usermgr/" />
+        <uploadeditem upload_time="1138317269" url="usermgr/delete.php" />
+        <uploadeditem upload_time="1138317269" url="usermgr/edit.php" />
+        <uploadeditem upload_time="1138317269" url="usermgr/list.php" />
+        <uploadeditem upload_time="1138317269" url="usermgr/save.php" />
         <uploadeditem upload_time="1134254292" url="users.php" />
         <uploadeditem upload_time="0" url="users/" />
-        <uploadeditem upload_time="1134254291" url="users/add.php" />
-        <uploadeditem upload_time="1134254291" url="users/delete.php" />
-        <uploadeditem upload_time="1134324213" url="users/edit.php" />
-        <uploadeditem upload_time="1134254291" url="users/save.php" />
+        <uploadeditem upload_time="1138311486" url="users/add.php" />
+        <uploadeditem upload_time="1138311477" url="users/delete.php" />
+        <uploadeditem upload_time="1138311467" url="users/edit.php" />
+        <uploadeditem upload_time="1138314968" url="users/list.php" />
+        <uploadeditem upload_time="1138311454" url="users/save.php" />
       </profile>
     </uploadprofiles>
     <treestatus>
+      <openfolder url="config" />
       <openfolder url="lib" />
       <openfolder url="lib/Driver" />
       <openfolder url="main" />
       <openfolder url="templates/javascript" />
       <openfolder url="templates/users" />
       <openfolder url="themes" />
+      <openfolder url="usermgr" />
       <openfolder url="users" />
     </treestatus>
   </session>
index fffd348..d31d03d 100644 (file)
@@ -4,51 +4,42 @@
     <upload/>
     <defaultDTD>-//w3c//dtd xhtml 1.0 strict//en</defaultDTD>
     <item url="config/" uploadstatus="1" />
-    <item modified_time="1134254292" url="config/conf.xml" uploadstatus="1" />
+    <item modified_time="1138313705" url="config/conf.xml" uploadstatus="1" />
     <item url="dialplan/" uploadstatus="1" />
-    <item modified_time="1134254291" url="dialplan/edit.php" uploadstatus="1" />
+    <item modified_time="1134075506" url="dialplan/edit.php" uploadstatus="1" />
     <item url="lib/" uploadstatus="1" />
     <item url="lib/Driver/" uploadstatus="1" />
-    <item modified_time="1134254292" url="lib/Driver/ldap.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="lib/base.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="lib/Dialplan.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="lib/Driver.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="lib/Shout.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="lib/System.php" uploadstatus="1" />
-    <item modified_time="1134326322" url="lib/User.php" uploadstatus="1" />
+    <item modified_time="1138318043" url="lib/Driver/ldap.php" uploadstatus="1" />
+    <item modified_time="1134367769" url="lib/base.php" uploadstatus="1" />
+    <item modified_time="1134075506" url="lib/Dialplan.php" uploadstatus="1" />
+    <item modified_time="1138316130" url="lib/Driver.php" uploadstatus="1" />
+    <item modified_time="1138316386" url="lib/Shout.php" uploadstatus="1" />
+    <item modified_time="1134075507" url="lib/System.php" uploadstatus="1" />
+    <item modified_time="1134350019" url="lib/User.php" uploadstatus="1" />
     <item url="main/" uploadstatus="1" />
-    <item modified_time="1134254292" url="main/dialplan.php" uploadstatus="1" />
-    <item modified_time="1134254291" url="main/moh.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="main/system.php" uploadstatus="1" />
-    <item modified_time="1134254291" url="main/users.php" uploadstatus="1" />
+    <item modified_time="1134075507" url="main/system.php" uploadstatus="1" />
     <item url="templates/" uploadstatus="1" />
     <item url="templates/context/" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/context/contextline.inc" uploadstatus="1" />
+    <item modified_time="1134075418" url="templates/context/contextline.inc" uploadstatus="1" />
     <item url="templates/dialplan/" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/dialplan/dialplanlist.inc" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/dialplan/priority-form-begin.inc" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/dialplan/priority-form-end.inc" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/dialplan/priority-form-line.inc" uploadstatus="1" />
+    <item modified_time="1134075418" url="templates/dialplan/dialplanlist.inc" uploadstatus="1" />
+    <item modified_time="1134075418" url="templates/dialplan/priority-form-begin.inc" uploadstatus="1" />
+    <item modified_time="1134075418" url="templates/dialplan/priority-form-end.inc" uploadstatus="1" />
+    <item modified_time="1134075418" url="templates/dialplan/priority-form-line.inc" uploadstatus="1" />
     <item url="templates/users/" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/users/userlist.inc" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/common-header.inc" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/content_page" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/menu.inc" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/table-limiter-begin.inc" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/table-limiter-end.inc" uploadstatus="1" />
+    <item modified_time="1138316597" url="templates/users/userlist.inc" uploadstatus="1" />
+    <item modified_time="1138311990" url="templates/common-header.inc" uploadstatus="1" />
+    <item modified_time="1134075418" url="templates/content_page" uploadstatus="1" />
+    <item modified_time="1134075418" url="templates/menu.inc" uploadstatus="1" />
+    <item modified_time="1134075418" url="templates/table-limiter-begin.inc" uploadstatus="1" />
+    <item modified_time="1134075418" url="templates/table-limiter-end.inc" uploadstatus="1" />
     <item url="themes/" uploadstatus="1" />
     <item url="themes/graphics/" uploadstatus="1" />
-    <item modified_time="1134254292" url="themes/graphics/add-extension.gif" uploadstatus="1" />
-    <item modified_time="1134254292" url="themes/graphics/add-user.gif" uploadstatus="1" />
-    <item modified_time="1134254292" url="themes/screen.css" uploadstatus="1" />
-    <item url="users/" uploadstatus="1" />
-    <item modified_time="1134254291" url="users/add.php" uploadstatus="1" />
-    <item modified_time="1134254291" url="users/delete.php" uploadstatus="1" />
-    <item modified_time="1134324213" url="users/edit.php" uploadstatus="1" />
-    <item modified_time="1134254291" url="users/save.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="dialplan.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="index.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="users.php" uploadstatus="1" />
+    <item modified_time="1134075418" url="themes/graphics/add-extension.gif" uploadstatus="1" />
+    <item modified_time="1134075418" url="themes/graphics/add-user.gif" uploadstatus="1" />
+    <item modified_time="1134075418" url="themes/screen.css" uploadstatus="1" />
+    <item modified_time="1138315048" url="dialplan.php" uploadstatus="1" />
+    <item modified_time="1138315961" url="index.php" uploadstatus="1" />
     <item url="" uploadstatus="1" />
     <uploadprofiles showtreeviews="true" defaultProfile="Shout" >
       <profile remote_host="" remote_port="" remote_path="" remote_protocol="ftp" user="" name="@" />
     </uploadprofiles>
     <templates>templates/</templates>
     <toolbars>toolbars/</toolbars>
-    <item modified_time="1134254292" url="lib/api.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="lib/defines.php" uploadstatus="1" />
-    <item modified_time="1134254292" url="security.php" uploadstatus="1" />
+    <item modified_time="1138317614" url="lib/api.php" uploadstatus="1" />
+    <item modified_time="1134075507" url="lib/defines.php" uploadstatus="1" />
+    <item modified_time="1138315048" url="security.php" uploadstatus="1" />
     <item url="templates/javascript/" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/javascript/dialplan.js" uploadstatus="1" />
-    <item modified_time="1134254292" url="templates/dialplan/manager.inc" uploadstatus="1" />
+    <item modified_time="1134075507" url="templates/javascript/dialplan.js" uploadstatus="1" />
+    <item modified_time="1134075418" url="templates/dialplan/manager.inc" uploadstatus="1" />
     <treestatus>
       <openfolder url="lib" />
       <openfolder url="lib/Driver" />
       <mailinglist address="" />
     </teamdata>
     <events/>
-    <item url="lib/version.php" />
+    <item modified_time="1137381911" url="lib/version.php" uploadstatus="1" />
+    <item modified_time="1138315048" url="moh.php" uploadstatus="1" />
+    <item modified_time="1138318295" url="usermgr.php" uploadstatus="1" />
+    <item modified_time="1138316043" url="config/defines.php.dist" />
+    <item url="usermgr/" />
+    <item modified_time="1138317269" url="usermgr/edit.php" />
+    <item modified_time="1138317269" url="usermgr/list.php" />
+    <item modified_time="1138317269" url="usermgr/save.php" />
+    <item modified_time="1138317269" url="usermgr/delete.php" />
   </project>
 </webproject>
index 2e0a503..b09984d 100644 (file)
@@ -2,13 +2,12 @@
 <!-- $Id$ -->
 <configuration>
 <!--   <configtab name="storage" desc="Storage Backend"> -->
-    <configsection name="auth">
+    <configsection name="storage">
       <configheader>Shout Storage</configheader>
-      <configlist name="admins" desc="Which users should be treated as
-        super-administrators (root, super-user) by Shout?"/>
+      <!-- <configlist name="admins" desc="Which users should be treated as
+        super-administrators (root, super-user) by Shout?"/> -->
       <configswitch name="driver" desc="What backend should we use for
-        authenticating users to Horde?">
-          
+        authenticating users to Horde?">ldap
         <case name="ldap" desc="LDAP authentication">
           <configsection name="params">
             <configstring name="hostspec" desc="The hostname of the LDAP
diff --git a/config/defines.php.dist b/config/defines.php.dist
new file mode 100644 (file)
index 0000000..12ca705
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Shout external API interface.
+ *
+ * $Id$
+ *
+ * This file defines Shout's constants.  Any file needing to use the
+ * driver or external API should require_once() this file.
+ *
+ * @package Shout
+ */
+# Branches
+@define('SHOUT_ASTERISK_BRANCH', "ou=Asterisk");
+@define('SHOUT_USERS_BRANCH', "ou=People");
+
+# Object Classes - Users
+@define('SHOUT_USER_OBJECTCLASS', "asteriskUser");
+
+# Object Classes - Contexts
+@define('SHOUT_CONTEXT_CUSTOMERS_OBJECTCLASS', 'vofficeCustomer');
+@define('SHOUT_CONTEXT_EXTENSIONS_OBJECTCLASS', 'asteriskExtensions');
+@define('SHOUT_CONTEXT_MOH_OBJECTCLASS', 'asteriskMusiconHold');
+@define('SHOUT_CONTEXT_CONFERENCE_OBJECTCLASS', 'asteriskMeetMe');
+@define('SHOUT_CONTEXT_VOICEMAIL_OBJECTCLASS', 'asteriskVoicemail');
+
+# Attributes - Dialplans
+@define('SHOUT_DIALPLAN_EXTENSIONLINE_ATTRIBUTE', 'asteriskExtensionLine');
+@define('SHOUT_DIALPLAN_INCLUDE_ATTRIBUTE', 'asteriskIncludeLine');
+@define('SHOUT_DIALPLAN_IGNOREPAT_ATTRIBUTE', 'asteriskIgnorePat');
+@define('SHOUT_DIALPLAN_BARELINE_ATTRIBUTE', 'asteriskExtensionBareLine');
+
+# Attributes - Accounts
+@define('SHOUT_ACCOUNT_ID_ATTRIBUTE', 'vofficeCustomerNumber');
+
+# Perms Fields
+@define('SHOUT_CONTEXT_ALL', 0xFFF);
+@define('SHOUT_CONTEXT_NONE', 0);
+@define('SHOUT_CONTEXT_CUSTOMERS', 1 << 0);
+@define('SHOUT_CONTEXT_EXTENSIONS', 1 << 1);
+@define('SHOUT_CONTEXT_MOH', 1 << 2);
+@define('SHOUT_CONTEXT_CONFERENCE', 1 << 3);
+@define('SHOUT_CONTEXT_VOICEMAIL', 1 << 4);
\ No newline at end of file
index fcaa443..89d0b21 100644 (file)
@@ -2,91 +2,61 @@
 /**
  * $Id$
  *
- * Copyright 2005 Ben Klang <ben@alkaloid.net>
+ * Copyright 2005-2006 Ben Klang <ben@alkaloid.net>
  *
  * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @package shout
  */
 
-@define('SHOUT_BASE', dirname(__FILE__));
-# FIXME Need a cleaner script prologue... probably all we need to do is check
-# for some kind of sane startup vars and otherwise redirect to '/'
-# This standard prologue should be consistent across every file that ends in .php
-$shout_configured = (@is_readable(SHOUT_BASE . '/config/conf.php'));# &&
-    #@is_readable(SHOUT_BASE . '/config/prefs.php'));
-if (!$shout_configured) {
-    require SHOUT_BASE . '/../lib/Test.php';
-    Horde_Test::configFilesMissing('Shout', SHOUT_BASE,
-    array('conf.php', 'prefs.php'));
+if (!isset($SHOUT_RUNNING) || !$SHOUT_RUNNING) {
+    header('Location: /');
+    exit();
 }
 
-require_once SHOUT_BASE . '/lib/base.php';
-require_once SHOUT_BASE . '/lib/Shout.php';
+require_once SHOUT_BASE . '/lib/Dialplan.php';
+$dialplan = &$shout->getDialplan($context);
 
-$context = Util::getFormData("context");
-$section = "dialplan";
-$action = Util::getFormData("action");
-if ($button = Util::getFormData("submitbutton")) {
-    $action = $button;
-}
-$extension = Util::getFormData("extension");
+// Set up the tree.
+$dpgui = Shout_Dialplan::singleton('x', $dialplan);
 
-$contexts = &$shout->getContexts();
-$vars = &Variables::getDefaultVariables();
+$action = Util::getFormData("action");
 
-if (!isset($context)) {#FIXME || !Shout::checkContext()) {
-    $url = Horde::applicationUrl("index.php");
-    header("Location: $url");
-    exit(0);
+switch($action) {
+case "do":
+    echo "stuff\n";
+    break;
 }
 
-switch ($action) {
-    case "add":
-        $title = _("Add Extension");
-        # Treat adds just like an empty edit
-        unset($extension);
-        $action = 'edit';
-        break;
-    case "Add Priority":
-        $dialplan = &$shout->getDialplan($context);
-        #FIXME Handle added-but-not-yet-saved priorities
-        $dialplan['extensions'][$extension][] = '';
-        $action = 'edit';
-        break;
-    case "Add 5 Priorities":
-        $dialplan = &$shout->getDialplan($context);
-        $dialplan['extensions'][$extension][] = '';
-        $dialplan['extensions'][$extension][] = '';
-        $dialplan['extensions'][$extension][] = '';
-        $dialplan['extensions'][$extension][] = '';
-        $dialplan['extensions'][$extension][] = '';
-        $action = 'edit';
-        break;
-    case "edit":
-        $title = _("Edit Extension") . "$extension";
-        break;
-    case "Save":
-    case "save":
-        $title = _("Save Extension") . "$extension";
-        break;
-    case "delete":
-        $title = _("Delete Extension") . "$extension";
-        break;
-    default:
-        $url = Horde::applicationUrl('/');
-        header("Location: $url");
-        exit();
-}
+$title = _("Dialplan Manager");
 
 require SHOUT_TEMPLATES . '/common-header.inc';
 require SHOUT_TEMPLATES . '/menu.inc';
 
-echo "<br />";
+$notification->notify();
 
-$tabs = &Shout::getTabs($context, $vars);
-$tabs->preserve('context', $context);
 echo $tabs->render($section);
 
 require SHOUT_BASE . "/dialplan/$action.php";
 
+require SHOUT_TEMPLATES . '/dialplan/manager.inc';
+
+// Horde::addScriptFile('httpclient.js', 'horde', true);
+// Horde::addScriptFile('hideable.js', 'horde', true);
+// require HORDE_TEMPLATES . '/common-header.inc';
+// require HORDE_TEMPLATES . '/portal/sidebar.inc';
+
+
+// require SHOUT_TEMPLATES . "/dialplan/dialplanlist.inc";
+
+
+
+
+
+
+
+
+
+
 require $registry->get('templates', 'horde') . '/common-footer.inc';
\ No newline at end of file
index dc69e5d..7daac18 100644 (file)
--- a/index.php
+++ b/index.php
@@ -2,85 +2,69 @@
 /**
  * $Id$
  *
- * Copyright 2005 Ben Klang <ben@alkaloid.net>
+ * Copyright 2005-2006 Ben Klang <ben@alkaloid.net>
  *
  * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @package shout
  */
 
 @define('SHOUT_BASE', dirname(__FILE__));
-$shout_configured = (@is_readable(SHOUT_BASE . '/config/conf.php'));# &&
+$shout_configured = (@is_readable(SHOUT_BASE . '/config/conf.php') &&
+                     @is_readable(SHOUT_BASE . '/config/defines.php'));# &&
                      #@is_readable(SHOUT_BASE . '/config/prefs.php'));
 if (!$shout_configured) {
     require SHOUT_BASE . '/../lib/Test.php';
     Horde_Test::configFilesMissing('Shout', SHOUT_BASE,
-                                   array('conf.php', 'prefs.php'));
+                                   array('conf.php', 'defines.php'));
+                                   #, 'prefs.php'));
 }
 
 require_once SHOUT_BASE . '/lib/base.php';
 require_once SHOUT_BASE . '/lib/Shout.php';
 
+// Variable handling libraries
+require_once 'Horde/Variables.php';
+require_once 'Horde/Text/Filter.php';
+
 $context = Util::getFormData("context");
 $section = Util::getFormData("section");
 
 $contexts = &$shout->getContexts();
-$vars = &Variables::getDefaultVariables();
-#$ticket->setDetails($vars);
-
-if (count($contexts) == 1) {
+# Check that we are properly initialized
+if (is_a($contexts, 'PEAR_Error')) {
+    $notification->push($contexts, 'horde.error');
+    $contexts = false;
+} elseif (count($contexts) == 1) {
+    # Default to the user's only context
     $context = $contexts[0];
 } elseif (!$context) {
+    # Attempt to locate the user's "home" context
     $context = $shout->getHomeContext();
 }
 
+$vars = &Variables::getDefaultVariables();
 $tabs = &Shout::getTabs($context, $vars);
 $tabs->preserve('context', $context);
-if (!$section) {
-    $section = $tabs->_tabs[0]['tabname'];
-}
-
-#require_once SHOUT_TEMPLATES . '/comment.inc';
-#require_once 'Horde/Variables.php';
-#require_once 'Horde/Text/Filter.php';
-
-
 
-#$title = '[#' . $ticket->getId() . '] ' . $ticket->get('summary');
-require SHOUT_TEMPLATES . '/common-header.inc';
-require SHOUT_TEMPLATES . '/menu.inc';
-
-// if (!$section) {
-//     $section =
-print '<div style="width:95%;left:10px;position:relative">';
-echo $tabs->render($section);
 switch ($section) {
     case "conference":
-        $title = _('Conferences');
-        break;
     case "dialplan":
-        $title = _('Dial Plan');
-        break;
     case "security":
-        $title = _('Security/Access Control');
-        break;
-    case "system":
-        $title = _('System Settings');
-        break;
-    case "users":
-        $title = _('Users');
-        break;
+    case "usermgr":
     case "moh":
-        $title = _('Music on Hold');
         break;
-
     default:
-        require SHOUT_TEMPLATES . '/common-footer.inc';
-        require $registry->get('templates', 'horde') . '/common-footer.inc';
-        exit();
+        $section = $tabs->_tabs[0]['tabname'];
         break;
 }
+# We've passed the initialization tests.  This flag allows other pages to run.
+$SHOUT_RUNNING = true;
+
+require SHOUT_BASE . "/$section.php";
+
+#print '<div style="width:95%;left:10px;position:relative">';
 
-require "main/$section.php";
-print '</div>';
-require SHOUT_TEMPLATES . '/common-footer.inc';
+#print '</div>';
 require $registry->get('templates', 'horde') . '/common-footer.inc';
\ No newline at end of file
index dcc3e6e..0d86a22 100644 (file)
@@ -14,7 +14,6 @@
  * @since   Shout 0.1
  * @package Shout
  */
-require_once SHOUT_BASE . "/lib/defines.php";
 
 // {{{ Shout_Driver class
 class Shout_Driver {
index e42dd68..ba69261 100644 (file)
@@ -210,15 +210,87 @@ type");
             return $entries[$context];
         }
 
-        $registry = &Registry::singleton();
-        require_once $registry->applicationFilePath('%application%/lib/defines.php', 'congregation');
-        $users = $registry->callByPackage('congregation', 'getUsersByContext',
-            array($context, CONGREGATION_USER_PHONE));
+        $basedn = SHOUT_USERS_BRANCH.','.$this->_params['basedn'];
+
+        $filter  = '(&';
+        $filter .= '(objectClass='.SHOUT_USER_OBJECTCLASS.')';
+        $filter .= '(context='.$context.')';
+        $filter .= ')';
+
+        $attributes = array(
+            'voiceMailbox',
+            'asteriskUserDialOptions',
+            'asteriskVoiceMailboxOptions',
+            'voiceMailboxPin',
+            'cn',
+            'telephoneNumber',
+            'asteriskUserDialTimeout',
+            'mail',
+            'asteriskPager',
+        );
+
+        $search = @ldap_search($this->_LDAP, $basedn, $filter, $attributes);
 
-        foreach ($users as $user) {
-            $extension = $user['extension'];
-            $entries[$context][$extension] = $user;
+        if (!$search) {
+            return PEAR::raiseError("Unable to search directory: " .
+                ldap_error($this->_LDAP));
         }
+
+        $res = ldap_get_entries($this->_LDAP, $search);
+
+        #
+        # ATTRIBUTES RETURNED FROM ldap_get_entries ARE ALL LOWER CASE!!
+        #
+        $entries[$context] = array();
+        $i = 0;
+        while ($i < $res['count']) {
+            $extension = $res[$i]['voicemailbox'][0];
+            $entries[$context][$extension] = array();
+
+            $j = 0;
+            $entries[$context][$extension]['dialopts'] = array();
+            while ($j < @$res[$i]['asteriskuserdialoptions']['count']) {
+                $entries[$context][$extension]['dialopts'][] =
+                    $res[$i]['asteriskuserdialoptions'][$j];
+                $j++;
+            }
+
+            $j = 0;
+            $entries[$context][$extension]['mailboxopts'] = array();
+            while ($j < @$res[$i]['asteriskvoicemailboxoptions']['count']) {
+                $entries[$context][$extension]['mailboxopts'][] =
+                    $res[$i]['asteriskvoicemailboxoptions'][$j];
+                $j++;
+            }
+
+            $entries[$context][$extension]['mailboxpin'] =
+                $res[$i]['voicemailboxpin'][0];
+
+            @$entries[$context][$extension]['name'] =
+                $res[$i]['cn'][0];
+
+            $j = 0;
+            $entries[$context][$extension]['phonenumbers'] = array();
+            while ($j < @$res[$i]['telephonenumber']['count']) {
+                $entries[$context][$extension]['phonenumbers'][] =
+                    $res[$i]['telephonenumber'][$j];
+                $j++;
+            }
+
+            # FIXME Do some sanity checking here.  Also set a default?
+            @$entries[$context][$extension]['dialtimeout'] =
+                $res[$i]['asteriskuserdialtimeout'][0];
+
+            @$entries[$context][$extension]['email'] =
+                $res[$i]['mail'][0];
+
+            @$entries[$context][$extension]['pageremail'] =
+                $res[$i]['asteriskpager'][0];
+
+            $i++;
+
+        }
+
         ksort($entries[$context]);
 
         return($entries[$context]);
@@ -236,14 +308,20 @@ type");
         # FIXME Probably should key this off the domain part of the user's
         # FIXME Auth::getAuth() and match context with associatedDomain
         # FIXME Also, cache this lookup
-        $res = @ldap_search($this->_LDAP,
-            SHOUT_USERS_BRANCH.','.$this->_params['basedn'],
-            "(&(mail=".Auth::getAuth().")(objectClass=asteriskUser))",
-            array('context'));
+
+        $basedn = SHOUT_USERS_BRANCH.','.$this->_params['basedn'];
+        $filter  = '(&';
+        $filter .= '(mail='.Auth::getAuth().')';
+        $filter .= '(objectClass='.SHOUT_USER_OBJECTCLASS.')';
+        $filter .= ')';
+        $attributes = array('context');
+
+        $res = @ldap_search($this->_LDAP, $basedn, $filter, $attributes);
         if (!$res) {
             return PEAR::raiseError("Unable to locate any customers " .
             "underneath ".SHOUT_ASTERISK_BRANCH.",".$this->_params['basedn'] .
             " matching those search filters");
+            # FIXME Better error string above
         }
 
         $res = ldap_get_entries($this->_LDAP, $res);
@@ -251,6 +329,7 @@ type");
         # Assume the user only has one context.  The schema enforces this
         # FIXME: Handle cases where the managing user isn't a valid telephone
         # system user
+        # FIXME: Handle cases where no attribute is found?
         return $res[0]['context'][0];
     }
     // }}}
index aca3169..eac1793 100644 (file)
@@ -14,7 +14,7 @@
  * @since   Shout 0.1
  * @package Shout
  */
-require_once SHOUT_BASE . "/lib/defines.php";
+require_once SHOUT_BASE . "/config/defines.php";
 
 // {{{ Class Shout
 class Shout
@@ -109,9 +109,9 @@ class Shout
 
         if (Shout::checkRights("$permprefix:users", null, 1) &&
             $shout->checkContextType($context, "users")) {
-             $tabs->addTab(_("Users"),
+             $tabs->addTab(_("User Manager"),
                     Horde::applicationUrl("index.php?context=$context"),
-                    'users');
+                    'usermgr');
         }
 
         if (Shout::checkRights("$permprefix:dialplan", null, 1) &&
@@ -132,11 +132,6 @@ class Shout
                 Horde::applicationUrl('index.php'), 'moh');
         }
 
-        if (Auth::isAdmin("shout:system", PERMS_SHOW|PERMS_READ)) {
-            $tabs->addTab(_("System Settings"),
-                Horde::applicationUrl('index.php'), 'system');
-        }
-
         if (Auth::isAdmin("shout:superadmin", PERMS_SHOW|PERMS_READ)) {
             $tabs->addTab(_("Security"),
                 Horde::applicationUrl('index.php'), 'security');
index 1b5e08a..55d3f2e 100644 (file)
@@ -113,13 +113,13 @@ class UserDetailsForm extends Horde_Form {
             $vars->set('eca', false);
         }
 
-        if (in_array('__CALLPRESENT:${VOFFICENUM}', $userdetails['dialopts'])) {
+        if (in_array('e(${VOFFICENUM})', $userdetails['dialopts'])) {
             $vars->set('eca', true);
             $vars->set('callappearance', 'v-office');
-        } elseif (in_array('__CALLPRESENT:${CALLER}', $userdetails['dialopts'])) {
+        } elseif (in_array('e(${CALLER})', $userdetails['dialopts'])) {
             $vars->set('eca', true);
             $vars->set('callappearance', 'caller');
-        } elseif (in_array('__CALLPRESENT:${SELF}', $userdetails['dialopts'])) {
+        } elseif (in_array('e(${SELF})', $userdetails['dialopts'])) {
             $vars->set('eca', true);
             $vars->set('callappearance', 'self');
         }
index 1dd003e..cfba48b 100644 (file)
@@ -10,7 +10,6 @@
  * @package Shout
  */
 @define('SHOUT_BASE', dirname(__FILE__) . "/..");
-require_once SHOUT_BASE . "/lib/defines.php";
 
 $_services['perms'] = array(
     'args' => array(),
diff --git a/lib/defines.php b/lib/defines.php
deleted file mode 100644 (file)
index 12ca705..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/**
- * Shout external API interface.
- *
- * $Id$
- *
- * This file defines Shout's constants.  Any file needing to use the
- * driver or external API should require_once() this file.
- *
- * @package Shout
- */
-# Branches
-@define('SHOUT_ASTERISK_BRANCH', "ou=Asterisk");
-@define('SHOUT_USERS_BRANCH', "ou=People");
-
-# Object Classes - Users
-@define('SHOUT_USER_OBJECTCLASS', "asteriskUser");
-
-# Object Classes - Contexts
-@define('SHOUT_CONTEXT_CUSTOMERS_OBJECTCLASS', 'vofficeCustomer');
-@define('SHOUT_CONTEXT_EXTENSIONS_OBJECTCLASS', 'asteriskExtensions');
-@define('SHOUT_CONTEXT_MOH_OBJECTCLASS', 'asteriskMusiconHold');
-@define('SHOUT_CONTEXT_CONFERENCE_OBJECTCLASS', 'asteriskMeetMe');
-@define('SHOUT_CONTEXT_VOICEMAIL_OBJECTCLASS', 'asteriskVoicemail');
-
-# Attributes - Dialplans
-@define('SHOUT_DIALPLAN_EXTENSIONLINE_ATTRIBUTE', 'asteriskExtensionLine');
-@define('SHOUT_DIALPLAN_INCLUDE_ATTRIBUTE', 'asteriskIncludeLine');
-@define('SHOUT_DIALPLAN_IGNOREPAT_ATTRIBUTE', 'asteriskIgnorePat');
-@define('SHOUT_DIALPLAN_BARELINE_ATTRIBUTE', 'asteriskExtensionBareLine');
-
-# Attributes - Accounts
-@define('SHOUT_ACCOUNT_ID_ATTRIBUTE', 'vofficeCustomerNumber');
-
-# Perms Fields
-@define('SHOUT_CONTEXT_ALL', 0xFFF);
-@define('SHOUT_CONTEXT_NONE', 0);
-@define('SHOUT_CONTEXT_CUSTOMERS', 1 << 0);
-@define('SHOUT_CONTEXT_EXTENSIONS', 1 << 1);
-@define('SHOUT_CONTEXT_MOH', 1 << 2);
-@define('SHOUT_CONTEXT_CONFERENCE', 1 << 3);
-@define('SHOUT_CONTEXT_VOICEMAIL', 1 << 4);
\ No newline at end of file
diff --git a/main/dialplan.php b/main/dialplan.php
deleted file mode 100644 (file)
index 3798664..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * $Shout: shout/main/dialplan.php,v 1.0.0.1 2005/11/03 00:05:08 ben Exp $
- *
- * Copyright 2005 Ben Klang <ben@alkaloid.net>
- *
- * See the enclosed file COPYING for license information (GPL).  If you
- * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
- */
-
-if (!defined(SHOUT_BASE)) {
-    define(SHOUT_BASE, dirname(__FILE__));
-}
-
-require_once SHOUT_BASE . '/lib/Dialplan.php';
-
-$dialplan = &$shout->getDialplan($context);
-
-// Set up the tree.
-$dpgui = Shout_Dialplan::singleton('x', $dialplan);
-require SHOUT_TEMPLATES . '/dialplan/manager.inc';
-
-// Horde::addScriptFile('httpclient.js', 'horde', true);
-// Horde::addScriptFile('hideable.js', 'horde', true);
-// require HORDE_TEMPLATES . '/common-header.inc';
-// require HORDE_TEMPLATES . '/portal/sidebar.inc';
-
-
-// require SHOUT_TEMPLATES . "/dialplan/dialplanlist.inc";
\ No newline at end of file
diff --git a/main/moh.php b/main/moh.php
deleted file mode 100644 (file)
index 7d684e4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-if (!defined(SHOUT_BASE)) {
-    define(SHOUT_BASE, dirname(__FILE__));
-}
-
-# Check that we are properly initialized
-if (is_a($contexts, 'PEAR_Error')) {
-    # FIXME change this to a Horde::fatal
-    $notification->push(_("Internal error viewing requested page"),
-        'horde.error');
-    $notification->notify();
-    require $registry->get('templates', 'horde') . '/common-footer.inc';
-    exit();
-}
-
diff --git a/main/users.php b/main/users.php
deleted file mode 100644 (file)
index 266edc8..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-if (!defined(SHOUT_BASE)) {
-    define(SHOUT_BASE, dirname(__FILE__));
-}
-$users = &$shout->getUsers($context);
-ksort($users);
-require SHOUT_TEMPLATES . "/users/userlist.inc";
\ No newline at end of file
diff --git a/moh.php b/moh.php
new file mode 100644 (file)
index 0000000..3c89ebd
--- /dev/null
+++ b/moh.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * $Id$
+ *
+ * Copyright 2005-2006 Ben Klang <ben@alkaloid.net>
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @package shout
+ */
+if (!isset($SHOUT_RUNNING) || !$SHOUT_RUNNING) {
+    header('Location: /');
+    exit();
+}
+
+$title = _('Music on Hold');
+
+require SHOUT_TEMPLATES . '/common-header.inc';
+require SHOUT_TEMPLATES . '/menu.inc';
+
+$notification->notify();
+
+$tabs->render($section);
+
+require $registry->get('templates', 'horde') . '/common-footer.inc';
\ No newline at end of file
index 55d4793..11f3126 100644 (file)
@@ -2,22 +2,28 @@
 /**
  * $Id$
  *
- * Copyright 2005 Ben Klang <ben@alkaloid.net>
+ * Copyright 2005-2006 Ben Klang <ben@alkaloid.net>
  *
  * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @package shout
  */
 
-@define('SHOUT_BASE', dirname(__FILE__));
-$shout_configured = (@is_readable(SHOUT_BASE . '/config/conf.php'));# &&
-    #@is_readable(SHOUT_BASE . '/config/prefs.php'));
-if (!$shout_configured) {
-    require SHOUT_BASE . '/../lib/Test.php';
-    Horde_Test::configFilesMissing('Shout', SHOUT_BASE,
-    array('conf.php', 'prefs.php'));
+if (!isset($SHOUT_RUNNING) || !$SHOUT_RUNNING) {
+    header('Location: /');
+    exit();
 }
 
-require_once SHOUT_BASE . '/lib/base.php';
-require_once SHOUT_BASE . '/lib/Shout.php';
+$title = _('Security');
+
+require SHOUT_TEMPLATES . '/common-header.inc';
+require SHOUT_TEMPLATES . '/menu.inc';
+
+$notification->notify();
+
+$tabs->render($section);
+
+Shout::getApplist();
 
-Shout::getApplist();
\ No newline at end of file
+require $registry->get('templates', 'horde') . '/common-footer.inc';
\ No newline at end of file
index 58a1be4..35f14f6 100644 (file)
@@ -6,7 +6,7 @@
      ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
           "DTD/xhtml1-transitional.dtd">
-<!--          Shout: Copyright 2005, Ben Klang.           -->
+<!--          Shout: Copyright 2005-2006, Ben Klang.           -->
 <!-- Horde Project: http://horde.org/ | Shout: http://projects.alkaloid.net/ -->
 <!--          Horde Licenses: http://www.horde.org/licenses/           -->
 <?php echo !empty($language) ? '<html lang="' . strtr($language, '_', '-') .
index d260688..79881f5 100644 (file)
             foreach ($users as $extension => $user) {
                 $rowcolor = $line % 2;
                 $line++;
-                $url = Horde::applicationUrl("users.php");
-                $url = Util::addParameter($url, array('context' => $context,
-                                                    'extension' => $extension));
+                $url = Horde::applicationUrl("index.php");
+                $url = Util::addParameter($url,
+                    array(
+                        'context' => $context,
+                        'extension' => $extension,
+                        'section' => 'users',
+                    )
+                );
                 $editurl = Util::addParameter($url, "action=edit");
                 $deleteurl = Util::addParameter($url, "action=delete");
         ?>
index 47857eb..1af7ee5 100644 (file)
@@ -2,70 +2,56 @@
 /**
  * $Id$
  *
- * Copyright 2005 Ben Klang <ben@alkaloid.net>
+ * Copyright 2005-2006 Ben Klang <ben@alkaloid.net>
  *
  * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
  */
 
-@define('SHOUT_BASE', dirname(__FILE__));
-require_once SHOUT_BASE . '/lib/base.php';
-require_once SHOUT_BASE . '/lib/Shout.php';
+if (!isset($SHOUT_RUNNING) || !$SHOUT_RUNNING) {
+    header('Location: /');
+    exit();
+}
 
 // Form libraries.
 require_once 'Horde/Form.php';
 require_once 'Horde/Form/Renderer.php';
 
-// Variable handling libraries
-require_once 'Horde/Variables.php';
-require_once 'Horde/Text/Filter.php';
-
-
-$context = Util::getFormData("context");
-$section = "users";
 $action = Util::getFormData("action");
 $extension = Util::getFormData("extension");
 
-$contexts = &$shout->getContexts();
-$vars = &Variables::getDefaultVariables();
-
-if (!isset($context)) {#FIXME || !Shout::checkContext()) {
-    $url = Horde::applicationUrl("index.php");
-    header("Location: $url");
-    exit(0);
-}
-
-
+$title = _("User Manager: ");
 switch ($action) {
     case "add":
-        $title = _("Add User");
+        $title .= _("Add User");
         # Treat adds just like an empty edit
         unset($extension);
         break;
     case "edit":
-        $title = _("Edit User (Extension") . "$extension)";
+        $title .= _("Edit User (Extension") . "$extension)";
         break;
     case "save":
-        $title = _("Save User (Extension") . "$extension)";
+        $title .= _("Save User (Extension") . "$extension)";
         break;
     case "delete":
-        $title = _("Delete User (Extension") . "$extension)";
+        $title .= _("Delete User (Extension") . "$extension)";
         break;
+    case "list":
     default:
-        $url = Horde::applicationUrl('/');
-        header("Location: $url");
-        exit();
+        $title .= _("List Users");
+        $action = "list";
+        break;
 }
 
+
+
 require SHOUT_TEMPLATES . '/common-header.inc';
 require SHOUT_TEMPLATES . '/menu.inc';
 
 $notification->notify();
 
-$tabs = &Shout::getTabs($context, $vars);
-$tabs->preserve('context', $context);
 echo $tabs->render($section);
 
-require SHOUT_BASE . "/users/$action.php";
+require SHOUT_BASE . "/usermgr/$action.php";
 
 require $registry->get('templates', 'horde') . '/common-footer.inc';
\ No newline at end of file