Initial version of the create-assurers script
authorMichael Tänzer <neo@nhng.de>
Tue, 11 May 2010 17:28:36 +0000 (19:28 +0200)
committerMichael Tänzer <neo@nhng.de>
Tue, 11 May 2010 17:28:36 +0000 (19:28 +0200)
Signed-off-by: Michael Tänzer <neo@nhng.de>
dbadm/create-assurers.php [new file with mode: 0755]

diff --git a/dbadm/create-assurers.php b/dbadm/create-assurers.php
new file mode 100755 (executable)
index 0000000..194ea8b
--- /dev/null
@@ -0,0 +1,182 @@
+#!/usr/bin/php
+<?php 
+/**
+ * Script to create more dummy assurer accounts (for use on the test system)
+ * which can be used by the test manager to create automated assurances
+ * 
+ * @author Michael Tänzer
+ */
+
+class CreateAssurers {
+       protected $db;
+       
+       // define constants for the positions in $argv
+       const ARGV_SCRIPT    = 0;
+       const ARGV_DB_HOST   = 1;
+       const ARGV_DB_USER   = 2;
+       const ARGV_DB_PASSWD = 3;
+       const ARGV_DB_NAME   = 4;
+       const ARGV_QUANTITY  = 5;
+       
+       // required length of $argv
+       const ARGV_LENGTH    = 6;
+       
+       
+       function __construct(mysqli $db){
+        $this->db = $db;
+       }
+       
+       
+       public static function echoUsage($script_name){
+               print 'Usage: ' . $script_name; ?> <db_host> <db_user> <db_passwd>
+               <db_name> <quantity>
+
+Script to create more dummy assurer accounts (for use on the test system)
+which can be used by the test manager to create automated assurances
+
+<quantity> specifies how many new dummy accounts should be created
+
+<?php
+       }
+       
+       
+       public static function main(){
+               $argc = $_SERVER['argc'];
+               $argv = $_SERVER['argv'];
+               
+       if ($argc != self::ARGV_LENGTH){
+               self::echoUsage($argv[self::ARGV_SCRIPT]);
+               fwrite(STDERR, "Error: Invalid number of parameters\n");
+               exit(1);
+        }
+        
+       $quantity = (int)($argv[self::ARGV_QUANTITY]);
+        if (!is_numeric($argv[self::ARGV_QUANTITY]) || $quantity < 0){
+               self::echoUsage($argv[self::ARGV_SCRIPT]);
+               fwrite(STDERR, "Error: Last parameter has to be a positive integer\n");
+               exit(2);
+        }
+        
+       // Try to connect to the database
+        $db = new mysqli($argv[self::ARGV_DB_HOST], $argv[self::ARGV_DB_USER],
+                       $argv[self::ARGV_DB_PASSWD], $argv[self::ARGV_DB_NAME]);
+        if (mysqli_connect_error()){
+               fwrite(STDERR, "Error: Could not connect to the data base\n".
+                       "(".mysqli_connect_errno()."): ".mysqli_connect_error());
+               exit(3);
+        }
+        
+        
+        $me = new self($db);
+        $status = $me->createAssurers($quantity); 
+        
+        $db->close();
+        exit($status);
+       }
+       
+       
+       public function createAssurers($quantity){
+               // get last assurer
+               $result = $this->db->query('select `mname` from `users` where `id`=
+                       (select max(`id`) from `users` where `email` like
+                       \'john.doe-___@example.com\')');
+               $row = $result->fetch_assoc();
+               if ($row === NULL){
+                       $last_assurer = 0;
+                       printf("1\n");
+               } else {
+                       $last_assurer = (int)($row['mname']);
+                       printf("2: \$last_assurer: %d\n", $last_assurer);
+               }
+               
+               
+               // prepare the statements
+               $insert_user = $this->db->prepare('insert into `users` set
+                       `email` = ? ,
+                       `password` = \'invalid\' ,
+                       `fname` = ? ,
+                       `mname` = ? ,
+                       `lname` = \'Doe\' ,
+                       `suffix` = \'\' ,
+                       `dob` = ? ,
+                       `Q1` = SHA1(rand()) ,
+                       `Q2` = SHA1(rand()) ,
+                       `Q3` = SHA1(rand()) ,
+                       `Q4` = SHA1(rand()) ,
+                       `Q5` = SHA1(rand()) ,
+                       `A1` = SHA1(rand()) ,
+                       `A2` = SHA1(rand()) ,
+                       `A3` = SHA1(rand()) ,
+                       `A4` = SHA1(rand()) ,
+                       `A5` = SHA1(rand()) ,
+                       `created` = now() ,
+                       `uniqueID` = SHA1(rand()) ,
+                       `verified` = 1 ,
+                       `assurer` = 1 ');
+               $insert_user->bind_param('ssss', $email, $fname, $mname, $dob);
+               
+               $insert_email = $this->db->prepare('insert into `email` set
+                       `email` = ? ,
+                       `hash` = \'\' ,
+                       `created` = now() ,
+                       `modified` = now() ,
+                       `memid` = ? ');
+               $insert_email->bind_param('si', $email, $memid);
+               
+               $insert_alerts = $this->db->prepare('insert into `alerts` set
+                       `memid` = ? ,
+                       `general` = 0 ,
+                       `country` = 0 ,
+                       `regional` = 0 ,
+                       `radius` = 0 ');
+               $insert_alerts->bind_param('i', $memid);
+               
+               $insert_points = $this->db->prepare('insert into `notary` set
+                       `from` = ? ,
+                       `to` = ? ,
+                       `points` = 150 ,
+                       `awarded` = 150 ,
+                       `location` = \'Init Points\' ,
+                       `date` = curdate() ,
+                       `method` = \'Administrative Increase\' ,
+                       `when` = now() ');
+               $insert_points->bind_param('ii', $memid, $memid);
+               
+               $insert_cats = $this->db->prepare('insert into `cats_passed` set
+                       `user_id` = ? ,
+                       `pass_date` = now() ,
+                       `variant_id` =
+                               (select `id` from `cats_variant` where `type_id` = 1) ');
+               $insert_cats->bind_param('i', $memid);
+
+               
+               // do the actual work
+               for ($i = $last_assurer + 1; $i <= $last_assurer + $quantity; $i++){
+                       $email = sprintf('john.doe-%03u@example.com', $i);
+                       $fname = sprintf('John %u', $i);
+                       $mname = sprintf('%u', $i);
+                       $dob = sprintf('19%02u-01-%02u', $i % 90, (int)(($i/90) + 1) );
+                       
+                       $insert_user->execute();
+                       $memid = $insert_user->insert_id;
+                       if ($memid == 0){
+                               fwrite(STDERR, "Error: didn't get a valid ID for the user\n");
+                               return 10;
+                       }
+                       
+                       $insert_email->execute();
+                       $insert_alerts->execute();
+                       $insert_points->execute();
+                       $insert_cats->execute();
+                       
+                       printf('Assurer number %u %s Doe <%s>'."\n".
+                               'born on %s with the ID %d has been added'."\n", $i,
+                               $fname, $email, $dob, $memid);
+               }
+               
+               return 0;
+       }
+}
+
+
+CreateAssurers::main();
\ No newline at end of file