/**
  * function getHTML
  * <pre>
  * This method returns the HTML data generated by this object.
  * </pre>
  * @return [STRING] HTML Display data.
  */
 function getHTML()
 {
     // Uncomment the following line if you want to create a template
     // tailored for this page:
     //$path = $this->pathModuleRoot.'templates/';
     // Otherwise use the standard Templates for the site:
     $path = SITE_PATH_TEMPLATES;
     /*
      * store the link values
      */
     // example:
     // $this->linkValues[ 'view' ] = 'add/new/href/data/here';
     // store the link labels
     $this->linkLabels['edit'] = $this->labels->getLabel('[Edit]');
     $this->linkLabels['del'] = $this->labels->getLabel('[Delete]');
     $this->linkLabels['cont'] = $this->labels->getLabel('[Continue]');
     // $this->linkLabels[ 'view' ] = 'new link label here';
     /*
      * store any additional link Columns
      */
     // example:
     //$title = $this->labels->getLabel( '[title_groups]');
     //$columnLabel = $this->labels->getLabel( '[groups]');
     //$link = $this->linkValues[ 'groups' ];
     //$fieldName = 'accessgroup_id';
     //$this->addLinkColumn( $title, $columnLabel, $link, $fieldName);
     /*
      * Update any label tags ...
      */
     // example:
     // $name = $user->getName();
     // $this->labels->setLabelTag( '[Title]', '[userName]', $name);
     // NOTE:  this parent method prepares the $this->template with the
     // common AdminBox data.
     $this->prepareTemplate($path);
     // store the statevar id to edit
     $this->template->set('editEntryID', $this->status_id);
     // store all the fields to the template
     $this->setFormFieldsToTemplate();
     /*
      * Form related Template variables:
      */
     /*
      * Insert the date start/end values for the following date fields:
      */
     // example:
     //$this->template->set( 'startYear_[fieldName]', 2000);
     //$this->template->set( 'endYear_[fieldName]', 2010);
     /*
      * List related Template variables :
      */
     // Store the XML Node name for the Data Access Field List
     $xmlNodeName = RowManager_StatusManager::XML_NODE_NAME;
     $this->template->set('rowManagerXMLNodeName', $xmlNodeName);
     // store the primary key field name for the data being displayed
     $this->template->set('primaryKeyFieldName', 'status_id');
     // store data list to the template
     // NOTE: we initialize it here to make sure we capture any new data
     // from a recent processData() call.
     $dataAccessManager = new RowManager_StatusManager();
     $dataAccessManager->setSortOrder($this->sortBy);
     //        $this->dataList = new StatusList( $this->sortBy );
     $this->dataList = $dataAccessManager->getListIterator();
     $this->template->setXML('dataList', $this->dataList->getXML());
     /*
      * Add any additional data required by the template here
      */
     $templateName = 'siteAdminBox.php';
     // if you are creating a custom template for this page then
     // replace $templateName with the following:
     //$templateName = 'page_EditStatuses.php';
     return $this->template->fetch($templateName);
 }
 protected function setRegistrationID()
 {
     // get registration ID for the rest of the reg. process
     $regs = new RowManager_RegistrationManager();
     $people = new RowManager_PersonManager();
     $people->setPersonID($this->person_id);
     $events = new RowManager_EventManager();
     $events->setEventID($this->event_id);
     $personRegs = new MultiTableManager();
     $personRegs->addRowManager($regs);
     $personRegs->addRowManager($people, new JoinPair($regs->getJoinOnPersonID(), $people->getJoinOnPersonID()));
     $personRegs->addRowManager($events, new JoinPair($regs->getJoinOnEventID(), $events->getJoinOnEventID()));
     $regsList = $personRegs->getListIterator();
     $regsArray = $regsList->getDataList();
     //        echo "<pre>".print_r($regsArray,true)."</pre>";
     reset($regsArray);
     foreach (array_keys($regsArray) as $k) {
         $registration = current($regsArray);
         $this->registration_id = $registration['registration_id'];
         // NOTE: should only be one reg. per person per event (ENFORCE??)
         next($regsArray);
     }
     // create new registration record for this person (since none exists for current person-event combo)
     if (!isset($this->registration_id)) {
         // get status id for INITIAL_REG_STATUS
         $regStatus = new RowManager_StatusManager();
         $regStatus->setStatusDesc(FormProcessor_EditMyInfo::INITIAL_REG_STATUS);
         $regStatusList = $regStatus->getListIterator();
         $regStatusArray = $regStatusList->getDataList();
         $statusID = 0;
         reset($regStatusArray);
         foreach (array_keys($regStatusArray) as $k) {
             $status = current($regStatusArray);
             $statusID = $status['status_id'];
             // NOTE: should only be one reg. per person per event (ENFORCE??)
             next($regStatusArray);
         }
         // get the MAX(registration_id)... need to determine what insertion registration ID will be (used in confirmNum)
         $allRegs = new MultiTableManager();
         $regs2 = new RowManager_RegistrationManager();
         $allRegs->addRowManager($regs2);
         $allRegs->setFunctionCall('MAX', 'registration_id');
         $allRegs->ignoreFields();
         // only leave MAX(registration_id) in values to be returned
         $allRegsList = $allRegs->getListIterator();
         $allRegsArray = $allRegsList->getDataList();
         $maxID = -1;
         reset($allRegsArray);
         foreach (array_keys($allRegsArray) as $k) {
             $regRecord = current($allRegsArray);
             $maxID = $regRecord['MAX(registration_id)'];
             if ($maxID > -1) {
                 break;
                 // get out of the loop once MAX is found
             }
             next($allRegsArray);
         }
         // compile values needed for new registration record
         $regValues = array();
         $nextRegID = $maxID + 1;
         $regValues['event_id'] = $this->event_id;
         // check if a new person record needs to be created
         if ($this->person_id == -1) {
             $this->person_id = $this->getNextPersonID();
             // assumes processData() will properly use this value for insertion
             // create empty person record to start off... since otherwise FK constraint on cim_reg_registration is NOT satisfied
             $personManager = new RowManager_PersonManager($this->person_id);
             $personManager->loadFromArray($this->formValues);
             $personManager->setPersonID($this->person_id);
             $personManager->createNewEntry(true);
             //$this->assignCampus($this->person_id);	-- save this step for when info properly entered into form
         }
         $regValues['person_id'] = $this->person_id;
         $timestamp = strtotime("now");
         $date = date('Y-m-d H:i:s', $timestamp);
         // == NOW() : to bad I could pass that as non-string...
         $regValues['registration_date'] = $date;
         // set date-time to current date-time
         $regValues['registration_confirmNum'] = 'E' . $this->event_id . 'R' . $nextRegID . 'C' . $this->campus_id;
         $regValues['registration_status'] = $statusID;
         // store values in table manager object.
         $regs->loadFromArray($regValues);
         // set primary key to use for update (if maxID found)
         if ($maxID > -1) {
             $regValues['registration_id'] = $nextRegID;
             $regs->setRegID($regValues['registration_id']);
         }
         // now update the DB with the values
         if (!$regs->isLoaded()) {
             $regs->createNewEntry(true);
             // allow primary key to be set (in case auto_increment is off)
             $this->registration_id = $nextRegID;
         }
         // TODO: figure out how to show error if no registration made, or updated (IF it is even possible now...)
     }
 }
 protected function storeRegStatus($regID = '', $reg_status)
 {
     $success = true;
     if ($regID != '') {
         $regs = new RowManager_RegistrationManager();
         $regs->setRegID($this->reg_id);
         $status = new RowManager_StatusManager();
         $status->setStatusDesc($reg_status);
         $statusList = $status->getListIterator();
         $statusArray = $statusList->getDataList();
         $status_id = -1;
         reset($statusArray);
         // should be only 1 record for a particular status description
         foreach (array_keys($statusArray) as $k) {
             $record = current($statusArray);
             $status_id = $record['status_id'];
             next($statusArray);
         }
         if ($status_id == -1) {
             $success = false;
             return $sucess;
         }
         $updateValues = array();
         $updateValues['registration_id'] = $this->reg_id;
         $updateValues['registration_status'] = $status_id;
         // mark registration as being REGISTERED
         // Store values in RegistrationManager object
         $regs->loadFromArray($updateValues);
         //              echo "<pre>".print_r($this->formValues ,true)."</pre>";
         // update information
         $regs->updateDBTable();
         return $success;
     } else {
         $success = false;
     }
 }
 /**
  * function getHTML
  * <pre>
  * This method returns the HTML data generated by this object.
  * </pre>
  * @return [STRING] HTML Display data.
  */
 function getHTML()
 {
     // Make a new Template object
     //$this->pathModuleRoot.'templates/';
     // Replace $path with the following line if you want to create a
     // template tailored for this page:
     $path = $this->pathModuleRoot . 'templates/';
     // store the link values
     // $this->linkValues[ 'view' ] = 'add/new/href/data/here';
     // store the link labels
     $this->linkLabels['add'] = $this->labels->getLabel('[Add]');
     $this->linkLabels['edit'] = $this->labels->getLabel('[Edit]');
     $this->linkLabels['del'] = $this->labels->getLabel('[Delete]');
     $this->linkLabels['cont'] = $this->labels->getLabel('[Continue]');
     // $this->linkLabels[ 'view' ] = 'new link label here';
     //         $adminLink = $this->linkValues[ 'adminHome' ];
     //         $this->template->set('adminLink', $adminLink );
     // get pricing info
     // get base price for event participation
     $event = new RowManager_EventManager($this->event_id);
     $eventBasePrice = $event->getEventBasePrice();
     // get price rules for specific event
     $priceRules = new RowManager_PriceRuleManager();
     $priceRules->setEventID($this->event_id);
     $ruleManager = $priceRules->getListIterator();
     $priceRulesArray = $ruleManager->getDataList();
     //	echo "<pre>".print_r($priceRulesArray,true)."</pre>";
     // array storing the rules applied to a particular registrant
     $rulesApplied = array();
     $priceGetter = new FinancialTools();
     $basePriceForThisGuy = $priceGetter->getBasePriceForRegistrant($this->reg_id, $this->event_id, $this->campus_id, $eventBasePrice, $priceRulesArray, $rulesApplied);
     // get Personal Info
     $registration = new RowManager_RegistrationManager();
     $registration->setRegID($this->reg_id);
     $person = new RowManager_PersonManager();
     $assignment = new RowManager_AssignmentsManager();
     // assigns campus to person
     $campus = new RowManager_CampusManager();
     //   $campus->setCampusID($this->campus_id);
     $personalInfo = new MultiTableManager();
     $personalInfo->addRowManager($person);
     $personalInfo->addRowManager($assignment, new JoinPair($person->getJoinOnPersonID(), $assignment->getJoinOnPersonID()));
     $personalInfo->addRowManager($campus, new JoinPair($campus->getJoinOnCampusID(), $assignment->getJoinOnCampusID()));
     $personalInfo->addRowManager($registration, new JoinPair($registration->getJoinOnPersonID(), $person->getJoinOnPersonID()));
     $this->listManager = $personalInfo->getListIterator();
     $personInfoArray = $this->listManager->getDataList();
     //         echo "<pre>".print_r($this->listManager,true)."</pre>";
     //        echo "<pre>".print_r($personInfoArray,true)."</pre>";
     // cycle through registrations and store balance owing for each
     $this->owingArray = array();
     $priceGetter = new FinancialTools();
     reset($personInfoArray);
     foreach (array_keys($personInfoArray) as $k) {
         $personData = current($personInfoArray);
         $this->person_id = $personData['person_id'];
         $this->person_info['person_fname'] = '';
         $this->person_info['person_fname'] = $personData['person_fname'];
         $this->person_info['person_lname'] = '';
         $this->person_info['person_lname'] = $personData['person_lname'];
         $this->person_info['campus_desc'] = '';
         $this->person_info['campus_desc'] = $personData['campus_desc'];
         $this->person_info['person_email'] = '';
         $this->person_info['person_email'] = $personData['person_email'];
         $this->person_info['gender_id'] = '';
         $this->person_info['gender_id'] = $personData['gender_id'];
         $this->person_info['person_local_addr'] = '';
         $this->person_info['person_local_addr'] = $personData['person_local_addr'];
         $this->person_info['person_local_city'] = '';
         $this->person_info['person_local_city'] = $personData['person_local_city'];
         $this->person_info['person_local_province_id'] = '';
         $this->person_info['person_local_province_id'] = $personData['person_local_province_id'];
         $this->person_info['person_local_pc'] = '';
         $this->person_info['person_local_pc'] = $personData['person_local_pc'];
         $this->person_info['person_local_phone'] = '';
         $this->person_info['person_local_phone'] = $personData['person_local_phone'];
         $this->person_info['person_addr'] = '';
         $this->person_info['person_addr'] = $personData['person_addr'];
         $this->person_info['person_city'] = '';
         $this->person_info['person_city'] = $personData['person_city'];
         $this->person_info['province_id'] = '';
         $this->person_info['province_id'] = $personData['province_id'];
         $this->person_info['person_pc'] = '';
         $this->person_info['person_pc'] = $personData['person_pc'];
         $this->person_info['person_phone'] = '';
         $this->person_info['person_phone'] = $personData['person_phone'];
         $this->person_info['registration_status'] = $personData['registration_status'];
         next($personInfoArray);
     }
     $this->linkValues["EditPersonInfo"] .= $this->person_id;
     $this->prepareTemplate($path);
     // set current registration status ID
     $this->template->set('currentRegStatus', $this->person_info['registration_status']);
     // get list of registration statuses
     $regStatuses = new RowManager_StatusManager();
     $regStatusesList = $regStatuses->getListIterator();
     $regStatusesArray = $regStatusesList->getDataList();
     $statusList = array();
     reset($regStatusesArray);
     foreach (array_keys($regStatusesArray) as $k) {
         $record = current($regStatusesArray);
         $statusList[key($regStatusesArray)] = $record['status_desc'];
         next($regStatusesArray);
     }
     // 						echo 'status list = <pre>'.print_r($statusList, true).'</pre>';
     // set registration status information
     $this->template->set('statusFormAction', $this->formAction);
     $this->template->set('statusList', $statusList);
     $this->template->set('statusButtonText', 'Update');
     // set some variables calculated previously; placed here because I need to get PERSON_ID for link
     // which had to be set before prepareTemplate(), which has to be executed BEFORE setting variables...
     $this->template->set('eventBasePrice', $eventBasePrice);
     $this->template->set('priceRules', $rulesApplied);
     $this->template->set('basePriceForThisGuy', $basePriceForThisGuy);
     //$priceGetter->calcBalanceOwing($this->reg_id);		// NOT NEEDED BECAUSE TOTALS CALCULATED
     $this->template->set('person', $this->person_info);
     // get provinces and genders
     $provinces = new RowManager_ProvinceManager();
     $provinceList = $provinces->getListIterator();
     $provincesArray = $provinceList->getDataList();
     //        echo "<pre>".print_r($provincesArray,true)."</pre>";
     $province_info = array();
     reset($provincesArray);
     foreach (array_keys($provincesArray) as $k) {
         $province = current($provincesArray);
         $province_info[$province['province_id']] = $province['province_desc'];
         next($provincesArray);
     }
     $this->template->set('list_province_id', $province_info);
     $genders = new RowManager_GenderManager();
     $genderList = $genders->getListIterator();
     $genderArray = $genderList->getDataList();
     //        echo "<pre>".print_r($genderArray,true)."</pre>";
     $gender_info = array();
     reset($genderArray);
     foreach (array_keys($genderArray) as $k) {
         $gender = current($genderArray);
         $gender_info[$gender['gender_id']] = $gender['gender_desc'];
         next($genderArray);
     }
     $this->template->set('list_gender_id', $gender_info);
     // send in scholarships table, cash transactions table, and credit card transactions table
     $this->template->set('scholarshipsAdminBox', $this->generateScholarshipsTable());
     $this->template->set('cashTransAdminBox', $this->generateCashTransactionsTable());
     $this->template->set('ccTransAdminBox', $this->generateCCTransactionsTable());
     // get scholarship total
     $scholarships = new RowManager_ScholarshipAssignmentManager();
     $scholarships->setRegID($this->reg_id);
     $scholarshipTotal = new MultiTableManager();
     $scholarshipTotal->addRowManager($scholarships);
     $scholarshipTotal->setFunctionCall('SUM', 'scholarship_amount');
     $scholarshipTotal->setGroupBy('registration_id');
     $scholarshipsList = $scholarshipTotal->getListIterator();
     $scholarshipsArray = $scholarshipsList->getDataList();
     reset($scholarshipsArray);
     foreach (array_keys($scholarshipsArray) as $k) {
         $scholarshp = current($scholarshipsArray);
         $scholarship_total = $scholarshp['SUM(scholarship_amount)'];
         next($scholarshipsArray);
     }
     if (!isset($scholarship_total)) {
         $scholarship_total = 0;
     }
     $this->template->set('scholarshipTotal', $scholarship_total);
     // get cash total
     $cashTrans = new RowManager_CashTransactionManager();
     $cashTrans->setRegID($this->reg_id);
     $cashTrans->setReceived(true);
     $cashTransTotal = new MultiTableManager();
     $cashTransTotal->addRowManager($cashTrans);
     $cashTransTotal->setFunctionCall('SUM', 'cashtransaction_amtPaid');
     $cashTransTotal->setGroupBy('reg_id');
     $cashTransList = $cashTransTotal->getListIterator();
     $cashTransArray = $cashTransList->getDataList();
     reset($cashTransArray);
     foreach (array_keys($cashTransArray) as $k) {
         $cash_trans = current($cashTransArray);
         $cash_total = $cash_trans['SUM(cashtransaction_amtPaid)'];
         next($cashTransArray);
     }
     if (!isset($cash_total)) {
         $cash_total = 0;
     }
     $this->template->set('cashTotal', $cash_total);
     // get cash owed
     $cashOwed = new RowManager_CashTransactionManager();
     $cashOwed->setRegID($this->reg_id);
     $cashOwed->setReceived(false);
     $cashOwedTotal = new MultiTableManager();
     $cashOwedTotal->addRowManager($cashOwed);
     $cashOwedTotal->setFunctionCall('SUM', 'cashtransaction_amtPaid');
     $cashOwedTotal->setGroupBy('reg_id');
     $cashOwedList = $cashOwedTotal->getListIterator();
     $cashOwedArray = $cashOwedList->getDataList();
     reset($cashOwedArray);
     foreach (array_keys($cashOwedArray) as $k) {
         $cash_owed = current($cashOwedArray);
         $cash_owing = $cash_owed['SUM(cashtransaction_amtPaid)'];
         next($cashOwedArray);
     }
     if (!isset($cash_owing)) {
         $cash_owing = 0;
     }
     $this->template->set('cashOwed', $cash_owing);
     // get credit card total
     $ccTrans = new RowManager_CreditCardTransactionManager();
     $ccTrans->setProcessed(true);
     $ccTrans->setRegID($this->reg_id);
     $ccTransTotal = new MultiTableManager();
     $ccTransTotal->addRowManager($ccTrans);
     $ccTransTotal->setFunctionCall('SUM', 'cctransaction_amount');
     $ccTransTotal->setGroupBy('reg_id');
     $ccTransList = $ccTransTotal->getListIterator();
     $ccTransArray = $ccTransList->getDataList();
     reset($ccTransArray);
     foreach (array_keys($ccTransArray) as $k) {
         $cc_trans = current($ccTransArray);
         $cc_total = $cc_trans['SUM(cctransaction_amount)'];
         next($ccTransArray);
     }
     if (!isset($cc_total)) {
         $cc_total = 0;
     }
     $this->template->set('ccTotal', $cc_total);
     // TODO??: get credit card transactions NOT processed
     // set form for editing registration-specific form fields' values
     $this->template->set('eventFieldsFormSingle', $this->generateFieldValuesForm());
     // store any additional link Columns
     // example:
     //$title = $this->labels->getLabel( '[title_groups]');
     //$columnLabel = $this->labels->getLabel( '[groups]');
     //$link = $this->linkValues[ 'groups' ];
     //$fieldName = 'accessgroup_id';
     //$this->addLinkColumn( $title, $columnLabel, $link, $fieldName);
     // store the page labels
     // NOTE: use this location to update any label tags ...
     // example:
     // $name = $user->getName();
     // $this->labels->setLabelTag( '[Title]', '[userName]', $name);
     // store the Row Manager's XML Node Name
     //        $this->template->set( 'rowManagerXMLNodeName', RowManager_RegistrationManager::XML_NODE_NAME );
     $this->template->set('rowManagerXMLNodeName', MultiTableManager::XML_NODE_NAME);
     // store the primary key field name for the data being displayed
     $this->template->set('primaryKeyFieldName', 'registration_id');
     // Load over-payment message, if necessary
     if ($this->ccTrans_subPage->hasOverPaid()) {
         $this->template->set('attemptedOverpayment', true);
     }
     // TODO: somehow merge the primary join with the balance owing join.... for efficiency
     /*
      *  Set up any additional data transfer to the Template here...
      */
     //       $this->template->set( 'dataList', $this->dataList);
     $templateName = 'page_EditRegistrationDetails.tpl.php';
     // if you are creating a custom template for this page then
     // replace $templateName with the following:
     //$templateName = 'page_EditCampusRegistrations.php';
     return $this->template->fetch($templateName);
 }
  * scholarship_amount [INTEGER]  The amount of money the scholarship is worth.
  * scholarship_sourceAcct [STRING]  The account number from where the scholarship originates.
  * scholarship_sourceDesc [STRING]  The description of the source account.
  */
 $ScholarshipAssignment = new RowManager_ScholarshipAssignmentManager();
 $ScholarshipAssignment->dropTable();
 $ScholarshipAssignment->createTable();
 /*
  * Status Table
  *
  * Used to describe what state a particular registration is in (unassigned, registered, cancelled, etc.)
  *
  * status_id [INTEGER]  Unique identifier of a particular registration status description
  * status_desc [STRING]  Description of some registration status
  */
 $Status = new RowManager_StatusManager();
 $Status->dropTable();
 $Status->createTable();
 /*
 * Receipt Table
 *
 * A record of an official Moneris operation associated with a particular transaction record.
 *
 * ccreceipt_sequencenum [STRING]  The unique identifier of a receipt returned by Moneris.
 * ccreceipt_authcode [STRING]  According to Moneris:
 Authorization code returned from the issuing institution.
 * ccreceipt_responsecode [STRING]  According to Moneris:
 Transaction Response Code
 < 50: Transaction approved
 >= 50: Transaction declined
 NULL: Transaction was not sent for authorization
 protected function createRegistrationRecord($eventID, $personID, &$regs)
 {
     if ($personID != -1 && $eventID != -1) {
         // 	        $regs = new RowManager_RegistrationManager();
         // get status id for INITIAL_REG_STATUS
         $regStatus = new RowManager_StatusManager();
         $regStatus->setStatusDesc(FormProcessor_Register::INITIAL_REG_STATUS);
         $regStatusList = $regStatus->getListIterator();
         $regStatusArray = $regStatusList->getDataList();
         $statusID = 0;
         reset($regStatusArray);
         foreach (array_keys($regStatusArray) as $k) {
             $status = current($regStatusArray);
             $statusID = $status['status_id'];
             // NOTE: should only be one reg. per person per event (ENFORCE??)
             next($regStatusArray);
         }
         // get the MAX(registration_id)... need to determine what insertion registration ID will be (used in confirmNum)
         $allRegs = new MultiTableManager();
         $allRegs->addRowManager($regs);
         $allRegs->setFunctionCall('MAX', 'registration_id');
         $allRegs->ignoreFields();
         // only leave MAX(registration_id) in values to be returned
         $allRegsList = $allRegs->getListIterator();
         $allRegsArray = $allRegsList->getDataList();
         $maxID = -1;
         reset($allRegsArray);
         foreach (array_keys($allRegsArray) as $k) {
             $regRecord = current($allRegsArray);
             $maxID = $regRecord['MAX(registration_id)'];
             if ($maxID > -1) {
                 break;
                 // get out of the loop once MAX is found
             }
             next($allRegsArray);
         }
         // compile values needed for new registration record
         $regValues = array();
         $nextRegID = $maxID + 1;
         $regValues['event_id'] = $eventID;
         // check if a new person record needs to be created
         // 				if ($this->person_id == -1)
         // 				{
         // 					$this->person_id = $this->getNextPersonID();	// assumes processData() will properly use this value for insertion
         // 				}
         $regValues['person_id'] = $personID;
         $timestamp = strtotime("now");
         $date = date('Y-m-d H:i:s', $timestamp);
         // == NOW() : to bad I could pass that as non-string...
         $regValues['registration_date'] = $date;
         // set date-time to current date-time
         $regValues['registration_confirmNum'] = 'E' . $eventID . 'R' . $nextRegID . 'AIA';
         $regValues['registration_status'] = $statusID;
         $this->confirmNum = $regValues['registration_confirmNum'];
         // TODO: change means of assigning to global
         // store values in table manager object.
         $regs->loadFromArray($regValues);
         // set primary key to use for update (if maxID found)
         if ($maxID > -1) {
             $regValues['registration_id'] = $nextRegID;
             $regs->setRegID($regValues['registration_id']);
         }
         // now update the DB with the values
         if (!$regs->isLoaded()) {
             $regs->createNewEntry(true);
             // allow primary key to be set (in case auto_increment is off)
             return $nextRegID;
         } else {
             return -1;
         }
         // TODO: figure out how to show error if no registration made, or updated (IF it is even possible now...)
     }
 }
 /**
  * function getHTML
  * <pre>
  * This method returns the HTML data generated by this object.
  * </pre>
  * @return [STRING] HTML Display data.
  */
 function getHTML()
 {
     // Make a new Template object
     $path = SITE_PATH_TEMPLATES;
     // Replace $path with the following line if you want to create a
     // template tailored for this page:
     //$path = $this->pathModuleRoot.'templates/';
     // store the link values
     // $this->linkValues[ 'view' ] = 'add/new/href/data/here';
     // store the link labels
     $this->linkLabels['add'] = $this->labels->getLabel('[Add]');
     $this->linkLabels['edit'] = $this->labels->getLabel('[Edit]');
     $this->linkLabels['del'] = $this->labels->getLabel('[Delete]');
     $this->linkLabels['cont'] = $this->labels->getLabel('[Continue]');
     // $this->linkLabels[ 'view' ] = 'new link label here';
     // store any additional link Columns
     // example:
     //$title = $this->labels->getLabel( '[title_groups]');
     //$columnLabel = $this->labels->getLabel( '[groups]');
     //$link = $this->linkValues[ 'groups' ];
     //$fieldName = 'accessgroup_id';
     //$this->addLinkColumn( $title, $columnLabel, $link, $fieldName);
     // echo "<pre>".print_r($this->linkValues, true)."</pre>";
     $title = $this->labels->getLabel('[Details]');
     $columnLabel = $this->labels->getLabel('[View]');
     $link = $this->linkValues['view'];
     $fieldName = 'event_id';
     $this->addLinkColumn($title, $columnLabel, $link, $fieldName);
     $REGISTERED = 2;
     //'true';
     $INCOMPLETE = 1;
     $NOT_REGISTERED = 0;
     //'false';
     /**  determine which events the user has already registered for...  **/
     $events = new RowManager_EventManager();
     $events->setOnHomePage('1');
     $events->addSearchCondition($this->countrySearchCondition);
     //             $events->setSortOrder( $this->sortBy );	// needed to sync lists
     $regs = new RowManager_RegistrationManager();
     $regs->setPersonID($this->person_id);
     $status = new RowManager_StatusManager();
     $status->setStatusDesc(RowManager_StatusManager::REGISTERED);
     $reg_events = new MultiTableManager();
     $reg_events->addRowManager($events);
     $reg_events->addRowManager($regs, new JoinPair($events->getJoinOnEventID(), $regs->getJoinOnEventID()));
     $reg_events->addRowManager($status, new JoinPair($regs->getJoinOnStatus(), $status->getJoinOnStatusID()));
     if (!isset($this->sortBy) || $this->sortBy == '') {
         $this->sortBy = 'event_id';
     }
     $reg_events->setSortOrder($this->sortBy);
     // needed to sync lists
     //             echo "reg events sql = ".$reg_events->createSQL();
     $regs_events_list = $reg_events->getListIterator();
     $regs_events_array = $regs_events_list->getDataList();
     /** determine which events the user has PARTIALLY completed registration for ***/
     $events2 = new RowManager_EventManager();
     $events2->setOnHomePage('1');
     $events2->addSearchCondition($this->countrySearchCondition);
     //             $events->setSortOrder( $this->sortBy );	// needed to sync lists
     $regs2 = new RowManager_RegistrationManager();
     $regs2->setPersonID($this->person_id);
     $status2 = new RowManager_StatusManager();
     $status2->setStatusDesc(RowManager_StatusManager::INCOMPLETE);
     $reg_events2 = new MultiTableManager();
     $reg_events2->addRowManager($events2);
     $reg_events2->addRowManager($regs2, new JoinPair($events2->getJoinOnEventID(), $regs2->getJoinOnEventID()));
     $reg_events2->addRowManager($status2, new JoinPair($regs2->getJoinOnStatus(), $status2->getJoinOnStatusID()));
     $reg_events2->setSortOrder($this->sortBy);
     // needed to sync lists
     //             echo "reg events sql = ".$reg_events->createSQL():
     $incomplete_regs_events_list = $reg_events2->getListIterator();
     $incompete_regs_events_array = $incomplete_regs_events_list->getDataList();
     //            echo '<pre>'.print_r($incompete_regs_events_array, true).'</pre>';
     // get full event-listing for mapping isRegistered to
     $allEvents = $this->listManager->getDataList();
     //
     //           echo 'reg events = <pre>'.print_r($regs_events_array,true).'</pre><br>';
     //             echo 'all events = <pre>'.print_r($allEvents, true).'</pre><br>';
     $eventName_isReg_array = array();
     reset($regs_events_array);
     reset($incompete_regs_events_array);
     reset($allEvents);
     foreach (array_keys($allEvents) as $k) {
         $record = current($allEvents);
         $currentEvent = $record['event_id'];
         $record2 = current($regs_events_array);
         $currentRegEvent = $record2['event_id'];
         $record3 = current($incompete_regs_events_array);
         $currentIncRegEvent = $record3['event_id'];
         $eventName = $record['event_name'];
         // store event in registered array if mapping found
         if ($currentEvent == $currentRegEvent) {
             $eventName_isReg_array[$eventName] = $REGISTERED;
             next($regs_events_array);
         } else {
             if ($currentEvent == $currentIncRegEvent) {
                 $eventName_isReg_array[$eventName] = $INCOMPLETE;
                 next($incompete_regs_events_array);
             } else {
                 $eventName_isReg_array[$eventName] = $NOT_REGISTERED;
             }
         }
         next($allEvents);
     }
     //             echo "events: <PRE>".print_r($eventName_isReg_array,true)."</PRE>";
     $title = $this->labels->getLabel('[RegisterAccess]');
     $columnLabels = array();
     $columnLabels[$NOT_REGISTERED] = $this->labels->getLabel('[Register]');
     $columnLabels[$INCOMPLETE] = $this->labels->getLabel('[FinishReg]');
     $columnLabels[$REGISTERED] = $this->labels->getLabel('[EditReg]');
     // formerly [CancelReg]
     $links = array();
     $links[$NOT_REGISTERED] = $this->linkValues['register'];
     $links[$INCOMPLETE] = $this->linkValues['complete'];
     $links[$REGISTERED] = $this->linkValues['edit_reg'];
     // formerly 'cancel'
     // field column names to map to link name (i.e. filter by event to determine if link name should change based on reg status)
     $fieldNames = array();
     $fieldNames[$NOT_REGISTERED] = 'event_id';
     $fieldNames[$INCOMPLETE] = 'event_id';
     $fieldNames[$REGISTERED] = 'event_id';
     //  OLD:           $this->addLinkColumn( $title, $columnLabel, $link, $fieldName,  $useAlt, $alt_label, $link_alt, $fieldAlt);
     $this->addDynamicLinkColumn($title, $columnLabels, $links, $fieldNames);
     // link an array of filters to a particular link column
     $linkColumnFilter[$title] = $eventName_isReg_array;
     //          echo '<pre>'.print_r($linkColumnFilter, true).'</pre>';
     // store the page labels
     // NOTE: use this location to update any label tags ...
     // example:
     // $name = $user->getName();
     // $this->labels->setLabelTag( '[Title]', '[userName]', $name);
     $this->prepareTemplate($path);
     // set the filter list used to determine which events have 'register' links and which have 'cancel' links
     $this->template->set('linkColumnFilter', $linkColumnFilter);
     // store the Row Manager's XML Node Name
     $this->template->set('rowManagerXMLNodeName', RowManager_EventManager::XML_NODE_NAME);
     // store the primary key field name for the data being displayed
     $this->template->set('primaryKeyFieldName', 'event_id');
     /*
      *  Set up any additional data transfer to the Template here...
      */
     $this->template->set('disableHeading', true);
     $templateName = 'siteDataList.php';
     // if you are creating a custom template for this page then
     // replace $templateName with the following:
     //$templateName = 'page_HomePageEventList.php';
     return $this->template->fetch($templateName);
 }
 /**
  * function processData
  * <pre>
  * Processes the data for this form.
  * </pre>
  * @return [void]
  */
 function processData()
 {
     if ($this->shouldCancel == true) {
         $status = new RowManager_StatusManager();
         $status->setStatusDesc(RowManager_StatusManager::CANCELLED);
         $statusList = $status->getListIterator();
         $statusArray = $statusList->getDataList();
         reset($statusArray);
         // Assumption: status descriptions are unique
         $record = current($statusArray);
         $status_id = $record['status_id'];
         $reg_record['registration_status'] = $record['status_id'];
         // 	        echo "<pre>".print_r($reg_record,true)."</pre>";
         // 	        $list = $this->itemManager->getListIterator();
         //            echo "manager = <pre>".print_r($list->getDataList(),true)."</pre>";
         // change status of registration record
         $this->itemManager->setStatus($status_id);
         $this->itemManager->loadFromArray($reg_record);
         $this->itemManager->updateDBTable();
     }
 }