Shout: Improve adding numbers without menus
authorBen Klang <ben@alkaloid.net>
Mon, 5 Apr 2010 20:12:41 +0000 (16:12 -0400)
committerBen Klang <ben@alkaloid.net>
Mon, 5 Apr 2010 20:12:41 +0000 (16:12 -0400)
shout/lib/Driver/Sql.php
shout/lib/Forms/NumberForm.php

index 36080dc..5448b6d 100644 (file)
@@ -668,18 +668,37 @@ class Shout_Driver_Sql extends Shout_Driver
     {
         $numbers = $this->getNumbers();
         if (isset($numbers[$number])) {
+            // This is an edit
             $sql = 'UPDATE numbers SET ' .
-                   'account_id = (SELECT id FROM accounts WHERE code = ?), ' .
-                   'menu_id = (SELECT id FROM menus WHERE name = ? AND ' .
-                   'account_id = (SELECT id FROM accounts WHERE code = ?)) ' .
-                   'WHERE did = ?';
-            $values = array($account, $menu, $account, $number);
+                   'account_id = (SELECT id FROM accounts WHERE code = ?), ';
+            $values = array($account);
+            if ($menu == 'INACTIVE') {
+                // Special handling for the 'NONE' menu
+                $sql .= 'menu_id = 1 ';
+            } else {
+                $sql .= 'menu_id = (SELECT id FROM menus WHERE name = ? AND ' .
+                        'account_id = (SELECT id FROM accounts WHERE code = ?)) ';
+                $values[] = $menu;
+                $values[] = $account;
+            }
+            $sql .= 'WHERE did = ?';
+            $values[] = $number;
         } else {
+            // This is an add
             $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);
+                   '(SELECT id FROM accounts WHERE code = ?), ';
+            $values = array($account);
+            if ($menu == 'INACTIVE') {
+                // Special handling for the 'NONE' menu
+                $sql .= 'menu_id = 1, ';
+            } else {
+                $sql .= 'menu_id = (SELECT id FROM menus WHERE name = ? AND ' .
+                        'account_id = (SELECT id FROM accounts WHERE code = ?)), ';
+                $values[] = $menu;
+                $values[] = $account;
+            }
+            $sql .= '?)';
+            $values[] = $number;
         }
 
         $msg = 'SQL query in Shout_Driver_Sql#saveNumber(): ' . $sql;
index fbd3198..d1a25e8 100644 (file)
@@ -50,7 +50,7 @@ class NumberDetailsForm extends Horde_Form {
         $accountcode = $vars->get('accountcode');
         if (!empty($accountcode)) {
             $menus = $shout->storage->getMenus($accountcode);
-            $list = array('' => '-- None --');
+            $list = array('INACTIVE' => '-- None --');
             foreach ($menus as $id => $info) {
                 $list[$id] = $info['name'];
             }