Exemple #1
0
 /** 
  * Generate the data that will populate the database.
  *
  * @return bool True if data was generated and written correctly, false otherwise.
  */
 private function __generateData()
 {
     $this->__logMessage('Generating test data');
     $this->__pushLogIndent();
     $totalMembersToGenerate = 200;
     $membersRemaining = $totalMembersToGenerate;
     $genDetails = array();
     // Half the members should be current members
     $genDetails[Status::CURRENT_MEMBER] = $this->__distribureMembers($membersRemaining, 2);
     // 1/3rd of the remaining members should be ex members
     $genDetails[Status::EX_MEMBER] = $this->__distribureMembers($membersRemaining, 3);
     // Distribute the rest of the members evenly over the other statuses
     $toAssign = (int) floor($membersRemaining / 4);
     $genDetails[Status::PROSPECTIVE_MEMBER] = $toAssign;
     $genDetails[Status::PRE_MEMBER_1] = $toAssign;
     $genDetails[Status::PRE_MEMBER_2] = $toAssign;
     $genDetails[Status::PRE_MEMBER_3] = $toAssign;
     $membersRemaining -= $toAssign * 4;
     // Any left? Make them current members
     $genDetails[Status::CURRENT_MEMBER] += $membersRemaining;
     $this->__logMessage("Generating data for {$totalMembersToGenerate} members.");
     // Generate!
     $dataGenerator = new DataGenerator();
     foreach ($genDetails as $status => $num) {
         for ($i = 0; $i < $num; $i++) {
             $dataGenerator->generateMember($status);
         }
     }
     // Finally generate the dev user
     $details = array('firstname' => $this->__firstname, 'surname' => $this->__surname, 'email' => $this->__email, 'username' => $this->__username, 'groups' => array(Group::CURRENT_MEMBERS, Group::FULL_ACCESS, Group::MEMBERSHIP_ADMIN));
     $dataGenerator->generateMember(Status::CURRENT_MEMBER, $details);
     // Generate some subscriptions
     $memberData = $dataGenerator->getMembersData();
     $memberEmails = array_map(function ($data) {
         return $data['email'];
     }, $memberData);
     $emailGenerator = new emailGenerator();
     $randomEmails = array();
     for ($i = 0; $i < 50; $i++) {
         array_push($randomEmails, $emailGenerator->generate());
     }
     $allEmails = array_merge($memberEmails, $randomEmails);
     $mailingListDataGenerator = new MailingListDataGenerator();
     foreach ($mailingListDataGenerator->getMailingListsData() as $list) {
         $numToAdd = rand(10, 30);
         for ($i = 0; $i < $numToAdd; $i++) {
             $timestamp = rand(strtotime('last year'), time());
             $email = $allEmails[array_rand($allEmails)];
             $mailingListDataGenerator->subscribeEmailToList($email, $list['id'], $timestamp);
         }
     }
     $this->__logMessage('Writing SQL files');
     $sqlData = array(array('filepath' => '../Sql/members_data.sql', 'tableName' => 'members', 'data' => $memberData), array('filepath' => '../Sql/member_group_data.sql', 'tableName' => 'member_group', 'data' => $dataGenerator->getMembersGroupData()), array('filepath' => '../Sql/account_data.sql', 'tableName' => 'account', 'data' => $dataGenerator->getAccountsData()), array('filepath' => '../Sql/pins_data.sql', 'tableName' => 'pins', 'data' => $dataGenerator->getPinsData()), array('filepath' => '../Sql/rfid_tags_data.sql', 'tableName' => 'rfid_tags', 'data' => $dataGenerator->getRfidTagsData()), array('filepath' => '../Sql/status_updates_data.sql', 'tableName' => 'status_updates', 'data' => $dataGenerator->getStatusUpdatesData()), array('filepath' => '../Sql/mailinglists_data.development.sql', 'tableName' => 'mailinglists', 'data' => $mailingListDataGenerator->getMailingListsData()), array('filepath' => '../Sql/mailinglist_subscriptions_data.development.sql', 'tableName' => 'mailinglist_subscriptions', 'data' => $mailingListDataGenerator->getMailingListSubscriptionsData()), array('filepath' => '../Sql/hms_emails_data.development.sql', 'tableName' => 'hms_emails', 'data' => $dataGenerator->getEmailRecordData()));
     $sqlWriter = new sqlWriter();
     foreach ($sqlData as $dataEntry) {
         $sqlString = $sqlWriter->writeInsert($dataEntry['tableName'], $dataEntry['data']);
         $path = $dataEntry['filepath'];
         if ($this->__writeToFile($path, $sqlString)) {
             $this->__logMessage("Wrote {$path}");
         } else {
             $this->__logMessage("Failed to write {$path}");
             $this->__popLogIndent();
             return false;
         }
     }
     $this->__popLogIndent();
     return true;
 }