Refactor: move common routines into separate methods
authorMichael Tänzer <neo@nhng.de>
Tue, 29 Jun 2010 16:47:22 +0000 (18:47 +0200)
committerMichael Tänzer <neo@nhng.de>
Tue, 29 Jun 2010 16:47:22 +0000 (18:47 +0200)
Signed-off-by: Michael Tänzer <neo@nhng.de>
manager/application/controllers/ManageAccountController.php

index e9d214c..98147ba 100644 (file)
@@ -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,22 +78,53 @@ 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
      * 
      * @param int $user_id The ID of the user who should get assured
@@ -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();