Shout: create administrative PIN feature
authorBen Klang <ben@alkaloid.net>
Mon, 29 Mar 2010 17:16:06 +0000 (13:16 -0400)
committerBen Klang <ben@alkaloid.net>
Mon, 29 Mar 2010 20:48:40 +0000 (16:48 -0400)
16 files changed:
shout/admin.php
shout/lib/Application.php
shout/lib/Driver/Sql.php
shout/lib/Forms/AccountForm.php
shout/lib/Forms/ConferenceForm.php
shout/lib/Forms/DeviceForm.php
shout/lib/Forms/ExtensionForm.php
shout/lib/Forms/MenuForm.php
shout/lib/Shout.php
shout/templates/accounts/list.inc
shout/templates/conferences/list.inc
shout/templates/devices/list.inc
shout/templates/dialplan/edit.inc
shout/templates/extensions/list.inc
shout/templates/menu.inc
shout/templates/recordings/list.inc

index dde59bc..29002bd 100644 (file)
@@ -46,7 +46,7 @@ case 'edit':
     // Create a new add/edit form
     $account = Horde_Util::getFormData('extension');
     $accounts = $shout->storage->getAccounts();
-    $vars = new Horde_Variables(array('code' => $account, 'name' => $accounts[$account]));
+    $vars = new Horde_Variables(array('code' => $account, 'name' => $accounts[$account]['name']));
     $vars->set('action', $action);
 
     // Make sure we get the right template below.
index c94fb70..a623bf0 100644 (file)
@@ -138,9 +138,9 @@ class Shout_Application extends Horde_Registry_Application
         self::$_perms['title']['shout:accounts'] = _("Accounts");
 
         // Run through every contact source.
-        foreach ($accounts as $code => $account) {
+        foreach ($accounts as $code => $info) {
             self::$_perms['tree']['shout']['accounts'][$code] = false;
-            self::$_perms['title']['shout:accounts:' . $code] = $account;
+            self::$_perms['title']['shout:accounts:' . $code] = $info['name'];
 
             foreach(
                 array(
index 1166c27..05befc4 100644 (file)
@@ -48,7 +48,7 @@ class Shout_Driver_Sql extends Shout_Driver
     {
         $this->_connect();
 
-        $sql = 'SELECT name, code FROM accounts';
+        $sql = 'SELECT name, code, adminpin FROM accounts';
         $vars = array();
 
         $msg = 'SQL query in Shout_Driver_Sql#getAccounts(): ' . $sql;
@@ -65,7 +65,7 @@ class Shout_Driver_Sql extends Shout_Driver
 
         $accounts = array();
         while ($row && !($row instanceof PEAR_Error)) {
-            $accounts[$row['code']] = $row['name'];
+            $accounts[$row['code']] = $row;
             $row = $result->fetchRow(DB_FETCHMODE_ASSOC);
         }
 
@@ -73,24 +73,23 @@ class Shout_Driver_Sql extends Shout_Driver
          return $accounts;
     }
 
-    public function saveAccount($code, $name)
+    public function saveAccount($code, $name, $adminpin)
     {
         $this->_connect();
 
-        if (isset($details['oldname'])) {
-            if (!isset($menus[$details['oldname']])) {
-                throw new Shout_Exception(_("Old account not found.  Edit aborted."));
-            } else {
-                throw new Shout_Exception(_("Unsupported operation."));
-                $sql = 'UPDATE accounts SET code = ?, name =? WHERE code = ?';
-            }
-        } else {
-            $sql = 'INSERT INTO accounts (code, name) VALUES (?,?)';
-        }
-
-        $vars = array($code, $name);
-
-        $msg = 'SQL query in Shout_Driver_Sql#getAccounts(): ' . $sql;
+        // FIXME: Enable editing of account details
+//        if (isset($details['oldname'])) {
+//            if (!isset($menus[$details['oldname']])) {
+//                throw new Shout_Exception(_("Old account not found.  Edit aborted."));
+//            } else {
+//                throw new Shout_Exception(_("Unsupported operation."));
+//                $sql = 'UPDATE accounts SET code = ?, name = ?, adminpin = ? ' .
+//                       'WHERE code = ?';
+//            }
+//        } else {
+        $sql = 'INSERT INTO accounts (code, name, adminpin) VALUES (?,?,?)';
+        $vars = array($code, $name, $adminpin);
+        $msg = 'SQL query in Shout_Driver_Sql#saveAccount(): ' . $sql;
         Horde::logMessage($msg, 'DEBUG');
         $result = $this->_db->query($sql, $vars);
         if ($result instanceof PEAR_Error) {
index f2779c8..74ba7da 100644 (file)
@@ -31,7 +31,7 @@ class AccountDetailsForm extends Horde_Form {
             $formtitle = "Add Account";
         }
 
-        $accountname = $_SESSION['shout']['accounts'][$curaccount];
+        $accountname = $_SESSION['shout']['accounts'][$curaccount]['name'];
         $title = sprintf(_("$formtitle %s"), $accountname);
         parent::__construct($vars, $title);
 
@@ -39,6 +39,7 @@ class AccountDetailsForm extends Horde_Form {
         //$this->addHidden('', 'oldaccount', 'text', false);
         $this->addVariable(_("Account Name"), 'name', 'text', true);
         $this->addVariable(_("Account Code"), 'code', 'text', true);
+        $this->addVariable(_("Admin PIN"), 'adminpin', 'number', false);
 
         return true;
     }
@@ -52,8 +53,12 @@ class AccountDetailsForm extends Horde_Form {
 
         $code = $this->_vars->get('code');
         $name = $this->_vars->get('name');
+        $adminpin = $this->_vars->get('adminpin');
+        if (empty($adminpin)) {
+            $adminpin = rand(1000, 9999);
+        }
 
-        $shout->storage->saveAccount($code, $name);;
+        $shout->storage->saveAccount($code, $name, $adminpin);
     }
 
 }
@@ -66,7 +71,7 @@ class AccountDeleteForm extends Horde_Form
         $account = $vars->get('account');
 
         $title = _("Delete Extension %s - Account: %s");
-        $title = sprintf($title, $extension, $_SESSION['shout']['accounts'][$account]);
+        $title = sprintf($title, $extension, $_SESSION['shout']['accounts'][$account]['name']);
         parent::__construct($vars, $title);
 
         $this->addHidden('', 'account', 'text', true);
index 9e9eb2e..46d6b61 100644 (file)
@@ -26,7 +26,7 @@ class ConferenceDetailsForm extends Horde_Form {
 
         $curaccount = $_SESSION['shout']['curaccount'];
         $accountname = $vars->account;
-        $title = sprintf(_("$formtitle - Account: %s"), $accountname);
+        $title = sprintf(_("$formtitle"));
         parent::__construct($vars, $title);
 
         $this->addHidden('', 'action', 'text', true);
@@ -76,7 +76,7 @@ class ConferenceDeleteForm extends Horde_Form
         $account = $vars->get('account');
 
         $title = _("FIXME Delete Device %s - Account: %s");
-        $title = sprintf($title, $devid, $_SESSION['shout']['accounts'][$account]);
+        $title = sprintf($title, $devid, $_SESSION['shout']['accounts'][$account]['name']);
         parent::__construct($vars, $title);
 
         $this->addHidden('', 'account', 'text', true);
index b9d8cc6..7f4da65 100644 (file)
@@ -23,7 +23,7 @@ class DeviceDetailsForm extends Horde_Form {
         }
 
         $curaccount = $_SESSION['shout']['curaccount'];
-        $accountname = $_SESSION['shout']['accounts'][$curaccount];
+        $accountname = $_SESSION['shout']['accounts'][$curaccount]['name'];
         $title = sprintf(_("$formtitle - Account: %s"), $accountname);
         parent::__construct($vars, $title);
 
@@ -99,7 +99,7 @@ class DeviceDeleteForm extends Horde_Form
         $account = $vars->get('account');
 
         $title = _("Delete Device %s - Account: %s");
-        $title = sprintf($title, $devid, $_SESSION['shout']['accounts'][$account]);
+        $title = sprintf($title, $devid, $_SESSION['shout']['accounts'][$account]['name']);
         parent::__construct($vars, $title);
 
         $this->addHidden('', 'account', 'text', true);
index 632911f..ea110ec 100644 (file)
@@ -21,7 +21,7 @@ class ExtensionDetailsForm extends Horde_Form {
      */
     function __construct(&$vars)
     {
-        $account = $_SESSION['shout']['curaccount'];
+        $curaccount = $_SESSION['shout']['curaccount'];
         $action = $vars->get('action');
         if ($action == 'edit') {
             $formtitle = "Edit User";
@@ -29,7 +29,7 @@ class ExtensionDetailsForm extends Horde_Form {
             $formtitle = "Add User";
         }
 
-        $accountname = $_SESSION['shout']['accounts'][$curaccount];
+        $accountname = $_SESSION['shout']['accounts'][$curaccount]['name'];
         $title = sprintf(_("$formtitle - Account: %s"), $accountname);
         parent::__construct($vars, $title);
 
@@ -82,7 +82,7 @@ class ExtensionDeleteForm extends Horde_Form
         $account = $vars->get('account');
 
         $title = _("Delete Extension %s - Account: %s");
-        $title = sprintf($title, $extension, $_SESSION['shout']['accounts'][$account]);
+        $title = sprintf($title, $extension, $_SESSION['shout']['accounts'][$account]['name']);
         parent::__construct($vars, $title);
 
         $this->addHidden('', 'account', 'text', true);
index ba9eb1f..e962483 100644 (file)
@@ -23,7 +23,7 @@ class MenuForm extends Horde_Form {
         }
 
         $curaccount = $_SESSION['shout']['curaccount'];
-        $accountname = $_SESSION['shout']['accounts'][$curaccount];
+        $accountname = $_SESSION['shout']['accounts'][$curaccount]['name'];
         $title = sprintf(_("%s - Account: %s"), $formtitle, $accountname);
         parent::__construct($vars, $title);
 
@@ -71,7 +71,7 @@ class DeviceMenuForm extends Horde_Form
         $account = $vars->get('account');
 
         $title = _("Delete Menu %s - Account: %s");
-        $title = sprintf($title, $menu, $_SESSION['shout']['accounts'][$account]);
+        $title = sprintf($title, $menu, $_SESSION['shout']['accounts'][$account]['name']);
         parent::__construct($vars, $title);
 
         $this->setButtons(array(_("Delete"), _("Cancel")));
index 55fe351..9b2ee02 100644 (file)
@@ -207,6 +207,10 @@ class Shout
                 'description' => _("Restart menu"),
                 'args' => array()
             ),
+            'adminlogin' => array(
+                'description' => _("Login to Admin Functions"),
+                'args' => array()
+            ),
             'none' => array(
                 'description' => _("No action"),
                 'args' => array()
index cde395a..0a9047a 100644 (file)
@@ -1,42 +1,41 @@
 <div class="header">
-    Account: <?php echo $_SESSION['shout']['accounts'][$curaccount]; ?>
+    Account: <?php echo $_SESSION['shout']['accounts'][$curaccount]['name']; ?>
 </div>
 
 <div id="extensionList">
     <table width="100%" cellspacing="0" class="striped">
         <tr>
             <td class="uheader">Account Code</td>
-            <td id ="destinationsCol" class="uheader">Account Name</td>
-        </tr>
-        <?php
-            foreach ($accounts as $code => $name) {
-
-                $url = Horde::applicationUrl("admin.php");
-                $url = Horde_Util::addParameter($url,
-                    array(
-                        'account' => $code,
-                    )
-                );
-                $editurl = Horde_Util::addParameter($url, 'action', 'edit');
-                $deleteurl = Horde_Util::addParameter($url, 'action', 'delete');
-        ?>
-        <tr class="item" style="vertical-align: top">
-            <td>
-                <?php echo Horde::link($editurl); echo $code; ?></a>
-            </td>
-            <td>
-                <?php echo $name; ?>
-            </td>
+            <td class="uheader">Account Name</td>
+            <td class="uheader">Admin PIN</td>
         </tr>
         <?php
+            $url = Horde::applicationUrl("admin.php");
+            $editurl = Horde_Util::addParameter($url, 'action', 'edit');
+            $deleteurl = Horde_Util::addParameter($url, 'action', 'delete');
+            foreach ($accounts as $acctinfo) {
+                $code = $acctinfo['code'];
+                ?>
+                <tr class="item" style="vertical-align: top">
+                    <td>
+                        <?php echo Horde::link(Horde_Util::addParameter($editurl,
+                            array('account' => $code))); echo $code; echo '</a>'; ?>
+                    </td>
+                    <td>
+                        <?php echo $acctinfo['name']; ?>
+                    </td>
+                    <td>
+                        <?php echo $acctinfo['adminpin']; ?>
+                    </td>
+                </tr>
+                <?php
             }
-        ?>
+            ?>
     </table>
 </div>
 <ul id="controls">
     <?php
-    $addurl = Horde::applicationUrl('admin.php');
-    $addurl = Horde_Util::addParameter($addurl, 'action', 'add');
+    $addurl = Horde_Util::addParameter($url, 'action', 'add');
     ?>
     <li><a class="button" href="<?php echo $addurl; ?>">
         <?php echo Horde::img('extension-add.png'); ?>&nbsp;New Account
index 6d02315..7de64cc 100644 (file)
@@ -1,5 +1,5 @@
 <div class="header">
-    Account: <?php echo $_SESSION['shout']['accounts'][$curaccount]; ?>
+    Account: <?php echo $_SESSION['shout']['accounts'][$curaccount]['name']; ?>
 </div>
 
 <div id="conferenceList">
index 8ce1d50..a56ec76 100644 (file)
@@ -1,5 +1,5 @@
 <div class="header">
-    Account: <?php echo $_SESSION['shout']['accounts'][$curaccount]; ?>
+    Account: <?php echo $_SESSION['shout']['accounts'][$curaccount]['name']; ?>
 </div>
 
 <div id="extensionList">
index f4498d6..6996890 100644 (file)
@@ -239,6 +239,7 @@ function editAction(digit)
             div.appendChild(img);
             break;
 
+        case 'adminlogin':
         case 'directory':
         case 'rewind':
         case 'none':
index 848cc20..885a03a 100644 (file)
@@ -1,5 +1,5 @@
 <div class="header">
-    Account: <?php echo $_SESSION['shout']['accounts'][$curaccount]; ?>
+    Account: <?php echo $_SESSION['shout']['accounts'][$curaccount]['name']; ?>
 </div>
 
 <div id="extensionList">
index bb71a45..5f948e4 100644 (file)
@@ -33,12 +33,12 @@ function accountSubmit(clear)
    <?php Horde_Util::pformInput() ?>
     <select id="account" name="account" onchange="accountSubmit()">
      <?php
-        foreach ($accounts as $account => $name) {
+        foreach ($accounts as $account => $info) {
             print "<option value=\"$account\"";
             if ($account == $curaccount) {
                 print " selected";
             }
-            print ">$name</option>\n";
+            print ">${info['name']}</option>\n";
         }
      ?>
     </select>
index 87bae6c..f13e927 100644 (file)
@@ -1,5 +1,5 @@
 <div class="header">
-    Account: <?php echo $_SESSION['shout']['accounts'][$curaccount]; ?>
+    Account: <?php echo $_SESSION['shout']['accounts'][$curaccount]['name']; ?>
 </div>
 
 <div id="extensionList">