From: Ben Klang Date: Sat, 3 Apr 2010 00:31:41 +0000 (-0400) Subject: Shout: Fix adding/editing numbers X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=24b83bcd764c6d7b2170a595e27f826fbd0da9bd;p=horde.git Shout: Fix adding/editing numbers --- diff --git a/shout/admin/numbers.php b/shout/admin/numbers.php index 3187eea92..482654de1 100644 --- a/shout/admin/numbers.php +++ b/shout/admin/numbers.php @@ -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'); diff --git a/shout/lib/Driver/Sql.php b/shout/lib/Driver/Sql.php index 24d3a95ed..6bf50e948 100644 --- a/shout/lib/Driver/Sql.php +++ b/shout/lib/Driver/Sql.php @@ -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. * diff --git a/shout/lib/Forms/NumberForm.php b/shout/lib/Forms/NumberForm.php index 8086cb614..e6c5d4fd2 100644 --- a/shout/lib/Forms/NumberForm.php +++ b/shout/lib/Forms/NumberForm.php @@ -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 diff --git a/shout/templates/admin/numbers/list.inc.php b/shout/templates/admin/numbers/list.inc.php index f615bf440..bf9d837c1 100644 --- a/shout/templates/admin/numbers/list.inc.php +++ b/shout/templates/admin/numbers/list.inc.php @@ -10,18 +10,19 @@ $editurl = Horde_Util::addParameter($url, 'action', 'edit'); $deleteurl = Horde_Util::addParameter($url, 'action', 'delete'); foreach ($numbers as $numberinfo) { - $code = $acctinfo['code']; + $accountcode = $numberinfo['accountcode']; ?> - + $code))); echo $code; echo ''; ?> + array('number' => $numberinfo['number']))); + echo $numberinfo['number']; echo ''; ?> - + - +