From 1169be1f5812fd0dec4f13d89aff4fff83e8251c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20T=C3=A4nzer?= Date: Tue, 29 Jun 2010 18:47:22 +0200 Subject: [PATCH] Refactor: move common routines into separate methods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Tänzer --- .../controllers/ManageAccountController.php | 99 ++++++++++++------- 1 file changed, 66 insertions(+), 33 deletions(-) diff --git a/manager/application/controllers/ManageAccountController.php b/manager/application/controllers/ManageAccountController.php index e9d214c..98147ba 100644 --- a/manager/application/controllers/ManageAccountController.php +++ b/manager/application/controllers/ManageAccountController.php @@ -37,28 +37,9 @@ class ManageAccountController extends Zend_Controller_Action // Form is valid -> get values for processing $values = $form->getValues(); - - // Check identity of the user - $session = Zend_Registry::get('session'); - if ($session->authdata['authed'] !== true) { - throw new Exception(__METHOD__ . ': you need to log in to use this feature'); - } - $query = 'select `id` from `users` where `id` = :user'; - $query_params['user'] = $session->authdata['authed_id']; - $result = $this->db->query($query, $query_params); - if ($result->rowCount() !== 1) { - throw new Exception(__METHOD__ . ': user ID not found in the data base'); - } - $row = $result->fetch(); - $user['id'] = $row['id']; - - - // Get current points of the user - $query = 'select sum(`points`) as `total` from `notary` where `to` = :user'; - $query_params['user'] = $user['id']; - $row = $this->db->query($query, $query_params)->fetch(); - if ($row['total'] === NULL) $row['total'] = 0; - $user['points'] = $row['total']; + // Get user data + $user['id'] = $this->getUserId(); + $user['points'] = $this->getPoints($user['id']); // Do the actual assurances @@ -97,21 +78,52 @@ class ManageAccountController extends Zend_Controller_Action } while ($quantity > 0); - // Fix the assurer flag - $query = 'UPDATE `users` SET `assurer` = 1 WHERE `users`.`id` = :user AND '. - - 'EXISTS(SELECT * FROM `cats_passed` AS `cp`, `cats_variant` AS `cv` '. - 'WHERE `cp`.`variant_id` = `cv`.`id` AND `cv`.`type_id` = 1 AND '. - '`cp`.`user_id` = :user) AND '. - - '(SELECT SUM(`points`) FROM `notary` WHERE `to` = :user AND '. - '`expire` < now()) >= 100'; - $query_params['user'] = $user['id']; - $this->db->query($query, $query_params); + // Maybe user is now assurer + $this->fixAssurerFlag($user['id']); return; } + /** + * Get and check the user ID of the current user + * + * @return int The ID of the current user + */ + protected function getUserId() + { + $session = Zend_Registry::get('session'); + if ($session->authdata['authed'] !== true) { + throw new Exception(__METHOD__ . ': you need to log in to use this feature'); + } + + // Check if the ID is present on the test server + $query = 'select `id` from `users` where `id` = :user'; + $query_params['user'] = $session->authdata['authed_id']; + $result = $this->db->query($query, $query_params); + if ($result->rowCount() !== 1) { + throw new Exception(__METHOD__ . ': user ID not found in the data base'); + } + $row = $result->fetch(); + + return $row['id']; + } + + /** + * Get current points of the user + * + * @param int $user_id ID of the user + * @return int the amount of points the user currently has + */ + protected function getPoints($user_id) + { + $query = 'select sum(`points`) as `total` from `notary` where `to` = :user'; + $query_params['user'] = $user_id; + $row = $this->db->query($query, $query_params)->fetch(); + if ($row['total'] === NULL) $row['total'] = 0; + + return $row['total']; + } + /** * Get the first assurer who didn't already assure the user * @@ -134,6 +146,27 @@ class ManageAccountController extends Zend_Controller_Action return $row['assurer']; } + /** + * Fix the assurer flag for the given user + * + * @param $user_id ID of the user + */ + protected function fixAssurerFlag($user_id) + { + // TODO: unset flag if requirements are not met + + $query = 'UPDATE `users` SET `assurer` = 1 WHERE `users`.`id` = :user AND '. + + 'EXISTS(SELECT * FROM `cats_passed` AS `cp`, `cats_variant` AS `cv` '. + 'WHERE `cp`.`variant_id` = `cv`.`id` AND `cv`.`type_id` = 1 AND '. + '`cp`.`user_id` = :user) AND '. + + '(SELECT SUM(`points`) FROM `notary` WHERE `to` = :user AND '. + '`expire` < now()) >= 100'; + $query_params['user'] = $user_id; + $this->db->query($query, $query_params); + } + protected function getAssuranceForm() { $form = new Zend_Form();