Shout: Fix adding/editing numbers
authorBen Klang <ben@alkaloid.net>
Sat, 3 Apr 2010 00:31:41 +0000 (20:31 -0400)
committerBen Klang <ben@alkaloid.net>
Sat, 3 Apr 2010 01:52:20 +0000 (21:52 -0400)
shout/admin/numbers.php
shout/lib/Driver/Sql.php
shout/lib/Forms/NumberForm.php
shout/templates/admin/numbers/list.inc.php

index 3187eea..482654d 100644 (file)
@@ -24,7 +24,13 @@ $title = _("Numbers: ");
 switch ($action) {
 case 'add':
 case 'edit':
-    $vars = Horde_Variables::getDefaultVariables();
+    $number = Horde_Util::getFormData('number');
+    if ($action == 'edit' && !empty($number)) {
+        $numbers = $shout->storage->getNumbers();
+        $vars = Horde_Variables::getDefaultVariables($numbers['number']);
+    } else {
+        $vars = Horde_Variables::getDefaultVariables();
+    }
     $Form = new NumberDetailsForm($vars);
 
     if ($Form->isSubmitted() && $Form->validate($vars, true)) {
@@ -34,10 +40,10 @@ case 'edit':
             $notification->push(_("Account information saved."),
                                   'horde.success');
             $action = 'list';
+            break;
         } catch (Exception $e) {
             $notification->push($e);
         }
-        break;
     } elseif ($Form->isSubmitted()) {
         $notification->push(_("Problem processing the form.  Please check below and try again."), 'horde.warning');
     }
@@ -84,12 +90,12 @@ default:
 }
 
 try {
+    $accounts = $shout->storage->getAccounts();
     $numbers = $shout->storage->getNumbers();
 } catch (Exception $e) {
     $notification->push($e);
 }
 
-
 Horde::addScriptFile('stripe.js', 'horde');
 Horde::addScriptFile('prototype.js', 'horde');
 
index 24d3a95..6bf50e9 100644 (file)
@@ -256,7 +256,6 @@ class Shout_Driver_Sql extends Shout_Driver
                '(SELECT id FROM actions WHERE name = ?), ?)';
         $yamlargs = Horde_Yaml::dump($args);
         $values = array($account, $menu, $digit, $action, $yamlargs);
-        Horde::logMessage("Data: ".print_r($values, true), 'ERR');
         $msg = 'SQL query in Shout_Driver_Sql#saveMenuAction(): ' . $sql;
         Horde::logMessage($msg, 'DEBUG');
         $result = $this->_write_db->query($sql, $values);
@@ -593,7 +592,7 @@ class Shout_Driver_Sql extends Shout_Driver
 
     public function getNumbers()
     {
-        $sql = 'SELECT numbers.id AS id, numbers.did AS did, ' .
+        $sql = 'SELECT numbers.id AS id, numbers.did AS number, ' .
                'accounts.code AS accountcode, menus.name AS menuName ' .
                'FROM numbers ' .
                'INNER JOIN accounts ON numbers.account_id = accounts.id ' .
@@ -613,7 +612,7 @@ class Shout_Driver_Sql extends Shout_Driver
 
         $numbers = array();
         while ($row && !($row instanceof PEAR_Error)) {
-            $id = $numbers['did'];
+            $id = $row['number'];
             $numbers[$id] = $row;
 
             /* Advance to the new row in the result set. */
@@ -624,6 +623,45 @@ class Shout_Driver_Sql extends Shout_Driver
         return $numbers;
     }
 
+    public function deleteNumber($number)
+    {
+        // Remove any existing action
+        $sql = 'DELETE FROM numbers WHERE did = ?';
+        $values = array($number);
+        $msg = 'SQL query in Shout_Driver_Sql#deleteNumber(): ' . $sql;
+        Horde::logMessage($msg, 'DEBUG');
+        $result = $this->_write_db->query($sql, $values);
+        if ($result instanceof PEAR_Error) {
+            throw new Shout_Exception($result);
+        }
+        return true;
+    }
+
+    public function saveNumber($number, $account, $menu)
+    {
+        $numbers = $this->getNumbers();
+        if (isset($numbers[$number])) {
+            $sql = 'UPDATE numbers SET ' .
+                   'account_id = (SELECT id FROM accounts WHERE code = ?), ' .
+                   'menu_id = (SELECT id FROM menus WHERE name = ?) ' .
+                   'WHERE did = ?';
+        } else {
+            $sql = 'INSERT INTO numbers (account_id, menu_id, did) VALUES (' .
+                   '(SELECT id FROM accounts WHERE code = ?), ' .
+                   '(SELECT id FROM menus WHERE name = ?), ' .
+                   '?)';
+        }
+        $values = array($account, $menu, $number);
+        $msg = 'SQL query in Shout_Driver_Sql#saveNumber(): ' . $sql;
+        Horde::logMessage($msg, 'DEBUG');
+        $result = $this->_write_db->query($sql, $values);
+        if ($result instanceof PEAR_Error) {
+            throw new Shout_Exception($result);
+        }
+
+        return true;
+    }
+
     /**
      * Attempts to open a persistent connection to the SQL server.
      *
index 8086cb6..e6c5d4f 100644 (file)
@@ -37,6 +37,7 @@ class NumberDetailsForm extends Horde_Form {
 
         $shout = $GLOBALS['registry']->getApiInstance('shout', 'application');
         $accounts = $shout->storage->getAccounts();
+        $list = array();
         foreach ($accounts as $id => $info) {
             $list[$id] = $info['name'];
         }
@@ -47,13 +48,15 @@ class NumberDetailsForm extends Horde_Form {
         $select->setOption('trackchange', true);
 
         $accountcode = $vars->get('accountcode');
-        $menus = $shout->storage->getMenus($accountcode);
-        $list = array('' => _("-- none --"));
-        foreach ($menus as $id => $info) {
-            $list[$id] = $info['name'];
+        if (!empty($accountcode)) {
+            $menus = $shout->storage->getMenus($accountcode);
+            $list = array();
+            foreach ($menus as $id => $info) {
+                $list[$id] = $info['name'];
+            }
+            $this->addVariable(_("Menu"), 'menuName', 'enum', false,
+                                         false, null, array($list));
         }
-        $this->addVariable(_("Menu"), 'menuName', 'enum', false,
-                                     false, null, array($list));
         return true;
     }
 
@@ -62,19 +65,14 @@ class NumberDetailsForm extends Horde_Form {
      */
     function execute()
     {
-        die("FIXME");
         $shout = $GLOBALS['registry']->getApiInstance('shout', 'application');
 
-        $code = $this->_vars->get('code');
-        $name = $this->_vars->get('name');
-        $adminpin = $this->_vars->get('adminpin');
-        if (empty($adminpin)) {
-            $adminpin = rand(1000, 9999);
-        }
+        $number = $this->_vars->get('number');
+        $accountcode = $this->_vars->get('accountcode');
+        $menuName = $this->_vars->get('menuName');
 
-        $shout->storage->saveAccount($code, $name, $adminpin);
+        return $shout->storage->saveNumber($number, $accountcode, $menuName);
     }
-
 }
 
 class NumberDeleteForm extends Horde_Form
index f615bf4..bf9d837 100644 (file)
             $editurl = Horde_Util::addParameter($url, 'action', 'edit');
             $deleteurl = Horde_Util::addParameter($url, 'action', 'delete');
             foreach ($numbers as $numberinfo) {
-                $code = $acctinfo['code'];
+                $accountcode = $numberinfo['accountcode'];
                 ?>
-                <tr class="item" style="vertical-align: top">
+                <tr class="item">
                     <td>
                         <?php echo Horde::link(Horde_Util::addParameter($editurl,
-                            array('account' => $code))); echo $code; echo '</a>'; ?>
+                                    array('number' => $numberinfo['number'])));
+                              echo $numberinfo['number']; echo '</a>'; ?>
                     </td>
                     <td>
-                        <?php echo $acctinfo['name']; ?>
+                        <?php echo $accounts[$accountcode]['name']; ?>
                     </td>
                     <td>
-                        <?php echo $acctinfo['adminpin']; ?>
+                        <?php echo $numberinfo['menuName']; ?>
                     </td>
                 </tr>
                 <?php