/** * function viewer_guid_conenct * <pre> * * If user has an exisitng intranet login ($new_viewer == false): * Given GUID and viewer_id, inject GUID into existing viewer * * If user never had an intranet login ($new_viewer == true): * Given a GUID, create new viewer, person, put into access group, etc. * * @param $guid [String] [user's GUID] * @param $viewer [Int] [user's view_id] * @param $new_viewer [BOO] [true when user never had an intranet login] * </pre> * @return [void] * * */ function viewer_guid_connect($guid, $viewer, $new_viewer) { if ($new_viewer) { // 1. create new viewer $viewerManager = new RowManager_ViewerManager(); $viewerManager->setGUID($guid); // GUID $viewerManager->setLanguageID(1); // english // TODO this value should not be hard-coded for the account group $viewerManager->setAccountGroupID(15); // the 'unknown' group $viewerManager->setIsActive(true); $viewerManager->createNewEntry(); $viewerID = $viewerManager->getID(); // get the ID of the newly created viewer // 2. put into the 'all' access group // PART A $viewerAccessGroupManager = new RowManager_ViewerAccessGroupManager(); $viewerAccessGroupManager->setViewerID($viewerID); $viewerAccessGroupManager->setAccessGroupID(ALL_ACCESS_GROUP); // add to the 'all' access group $viewerAccessGroupManager->createNewEntry(); // PART B $viewerAccessGroupManager = new RowManager_ViewerAccessGroupManager(); $viewerAccessGroupManager->setViewerID($viewerID); $viewerAccessGroupManager->setAccessGroupID(SPT_APPLICANT_ACCESS_GROUP); // add to the 'SPT-Student' access group $viewerAccessGroupManager->createNewEntry(); // 3. create new person (or grab person_id from existing record) $personManager = new RowManager_PersonManager(); $personManager->setFirstName(''); $personManager->setLastName(''); $personManager->setEmail(''); $personManager->setSortOrder('person_id'); $personManager->setAscDesc('DESC'); // sort by descending person IDs $personList = $personManager->getListIterator(); $personArray = $personList->getDataList(); //create new entry $personManager->createNewEntry(); $personID = $personManager->getID(); // get the ID of the newly created person // 4. create an access table entry for this (viewer,person) combo $accessManager = new RowManager_AccessManager(); $accessManager->setViewerID($viewerID); $accessManager->setPersonID($personID); $accessManager->createNewEntry(); } else { $viewerManager = new RowManager_ViewerManager($viewer); //echo ($viewerManager->getID()); $viewerManager->setGUID($guid); // GUID $viewerManager->updateDBTable(); } }
/** * 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; /* * 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); /* * Set up any additional data transfer to the Template here... */ //Display person names instead of person ids. $personManager = new RowManager_PersonManager(); $personManager->setSortOrder('person_lname'); $personManager->setLabelTemplateLastNameFirstName(); $personList = $personManager->getListIterator(); $personArray = $personList->getDropListArray(); $this->template->set('list_person_id', $personArray); // uncomment this line if you are creating a template for this page //$templateName = 'page_DeleteAdmin.php'; // otherwise use the generic site template $templateName = 'siteDeleteConf.php'; return $this->template->fetch($templateName); }
/** * 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 $title = $this->labels->getLabel('[Access]'); $columnLabel = $this->labels->getLabel('[View]'); $link = $this->linkValues['view']; $fieldName = 'staffschedule_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); $this->prepareTemplate($path); // store the Row Manager's XML Node Name $this->template->set('rowManagerXMLNodeName', MultiTableManager::XML_NODE_NAME); //RowManager_StaffScheduleManager // store the primary key field name for the data being displayed $this->template->set('primaryKeyFieldName', 'staffschedule_id'); // Get the real form name and add to page as sub-heading $form_name = ''; if ($this->formtype_id != '') { $formContext = new RowManager_StaffScheduleTypeManager($this->formtype_id); $form_name = $formContext->getFormName(); } $this->template->set('subheading', $form_name); /* * Set up any additional data transfer to the Template here... */ //TODO: replace this with a reference to a multi_lingual label constant array... $boolArray = array(); $boolArray['0'] = 'no'; $boolArray['1'] = 'yes'; $this->template->set('list_staffschedule_approved', $boolArray); $personManager = new RowManager_PersonManager(); $personManager->setSortOrder('person_lname'); $personManager->setLabelTemplateLastNameFirstName(); $personList = $personManager->getListIterator(); $personArray = $personList->getDropListArray(); $this->template->set('list_person_id', $personArray); $templateName = 'siteDataList.php'; // if you are creating a custom template for this page then // replace $templateName with the following: //$templateName = 'page_FormApprovalListing.php'; return $this->template->fetch($templateName); }
/** * 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->person_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_PersonManager::XML_NODE_NAME; $this->template->set('rowManagerXMLNodeName', $xmlNodeName); // store the primary key field name for the data being displayed $this->template->set('primaryKeyFieldName', 'person_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_PersonManager(); $dataAccessManager->setSortOrder($this->sortBy); // $this->dataList = new PersonList( $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_EditPeople.php'; return $this->template->fetch($templateName); }
/** * 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); $title = $this->labels->getLabel('[view_campuses]'); $columnLabel = $this->labels->getLabel('[view]'); $link = $this->linkValues['view']; $fieldName = 'admin_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); $this->prepareTemplate($path); // store the Row Manager's XML Node Name $this->template->set('rowManagerXMLNodeName', RowManager_AdminManager::XML_NODE_NAME); // store the primary key field name for the data being displayed $this->template->set('primaryKeyFieldName', 'admin_id'); /* * Set up any additional data transfer to the Template here... */ // This changes the person ids to the person's first name and last name. $personManager = new RowManager_PersonManager(); $personManager->setSortOrder('person_lname'); $personManager->setLabelTemplateLastNameFirstName(); $personList = $personManager->getListIterator(); $personArray = $personList->getDropListArray(); $this->template->set('list_person_id', $personArray); // priv list. $privManager = new RowManager_PrivManager(); $privManager->setSortOrder('priv_accesslevel'); $privList = $privManager->getListIterator(); $privArray = $privList->getDropListArray(); $this->template->set('list_priv_id', $privArray); $templateName = 'siteDataList.php'; // if you are creating a custom template for this page then // replace $templateName with the following: //$templateName = 'page_Admins.php'; return $this->template->fetch($templateName); }
/** * 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 page labels in XML format... // NOTE: use this location to update any label tags ... // $name = $user->getName(); // $this->labels->setLabelTag( '[Title]', '[userName]', $name); // NOTE: this parent method prepares the $this->template with the // common Form data. $this->prepareTemplate($path); /* * Form related Template variables: */ // store the button label $this->template->set('buttonText', $this->labels->getLabel('[Update]')); // Insert the date start/end values for the following date fields: // example: //$this->template->set( 'startYear_[fieldName]', 2000); //$this->template->set( 'endYear_[fieldName]', 2010); /* * Add any additional data required by the template here */ //priv list. $privManager = new RowManager_PrivManager(); $privManager->setSortOrder('priv_accesslevel'); $privList = $privManager->getListIterator(); $privArray = $privList->getDropListArray(); $this->template->set('list_priv_id', $privArray); //Person list. $personManager = new RowManager_PersonManager(); $personManager->setSortOrder('person_lname'); $personManager->setLabelTemplateLastNameFirstName(); $personList = $personManager->getListIterator(); $personArray = $personList->getDropListArray(); $this->template->set('list_person_id', $personArray); // uncomment this line if you are creating a template for this page //$templateName = 'page_AddAdmin.php'; // otherwise use the generic admin box template $templateName = 'siteFormSingle.php'; return $this->template->fetch($templateName); }
/** * 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]' ); if (!isset($this->linkLabels['cont'])) { $this->linkLabels['cont'] = $this->labels->getLabel('[Back]'); // [Continue] } // $this->linkLabels[ 'view' ] = 'new link label here'; $this->prepareTemplate($path); // Set form approval status message // $form_approved = "Approval Pending"; // if ($this->is_form_approved == true) // { // $form_approved = "Form Approved"; // } // $this->template->set('form_approval_msg', $form_approved ); // // Display message if form has just been submitted if ($this->form_submitted == true) { $statusMessage = 'Form information successfully submitted.'; $this->template->set('form_status_msg', $statusMessage); $this->form_submitted = false; } // Set the sub-page objects $this->template->set('basicStaffForm', $this->generateTopForm()); if ($this->has_activity_form == true) { $this->template->set('scheduledActivityForm', $this->generateBottomForm()); } // Set approval form information $is_approved = ''; $approved_by = ''; $last_change = ''; $approval_array = $this->listManager->getDataList(); reset($approval_array); foreach (array_keys($approval_array) as $k) { $record = current($approval_array); $approved = $record['staffschedule_approved']; if ($approved == '1') { $is_approved = 'CHECKED'; } $approved_by = $record['staffschedule_approvedby']; $last_change = $record['staffschedule_lastmodifiedbydirector']; $approval_notes = $record['staffschedule_approvalnotes']; next($approval_array); } $personManager = new RowManager_PersonManager($approved_by); $personManager->setSortOrder('person_lname'); $personManager->setLabelTemplateLastNameFirstName(); $approved_by = $personManager->getPersonFirstName() . ' ' . $personManager->getPersonLastName(); // $personList = $personManager->getListIterator( ); // $personArray = $personList->getDropListArray( ); // $this->template->set( 'list_approved_by', $personArray ); $this->template->set('approvalFormAction', $this->formAction); $this->template->set('is_approved', $is_approved); $this->template->set('approvalButtonText', 'Approve/Disapprove'); $this->template->set('approval_notes', $approval_notes); $this->template->set('director_field', 'Last Change By'); $this->template->set('approved_by', $approved_by); $this->template->set('time_field', 'Last Change At'); if ($last_change != '') { $date_regex = '/[2-9]([0-9]{3})\\-[0-9]{1,2}\\-[0-9]{1,2}/'; if (preg_match($date_regex, $last_change) >= 1) { $time = strtotime($last_change); $last_change = strftime("%d %b %Y %H:%M:%S", $time); } } $this->template->set('last_change', $last_change); // $this->template->set('last_change', $last_change); // 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', 'person_id'); // 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); // Get the real form name $form_name = ''; if ($this->form_id != '') { $formContext = new RowManager_StaffScheduleTypeManager($this->form_id); $form_name = $formContext->getFormName(); } // Get the person's name $person_name = ''; if ($this->person_id != '') { $personInfo = new RowManager_PersonManager($this->person_id); $person_name = $personInfo->getPersonFirstName() . ' ' . $personInfo->getPersonLastName(); } // $form_notice = 'Please note that the "Update" button only updates the top form.<br>The bottom form is updated via its own buttons/links.'; $this->template->set('heading', $form_name); $this->template->set('subheading', $person_name); // $this->template->set( 'formsNotice', $form_notice); $templateName = 'page_ApproveStaffSchedule.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); }
/** * function getHTML * <pre> * This method returns the HTML data generated by this object. * </pre> * @return [STRING] HTML Display data. * * ON JAN 2, 2008 Russ made two changes to this page to restore the original functionality... they are documented below. * ON JAN 8, 2008 Hobbe added conditional statements to allow registration record searches IF viewer has Reg. Sys. Super Admin privs. */ function getHTML() { // Uncomment the following line if you want to create a template // tailored for this page: $privManager = new PrivilegeManager($this->viewer->getID()); if ($privManager->isSuperAdmin() == true) { $path = SITE_PATH_TEMPLATES; } else { // Changed by RM from using the assignment below on Jan 2, 2008. $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->registration_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_RegistrationManager::XML_NODE_NAME; $this->template->set('rowManagerXMLNodeName', $xmlNodeName); // store the primary key field name for the data being displayed $this->template->set('primaryKeyFieldName', 'registration_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. if ($this->person_id != '') { $dataAccessManager = new RowManager_RegistrationManager(); $dataAccessManager->setPersonID($this->person_id); $dataAccessManager->setSortOrder($this->sortBy); // $this->dataList = new PriceRuleList( $this->sortBy ); $this->dataList = $dataAccessManager->getListIterator(); $this->template->setXML('dataList', $this->dataList->getXML()); } // else // { // $this->dataList = array(); // // $this->template->setXML( 'dataList', $this->dataList->getXML() ); // } /* * Add any additional data required by the template here */ $person = new RowManager_PersonManager(); $person->setLabelTemplateLastNameFirstName(); // $field->setPersonID( $this->person_id); $person->setSortOrder('person_lname, person_fname'); $personList = new ListIterator($person); $personArray = $personList->getDropListArray(); $this->template->set('list_person_id', $personArray); $notice = "<br><b>NOTE:</b> Duplicate names may appear if a person has multiple records."; $this->template->set('note_person_id', $notice); $event = new RowManager_EventManager(); // $field->setPersonID( $this->person_id); $eventList = new ListIterator($event); $eventArray = $eventList->getDropListArray(); $this->template->set('list_event_id', $eventArray); $status = new RowManager_StatusManager(); $statusList = new ListIterator($status); $statusArray = $statusList->getDropListArray(); $this->template->set('list_registration_status', $statusArray); // // $nameFields = 'person_lname,person_fname'; // $template = '[person_lname], [person_fname]'; // $this->dataManager->setLabelTemplate( $nameFields, $template ); if ($privManager->isSuperAdmin() == true) { $templateName = 'siteSearchFormDataList.php'; //'page_HrdbHome.php'; } else { // Changed by RM on Jan 2, 2008 - We can't have just anybody being able to access this data. $templateName = 'page_HrdbHome.php'; } // if you are creating a custom template for this page then // replace $templateName with the following: //$templateName = 'page_EditPriceRules.php'; return $this->template->fetch($templateName); }
/** * function getHTML * <pre> * This method returns the HTML data generated by this object. * </pre> * @return [STRING] HTML Display data. */ function getHTML() { // initialize the variable storing process report data $reportDataDump = ''; $BR = '<BR>'; $HR = '<HR>'; // Make a new Template object $path = $this->pathModuleRoot . 'templates/'; // $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['cont'] = $this->labels->getLabel('[GoBack]'); // 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); $this->prepareTemplate($path); /** Get list of unique triples of first name, last name, and e-mail address **/ // $allPeople = array(); // NOT USED BECAUSE WE HAVE NESTED LOOP INSTEAD OF MULTIPLE LOOPS $personRecords = new MultiTableManager(); $personRecords->addRowManager($this->person_manager); $personRecords->setSortOrder('person_lname'); // echo 'filters = '.$this->filter_fname.', '.$this->filter_lname.', '.$this->filter_email; /**** DATA FILTERS: USED TO ENSURE 60 SEC TIME-OUT IS NOT VIOLATED ****/ $personRecords->addSearchCondition("person_fname like '" . $this->filter_fname . "%'"); $personRecords->addSearchCondition("person_lname like '" . $this->filter_lname . "%'"); $personRecords->addSearchCondition("person_email like '" . $this->filter_email . "%'"); // use GROUP BY to easily enforce distinct triplets of (person_fname, person_lname, person_email) $groupBy = "person_fname,person_lname,person_email"; $personRecords->setGroupBy($groupBy); $personData = $personRecords->getListIterator(); $personDataArray = $personData->getDataList(); /** Go through the list of names 1 by 1, running another query to find if duplicates exist **/ reset($personDataArray); foreach (array_keys($personDataArray) as $k) { $savedPersonID = -1; // the only person ID left in the database for this individual $person = current($personDataArray); $person_fname = $person['person_fname']; $person_lname = $person['person_lname']; $person_email = $person['person_email']; $reportDataDump .= 'Unique person record tuple:' . $BR . ' First Name = ' . $person_fname . ', Last Name = ' . $person_lname . ', E-mail = ' . $person_email . $BR . $BR; // echo "PERSON NAME: ".$person_fname." ".$person_lname; // echo "PERSON: <pre>".print_r($person,true)."</pre>"; // search for a particular person to see if duplicate records exist $indiv_person_manager = new RowManager_PersonManager(); $indiv_person_manager->setFirstName(addslashes($person_fname)); // use addslashes to escape special chars in string $indiv_person_manager->setLastName(addslashes($person_lname)); $indiv_person_manager->setEmail(addslashes($person_email)); $indiv_person_manager->setSortOrder('person_id'); $indiv_person_manager->setAscDesc('DESC'); // sort by descending person IDs $indivData = $indiv_person_manager->getListIterator(); $indivDataArray = $indivData->getDataList(); // echo " INDIV COUNT: ".count($indivDataArray)."<br><br>"; // echo "INDIV RECORDS: <pre>".print_r($indivDataArray,true)."</pre>"; $person_ids_list = ''; //return all the person's data into array (key = person_id) of arrays (and store total data stored?) if (isset($indivDataArray)) { if (count($indivDataArray) == 0) { echo "ERROR: person was found earlier and now NO records are found!"; } else { if (count($indivDataArray) == 1) { // echo "GREAT! This person only has one record."; reset($indivDataArray); $record = current($indivDataArray); $savedPersonID = $record['person_id']; $person_ids_list = $savedPersonID; $reportDataDump .= 'Unique person id found for tuple: ' . $savedPersonID . $BR . $BR; } else { if (count($indivDataArray) > 1) { // get the person IDs for this individual reset($indivDataArray); foreach (array_keys($indivDataArray) as $l) { $record = current($indivDataArray); $person_ids_list .= $record['person_id']; $person_ids_list .= ','; next($indivDataArray); } $person_ids_list = substr($person_ids_list, 0, -1); // remove final comma $reportDataDump .= 'Multiple person ids found for tuple: ' . $person_ids_list . $BR . $BR; } } } // Search for duplicate person-related entries - for 1 or more person_ids found for current person if ($person_ids_list != '') { // echo "<br> person ids list: ".$person_ids_list."<br>"; // $person_ids_array = explode($person_ids_list,','); // check access table using all the found person IDs - retrieve viewer ids with person id as key $foundViewerIDs = $this->getAccessRecords($person_ids_list); // can safely assume array ISSET // echo 'found viewer ids= <pre>'.print_r($foundViewerIDs,true).'</pre>'; /** IF 0 access table records were found: **/ if (count($foundViewerIDs) == 0) { // TODO?: notify admin that this/these person record(s) require a viewer account // Store the active (latest) person_id in special variable reset($indivDataArray); $savedPersonID = key($indivDataArray); // recall that person_ids are sorted in descending order } else { if (count($foundViewerIDs) >= 1) { // echo "<br>found viewer IDs: <pre>".print_r($foundViewerIDs, true)."</pre>"; /** Get the associated viewer_id with the most recent login date **/ // $viewers = new RowManager_ViewerManager(); // $viewer_ids = ''; // reset($foundViewerIDs); // foreach (array_keys($foundViewerIDs) as $key) // { // // $record = current($foundViewerIDs); // $viewer_ids .= $key.','; //$record // // next($foundViewerIDs); // } // $viewer_ids = substr($viewer_ids, 0, -1); // remove final comma // // echo 'viewer_ids list = '.$viewer_ids.'<br>'; // $viewers->addSearchCondition("viewer_id in (".$viewer_ids.")"); // // $viewersData = $viewers->getListIterator(); // $viewersArray = $viewersData->getDataList(); // // // echo 'viewers array data = <pre>'.print_r($viewersArray,true).'</pre>'; // // $mostRecentDate = '0000-00-00'; // $mostRecentViewer = -1; // reset($viewersArray); // foreach(array_keys($viewersArray) as $l) // { // $record = current($viewersArray); // $foundDate = $record['viewer_lastLogin']; // $viewerID = $record['viewer_id']; // // // update most recent date if a more recent login date was found // if ($foundDate > $mostRecentDate) // { // $mostRecentDate = $foundDate; // $mostRecentViewer = $viewerID; // set viewer_id to use // } // } // TODO: add loop here to check if all $foundViewerIDs (from access table) are in viewers table // <loop> // if (in_array($foundViewerIDs[index], array_keys($viewersArray))) // delete $foundViewerIDs[index] from access table // <end-loop> // echo 'most recent viewer id = '.$mostRecentViewer; // echo 'viewer ids from list = <pre>'.print_r(array_keys($foundViewerIDs),true).'</pre>'; /** store the active (access table) person_id in special variable **/ reset($foundViewerIDs); // // (NEW) == person_id associated with the viewer_id having the most recent login date // // ONLY IN THE CASE WHERE PERSON HAS MORE THAN 1 VIEWER_ID // if (($mostRecentViewer != -1)&&(count($viewersArray) > 1)) // { // $temp_viewerIDs = array_keys($foundViewerIDs); // gets the viewer ids // $temp_personIDs = array_values($foundViewerIDs); // gets the person ids // $index = array_search($mostRecentViewer, $temp_viewerIDs); // get index having most recent viewer_id // // $savedPersonID = $temp_personIDs[$index]; // $reportDataDump .= 'Person ID of the record to keep: '.$savedPersonID.' (associated with most recent login)'.$BR.$BR; // } // else // FORMERLY: (OLD) == latest viewer-associated person ID, since array is ordered by person_id (DESC) // { $personIDs = explode(',', $person_ids_list); $savedPersonID = current($personIDs); //current($foundViewerIDs); $reportDataDump .= 'Person ID of the record to keep: ' . $savedPersonID . ' (associated with the most recent person record)' . $BR . $BR; // } // echo 'latest viewer ids = <pre>'.print_r($foundViewerIDs,true).'</pre>'; // echo 'saved person ID = '.$savedPersonID; $reportDataDump .= 'Changes made to <b>cim_hrdb_access table</b>: ' . $BR; /*** update the access table records to only use latest person ID **/ foreach (array_values($foundViewerIDs) as $person_id) { $viewer_id = key($foundViewerIDs); // echo 'viewer_id = '.$viewer_id; // only update the access table record if it needs a different person_id if ($person_id != $savedPersonID) { // get access ID(s) for the record to change $accessManager = new RowManager_AccessManager(); $accessManager->setViewerID($viewer_id); $accessManager->setPersonID(current($foundViewerIDs)); // or just use $person_id $accessData = $accessManager->getListIterator(); $accessDataArray = $accessData->getDataList(); // echo 'access data array = <pre>'.print_r($accessDataArray,true).'</pre>'; reset($accessDataArray); // deal with the unlikely case that we have redundant viewerID-personID records foreach (array_keys($accessDataArray) as $key) { $record = current($accessDataArray); $accessID = $record['access_id']; // set the values to set in the record (using 'access_id' as search key) $updateValues = array(); $updateValues['access_id'] = $accessID; $updateValues['viewer_id'] = $viewer_id; $updateValues['person_id'] = $savedPersonID; // only data that is changed $reportDataDump .= 'Updating person_id ' . $person_id . ' to be ' . $savedPersonID . $BR . $BR; $accessManager->loadFromArray($updateValues); $accessManager->updateDBTable(); next($accessDataArray); } } $id = next($foundViewerIDs); // person_id if ($id === FALSE) { break; // no valid data found so break out of the loop } } } } /** <end> access table update **/ $baseRecord = $indivDataArray[$savedPersonID]; // echo "<br>base record: <pre>".print_r($baseRecord,true)."</pre><br>"; $flagArray = $this->checkPersonRecordFields($baseRecord); // echo "<br>flag array: <pre>".print_r($flagArray,true)."</pre><br>"; // Add data from other records to the stored latest person record, if required // (i.e. if latest data misses phone #, etc) reset($indivDataArray); foreach (array_keys($indivDataArray) as $id) { $record = current($indivDataArray); $personID = $record['person_id']; if ($personID != $savedPersonID) { $personUpdater = new RowManager_PersonManager(); $personUpdater->setPersonID($savedPersonID); $updateValues = array(); $updateValues['person_id'] = $savedPersonID; // just to make sure... $nextFlagArray = $this->checkPersonRecordFields($indivDataArray[$personID]); // echo "<br>next flag array: <pre>".print_r($nextFlagArray,true)."</pre><br>"; reset($flagArray); foreach (array_keys($flagArray) as $m) { // if field is empty in active record then // replace with most recent value - if one exists // (since we are going through a list of person ids // in descending order) $flag = current($flagArray); if ($flag == '0') { $fieldName = key($flagArray); // check if the replacement person record has a non-empty field if ($nextFlagArray[$fieldName] == '1') { $updateValues[$fieldName] = $record[$fieldName]; $flagArray[$fieldName] = '1'; // prevents less-recent person data to overwrite what was just written } } next($flagArray); } // echo "<br>update values: <pre>".print_r($updateValues,true)."</pre><br>"; // update the active person record (in database) if (count($updateValues) > 1) { $reportDataDump .= 'Adding the following data to our preferred <b>cim_hrdb_person</b> record (using given person_id): '; $reportDataDump .= '<pre>' . print_r($updateValues, true) . '</pre>' . $BR . $BR; $personUpdater->loadFromArray($updateValues); $personUpdater->updateDBTable(); } } next($indivDataArray); } } // end "if >1 person id found for the person data" /** Go through various tables and clean out or update records related to the current person **/ // Update and clean-up the Person-Year table (cim_hrdb_person_year) // Step 1) Find the information stored for the active person_id $personYearArray = array(); $person_year_manager = new RowManager_PersonYearManager(); $person_year_manager->setPersonID($savedPersonID); $person_year_manager->setSortOrder('personyear_id'); $person_year_manager->setAscDesc('DESC'); // sort by descending personyear IDs // echo "<BR>".$savedPersonID.","; $personYearData = $person_year_manager->getListIterator(); $person_year_array = $personYearData->getDataList(); reset($person_year_array); foreach (array_keys($person_year_array) as $key) { $record = current($person_year_array); $person_year_id = $record['personyear_id']; $year_id = $record['year_id']; $personYearArray[$person_year_id] = $year_id; // store person_id associated with the person_year_id next($person_year_array); } // if (count($person_year_array) > 0) // { // echo "<br>Years for active person_id ".$savedPersonID.": <pre>".print_r($personYearArray,true)."</pre><br>"; // } // echo "Person IDs list: ".$person_ids_list."<br>"; $reportDataDump .= 'Changes made to <b>cim_hrdb_person_year table</b>: ' . $BR; // remove all but the most recent person-year record (associated with active person id) if (count($personYearArray) > 1) { reset($personYearArray); $person_year_id = key($personYearArray); $reportDataDump .= 'Saving the first person year record associated with person ID ' . $savedPersonID . $BR . $BR; next($personYearArray); // keep the first record (most recent personyear_id foreach (array_keys($personYearArray) as $m) { $record = current($personYearArray); $personYearID = key($personYearArray); // echo "REMOVE person-year entry for person_id = ".$savedPersonID." using key = ".key($personYearArray); if (isset($personYearID) && $personYearID != '' && $personYearID > 0) { $reportDataDump .= 'Deleting redundant person year record having year ID ' . $record . $BR . $BR; $personYearUpdater = new RowManager_PersonYearManager($personYearID); $personYearUpdater->deleteEntry(); } next($personYearArray); } } // Step 2) Update the records having the non-active person ids for this person $person_year_manager2 = new RowManager_PersonYearManager(); $person_year_manager2->addSearchCondition('person_id in (' . $person_ids_list . ')'); $person_year_manager2->setSortOrder('person_id'); $person_year_manager2->setAscDesc('DESC'); // sort by descending person IDs $personYearData2 = $person_year_manager2->getListIterator(); $person_year_array2 = $personYearData2->getDataList(); // echo "<br>Years for ALL person_ids: <pre>".print_r($person_year_array2,true)."</pre><br>"; // If no record was found for the active person record - then set flag for updating $updated = true; if (count($personYearArray) < 1) { $updated = false; } reset($person_year_array2); $j = 0; foreach (array_keys($person_year_array2) as $l) { $record = current($person_year_array2); $personID = $record['person_id']; // We ignore records with the active person id - since we dealt with those redundancies already if ($personID != $savedPersonID) { // echo "FOUND person ".$personID; $person_year_id = $record['personyear_id']; $personYearUpdater = new RowManager_PersonYearManager($person_year_id); // $personYearUpdater->setPersonYearID($person_year_id); $person_id = $record['person_id']; $year_id = $record['year_id']; // check to see if identical information was already stored under active person_id // if (in_array($year_id, $personYearArray)) // { if ($updated == false) { $updateValues = array(); $updateValues['person_id'] = $savedPersonID; // just to make sure... $updateValues['year_id'] = $year_id; // echo "<br>update values to ".$savedPersonID." from ".$person_id.": <pre>".print_r($person_year_array2,true)."</pre><br>"; // update the person ID for a person-DG record (in database) $personYearUpdater->loadFromArray($updateValues); $personYearUpdater->updateDBTable(); $updated = true; // prevents the new data from being overwritten with older data (and allows better efficiency) $reportDataDump .= 'No record found for person ID ' . $savedPersonID . ', updating person ID for person ID ' . $person_id . $BR . $BR; } else { // echo "<br>TO BE DELETED FROM cim_hrdb_person_year: person_id = ".$personID.", year = ".$year_id."<br>"; $reportDataDump .= 'Deleting record for alternative person ID ' . $person_id . $BR . $BR; $personYearUpdater->deleteEntry(); } // else // add person-year data from other person-id-linked records // { // $updateValues = array(); // $updateValues['person_id'] = $savedPersonID; // just to make sure... // $updateValues['year_id'] = $year_id; // // echo "<br>update values to ".$savedPersonID." from ".$person_id.": <pre>".print_r($person_year_array2,true)."</pre><br>"; // // // update the person ID for a person-DG record (in database) // $personYearUpdater->loadFromArray( $updateValues ); // $personYearUpdater->updateDBTable(); // } } next($person_year_array2); } // Update the Emergency Contact table (cim_hrdb_emerg) // Step 1) Find the information stored for the active person_id $emergInfoArray = array(); $emerg_info_manager = new RowManager_EmergencyInfoManager(); $emerg_info_manager->setPersonID($savedPersonID); $emerg_info_manager->setSortOrder('emerg_id'); $emerg_info_manager->setAscDesc('DESC'); // sort by descending emerg IDs // echo "<BR>".$savedPersonID.","; $emergInfoData = $emerg_info_manager->getListIterator(); $emerg_info_array = $emergInfoData->getDataList(); reset($emerg_info_array); foreach (array_keys($emerg_info_array) as $l) { $record = current($emerg_info_array); $emerg_id = $record['emerg_id']; $emerg_info = array(); $fields = page_PersonRecordCleanUp::EMERG_RECORD_FIELDS; $fieldsArray = explode(",", $fields); // store the emergency info values in an array reset($fieldsArray); foreach (array_keys($fieldsArray) as $k) { $fieldName = current($fieldsArray); $emerg_info[$fieldName] = $record[$fieldName]; next($fieldsArray); } // $emerg_info['person_id'] = $record['person_id']; // $emerg_info['emerg_passportNum'] = $record['emerg_passportNum']; // $emerg_info['emerg_passportOrigin'] = $record['emerg_passportOrigin']; // $emerg_info['emerg_passportExpiry'] = $record['emerg_passportExpiry']; // $emerg_info['emerg_contactName'] = $record['emerg_contactName']; // $emerg_info['emerg_contactRship'] = $record['emerg_contactRship']; // $emerg_info['emerg_contactHome'] = $record['emerg_contactHome']; // $emerg_info['emerg_contactWork'] = $record['emerg_contactWork']; // $emerg_info['emerg_contactMobile'] = $record['emerg_contactMobile']; // $emerg_info['emerg_contactEmail'] = $record['emerg_contactEmail']; // $emerg_info['emerg_birthdate'] = $record['emerg_birthdate']; // $emerg_info['emerg_medicalNotes'] = $record['emerg_medicalNotes']; // store array of record values in array with emerg_id as key $emergInfoArray[$emerg_id] = $emerg_info; next($emerg_info_array); } // TEST CONDITION // if (count($emerg_info_array) > 0) // { // echo "<br>Emergency info for active person_id ".$savedPersonID.": <pre>".print_r($emergInfoArray,true)."</pre><br>"; // } $reportDataDump .= 'Changes made to <b>cim_hrdb_emerg table</b>: ' . $BR; // remove all but the most recent emergency info record (associated with active person id) if (count($emergInfoArray) > 1) { reset($emergInfoArray); $reportDataDump .= 'Saving the emergency contact record associated with person ID ' . $savedPersonID . $BR . $BR; next($emergInfoArray); // keep the first record (most recent emerg_id) foreach (array_keys($emergInfoArray) as $m) { $record = current($emergInfoArray); $emergID = key($emergInfoArray); // echo "REMOVE person-emerg entry for person_id = ".$savedPersonID." using key = ".key($emergInfoArray); if (isset($emergID) && $emergID != '') { $emergUpdater = new RowManager_EmergencyInfoManager($emergID); $emergUpdater->deleteEntry(); $reportDataDump .= 'Deleting redundant emergency contact record having emergency ID ' . $emergID . $BR . $BR; } next($emergInfoArray); } } // Step 2) Update the emergency contact records having the non-active person ids for this person $emerg_info_manager2 = new RowManager_EmergencyInfoManager(); $emerg_info_manager2->addSearchCondition('person_id in (' . $person_ids_list . ')'); $emerg_info_manager2->setSortOrder('person_id'); $emerg_info_manager2->setAscDesc('DESC'); // sort by descending person IDs // echo "candidate person ids = ".$person_ids_list."<br>"; $emergInfoData2 = $emerg_info_manager2->getListIterator(); $emerg_info_array2 = $emergInfoData2->getDataList(); // echo "<br>Contact data for ALL person_ids: <pre>".print_r($emerg_info_array2,true)."</pre><br>"; $updateValues = array(); // $updateValues = $this->initRecord(page_PersonRecordCleanUp::EMERG_RECORD_FIELDS); // $updateID = -1; // // If no record was found for the active person record - then set flag for updating // $updated = true; // if (count($personYearArray) < 1) // { // $updated = false; // } reset($emerg_info_array2); foreach (array_keys($emerg_info_array2) as $l) { $record = current($emerg_info_array2); $personID = $record['person_id']; $contactName = $record['emerg_contactName']; if ($personID != $savedPersonID) { $emerg_id = $record['emerg_id']; $personEmergUpdater = new RowManager_EmergencyInfoManager($emerg_id); // $personEmergUpdater->setPersonEmergID($emerg_id); $person_id = $record['person_id']; if (count($emergInfoArray) < 1) { // update the last-updated record with further information (if there was a last update) // if ($updateID != -1) // { // $personEmergUpdater = new RowManager_EmergencyInfoManager($updateID); // } // TODO: reactivate the above and then delete all entries but the first totally updated record $record['person_id'] = $savedPersonID; // require this to actually change person ID // // determine if some fields have been replaced previously // $flagArray = $this->checkRecordFields($updateValues, page_PersonRecordCleanUp::EMERG_RECORD_FIELDS); // // reset($flagArray); // foreach(array_keys($flagArray) as $m) // { // // if field is empty in update record then // // replace with most recent value - if one exists // // (since we are going through a list of person ids // // in descending order) // $flag = current($flagArray); // if ($flag == '0') // { // $fieldName = key($flagArray); // $updateValues[$fieldName] = $record[$fieldName]; // update the array (or replace empty with empty) // } // next($flagArray); // } // (BELOW) REMOVE WHEN USING ABOVE: $updateValues['person_id'] = $savedPersonID; // update the person ID for an emergency contact record (in database) $personEmergUpdater->loadFromArray($updateValues); $personEmergUpdater->updateDBTable(); // $updateID = $emerg_id; // TODO: ensure that we end up with only ONE record that is updated with latest data $reportDataDump .= 'No record found for person ID ' . $savedPersonID . ', updating person ID for person ID ' . $person_id . $BR . $BR; } else { $contact_name = $record['emerg_contactHome']; // echo "<br>TO BE DELETED FROM cim_hrdb_emerg: person_id = ".$person_id.", contactName = ".$contact_name."<br>"; $reportDataDump .= 'Deleting record for alternative person ID ' . $person_id . ' having contact name = ' . $contactName . $BR . $BR; $personEmergUpdater->deleteEntry(); } } next($emerg_info_array2); } /**** TODO: have code to deal with redundant person ids in 'cim_hrdb_admin' (LOW-PRIORITY DUE TO SMALL SIZE OF TABLE) **/ /*** Update the Campus Assignment table (cim_hrdb_assignment) **/ // Step 1) Find the information stored for the active person_id $campusAssignArray = array(); $campus_assign_manager = new RowManager_AssignmentsManager(); $campus_assign_manager->setPersonID($savedPersonID); $campus_assign_manager->setSortOrder('assignment_id'); $campus_assign_manager->setAscDesc('DESC'); // sort by descending assignment IDs $campusAssignData = $campus_assign_manager->getListIterator(); $campus_assign_array = $campusAssignData->getDataList(); reset($campus_assign_array); foreach (array_keys($campus_assign_array) as $id) { $record = current($campus_assign_array); $assign_id = $record['assignment_id']; $assignment_info = array(); $fields = page_PersonRecordCleanUp::ASSIGNMENT_RECORD_FIELDS; $fieldsArray = explode(",", $fields); // store the campus assignment values in an array reset($fieldsArray); foreach (array_keys($fieldsArray) as $k) { $fieldName = current($fieldsArray); $assignment_info[$fieldName] = $record[$fieldName]; next($fieldsArray); } // store array of record values in array with assign_id as key $campusAssignArray[$assign_id] = $assignment_info; next($campus_assign_array); } // TEST CONDITION // if (count($campus_assign_array) > 0) // { // echo "<br>Campus assignment info for active person_id ".$savedPersonID.": <pre>".print_r($campusAssignArray,true)."</pre><br>"; // } $reportDataDump .= 'Changes made to <b>cim_hrdb_assignment table</b>: ' . $BR; // TODO??: remove all but the most recent campus assignment record (associated with active person id) // REMEMBER: a student may be an alumni of one school or attend two schools at once... if (count($campusAssignArray) > 1) { $campus_ids_list = array(); $idx = 0; reset($campusAssignArray); $row = current($campusAssignArray); $campus_ids_list[$idx++] = $row['campus_id']; next($campusAssignArray); // keep the first record (most recent assign_id) foreach (array_keys($campusAssignArray) as $m) { $record = current($campusAssignArray); $assignID = key($campusAssignArray); // echo "REMOVE person-campus entry for person_id = ".$savedPersonID." using key = ".key($campusAssignArray); if (isset($assignID) && $assignID != '') { // remove entries having a campus_id already stored for the active person record if (in_array($record['campus_id'], $campus_ids_list)) { $assignUpdater = new RowManager_AssignmentsManager($assignID); $assignUpdater->deleteEntry(); $reportDataDump .= 'Deleting redundant campus assignment record having campus ID ' . $record['campus_id'] . $BR . $BR; } else { $campus_ids_list[$idx++] = $record['campus_id']; } } next($campusAssignArray); } } // Step 2) Update the campus assignment records having the non-active person ids for this person $campus_assign_manager2 = new RowManager_AssignmentsManager(); $campus_assign_manager2->addSearchCondition('person_id in (' . $person_ids_list . ')'); $campus_assign_manager2->setSortOrder('person_id'); $campus_assign_manager2->setAscDesc('DESC'); // sort by descending person IDs // echo "candidate person ids = ".$person_ids_list."<br>"; $campusAssignData2 = $campus_assign_manager2->getListIterator(); $campus_assign_array2 = $campusAssignData2->getDataList(); // echo "<br>Contact data for ALL person_ids: <pre>".print_r($emerg_info_array2,true)."</pre><br>"; $campusIDs = array(); $idx = 0; reset($campus_assign_array2); foreach (array_keys($campus_assign_array2) as $l) { $record = current($campus_assign_array2); $personID = $record['person_id']; if ($personID != $savedPersonID) { // echo "FOUND person ".$personID; $assignment_id = $record['assignment_id']; $campus_id = $record['campus_id']; $personAssignmentUpdater = new RowManager_AssignmentsManager($assignment_id); // $personEmergUpdater->setPersonEmergID($emerg_id); $person_id = $record['person_id']; if (count($campusAssignArray) < 1) { $record['person_id'] = $savedPersonID; // require this to actually change person ID // only create a new record with active person id if the campus ID not associated with the person yet if (!in_array($campus_id, $campusIDs)) { // update the person ID for an campus assignment record (in database) $updateValues = array(); $updateValues['person_id'] = $savedPersonID; $personAssignmentUpdater->loadFromArray($updateValues); $personAssignmentUpdater->updateDBTable(); $reportDataDump .= 'No record found for person ID ' . $savedPersonID . ' (with campus ID ' . $campus_id . '),<br>'; $reportDataDump .= 'updating person ID for person ID ' . $person_id . $BR . $BR; $campusIDs[$idx++] = $campus_id; } else { // echo "<br>Delete op #1."; $personAssignmentUpdater->deleteEntry(); $reportDataDump .= 'Deleting record for alternative person ID ' . $person_id . $BR . $BR; } } else { // echo "<br>TO BE DELETED FROM cim_hrdb_emerg: person_id = ".$person_id.", campus_id = ".$campus_id."<br>"; $personAssignmentUpdater->deleteEntry(); $reportDataDump .= 'Deleting record for alternative person ID ' . $person_id . $BR . $BR; } } next($campus_assign_array2); } /*** Update the Registrations table (cim_reg_registration) **/ /** NOTE: Currenlty only use step 2, which simply replace associated person IDs with active person ID **/ // Step 1) Find the information stored for the active person_id // $regRecordsArray = array(); // $idx = 0; // // $registration_manager = new RowManager_RegistrationManager(); // $registration_manager->setPersonID($savedPersonID); // $registration_manager->setSortOrder( 'registration_id' ); // $registration_manager->setAscDesc( 'DESC' ); // sort by descending registration IDs // // // echo "<BR>".$savedPersonID.","; // $registrationData = $registration_manager->getListIterator(); // $regs_array = $registrationData->getDataList(); // reset($regs_array); // foreach(array_keys($regs_array) as $id) // { // $record = current($regs_array); // // $reg_id = $record['registration_id']; // // $registration_info = array(); // // // $fields = page_PersonRecordCleanUp::REGISTRATION_RECORD_FIELDS; // // $fieldsArray = explode(",",$fields); // // // // // store the campus assignment values in an array // // reset($fieldsArray); // // foreach(array_keys($fieldsArray) as $k) // // { // // $fieldName = current($fieldsArray); // // // // $registration_info[$fieldName] = $record[$fieldName]; // // // // next($fieldsArray); // // } // // // store array of record values in array with assign_id as key // // $regRecordsArray[$reg_id] = $registration_info; // $regRecordsArray[$idx++] = $reg_id; // // next($regs_array); // } // // // TEST CONDITION // if (count($regs_array) > 0) // { // echo "<br>Registration ids for active person_id ".$savedPersonID.": <pre>".print_r($regRecordsArray,true)."</pre><br>"; // } // TODO??: convert the code below to delete registration records that appear under same person_id (obviously with same event_id) // if (count($regRecordsArray) > 1) // remove ONLY records with redundant person-campus pairs // { // $campus_ids_list = array(); // $idx = 0; // reset($campusAssignArray); // $row = current($campusAssignArray); // $campus_ids_list[$idx++] = $row['campus_id']; // next($campusAssignArray); // keep the first record (most recent emerg_id) // // foreach(array_keys($campusAssignArray) as $m) // { // $record = current($campusAssignArray); // // $assignID = key($campusAssignArray); // // // echo "REMOVE person-campus entry for person_id = ".$savedPersonID." using key = ".key($campusAssignArray); // if ((isset($assignID))&&($assignID != '')) // { // // remove entries having a campus_id already stored for the active person record // if (in_array($record['campus_id'], $campus_ids_list)) // { // $assignUpdater = new RowManager_AssignmentsManager($assignID); // $assignUpdater->deleteEntry(); // } // else // store campus_id so as to remove any other records with this campus_id // { // $campus_ids_list[$idx++] = $record['campus_id']; // } // } // // next($campusAssignArray); // } // // } $reportDataDump .= 'Changes made to <b>cim_reg_registration table</b>: ' . $BR; // Step 2) Update the registration records having the non-active person ids for this person (TODO: work from here) $registration_manager2 = new RowManager_RegistrationManager(); $registration_manager2->addSearchCondition('person_id in (' . $person_ids_list . ')'); $registration_manager2->setSortOrder('person_id'); $registration_manager2->setAscDesc('DESC'); // sort by descending person IDs // echo "candidate person ids = ".$person_ids_list."<br>"; $registrationData2 = $registration_manager2->getListIterator(); $registration_array2 = $registrationData2->getDataList(); // echo "<br>Contact data for ALL person_ids: <pre>".print_r($emerg_info_array2,true)."</pre><br>"; // $eventIDs = array(); // $idx = 0; reset($registration_array2); foreach (array_keys($registration_array2) as $key) { $record = current($registration_array2); $personID = $record['person_id']; if ($personID != $savedPersonID) { // echo "FOUND person ".$personID; $registration_id = $record['registration_id']; // $event_id = $record['event_id']; $regRecordUpdater = new RowManager_RegistrationManager($registration_id); // $personEmergUpdater->setPersonEmergID($emerg_id); // if (count($regRecordsArray) < 1) // if active person ID doesn't have record yet, then update older record with active person ID // { // $record['person_id'] = $savedPersonID; // require this to actually change person ID // // only create a new record with active person id if the event_id not associated with the person yet // if (!in_array($event_id, $eventIDs)) // { // update the person ID for an campus assignment record (in database) $updateValues = array(); $updateValues['person_id'] = $savedPersonID; $regRecordUpdater->loadFromArray($updateValues); $regRecordUpdater->updateDBTable(); $reportDataDump .= 'Found registration record for alternative ID of person ID ' . $savedPersonID . ',' . $BR; $reportDataDump .= 'updating person ID for person ID ' . $personID . $BR . $BR; // $eventIDs[$idx++] = $event_id; // } // else // { // echo "<br>Delete op #1."; // $regRecordUpdater->deleteEntry(); // } // } // else // { // echo "<br>TO BE DELETED FROM cim_reg_registration: person_id = ".$personID.", event_id = ".$event_id."<br>"; // $regRecordUpdater->deleteEntry(); // } } next($registration_array2); } /*** Update the Staff table (cim_hrdb_staff) **/ // Step 1) Find the information stored for the active person_id $staff_manager = new RowManager_StaffManager(); $staff_manager->setPersonID($savedPersonID); $staff_manager->setSortOrder('staff_id'); $staff_manager->setAscDesc('DESC'); // sort by descending assignment IDs // echo "<BR>".$savedPersonID.","; $staffData = $staff_manager->getListIterator(); $staff_array = $staffData->getDataList(); // reset($staff_array); // foreach(array_keys($staff_array) as $id) // { // $record = current($staff_array); // // $staff_id = $record['staff_id']; // $staffRecordsArray[$idx++] = $staff_id; // // next($staff_array); // } // TEST CONDITION // if (count($staff_array) > 0) // { // echo "<br>Staff info for active person_id ".$savedPersonID.": <pre>".print_r($staff_array,true)."</pre><br>"; // } $reportDataDump .= 'Changes made to <b>cim_hrdb_staff table</b>: ' . $BR; // Step 2) Remove all but one of the staff records if (count($staff_array) > 1) { reset($staff_array); next($staff_array); // keep the first record (most recent staff_id for active person) $reportDataDump .= 'Saving the first staff record associated with person ID ' . $savedPersonID . $BR . $BR; // echo 'staff array = <pre>'.print_r($staff_array,true).'</pre>'; foreach (array_keys($staff_array) as $m) { $record = current($staff_array); $staffID = key($staff_array); // remove redundant entry $staffUpdater = new RowManager_StaffManager($staffID); $staffUpdater->deleteEntry(); $reportDataDump .= 'Deleting redundant staff record having staff ID ' . $staffID . $BR . $BR; $id = next($staff_array); // staff ID if ($id === FALSE) { break; // no valid data found so break out of the loop } } } // Step 3) Delete the staff records having the non-active person ids for this person $staff_manager2 = new RowManager_StaffManager(); $staff_manager2->addSearchCondition('person_id in (' . $person_ids_list . ')'); $staff_manager2->setSortOrder('person_id'); $staff_manager2->setAscDesc('DESC'); // sort by descending person IDs $staffData2 = $staff_manager2->getListIterator(); $staff_array2 = $staffData2->getDataList(); $toUpdate = false; if (count($staff_array) < 1) { $toUpdate = true; } reset($staff_array2); foreach (array_keys($staff_array2) as $l) { $record = current($staff_array2); $personID = $record['person_id']; if ($personID != $savedPersonID) { $staff_id = $record['staff_id']; $staffUpdater = new RowManager_StaffManager($staff_id); if ($toUpdate == true) { // $record['person_id'] = $savedPersonID; // require this to actually change person ID // update the person ID for a staff record (in database) $updateValues = array(); $updateValues['person_id'] = $savedPersonID; $staffUpdater->loadFromArray($updateValues); $staffUpdater->updateDBTable(); $toUpdate = false; $reportDataDump .= 'No record found for person ID ' . $savedPersonID . ', updating person ID for person ID ' . $personID . $BR . $BR; } else { // echo "<br>TO BE DELETED FROM cim_hrdb_staff: person_id = ".$person_id.", staff_id = ".$staff_id."<br>"; $staffUpdater->deleteEntry(); $reportDataDump .= 'Deleting record for alternative person ID ' . $personID . $BR . $BR; } } next($staff_array2); } /***** Remove redundant sub-group associations, otherwise rename person-id to active person-id ******************/ // Update the Person-DG table (sch_person_sub_group): still requires clean up // Step 1) Find the information stored for the active person_id $dg_campus_array = array(); $person_dg_manager = new RowManager_PersonDGManager(); $person_dg_manager->setPersonID($savedPersonID); $person_dg_manager->setSortOrder('person_sub_group_id'); $person_dg_manager->setAscDesc('DESC'); // sort by descending person_sub_group_IDs $personDGData = $person_dg_manager->getListIterator(); $personDGArray = $personDGData->getDataList(); reset($personDGArray); foreach (array_keys($personDGArray) as $l) { $record = current($personDGArray); $dg_id = $record['sub_group_id']; $campus_id = $record['organization_id']; $dg_campus_array[$dg_id] = $campus_id; next($personDGArray); } // // if (count($dg_campus_array) > 0) // { // echo "<br>DG for active person_id ".$savedPersonID.": <pre>".print_r($personDGArray,true)."</pre><br>"; // // echo "<br>DG-Campus for active person_id ".$savedPersonID.": <pre>".print_r($dg_campus_array,true)."</pre><br>"; // } $reportDataDump .= 'Changes made to <b>sch_person_sub_group table</b>: ' . $BR; // Step 2) Update the records having the non-active person ids for this person $person_dg_manager2 = new RowManager_PersonDGManager(); $person_dg_manager2->addSearchCondition('person_id in (' . $person_ids_list . ')'); $person_dg_manager2->setSortOrder('person_id'); $person_dg_manager2->setAscDesc('DESC'); // sort by descending person IDs $personDGData2 = $person_dg_manager2->getListIterator(); $personDGArray2 = $personDGData2->getDataList(); // If no record was found for the active person record - then set flag for updating // $updated = true; // if (count($personDGArray2) < 1) // { // $updated = false; // } // $j = 0; // echo 'DG array results = <pre>'.print_r($personDGArray2,true).'</pre>'; // echo 'dg - campus array: <pre>'.print_r($dg_campus_array,true).'</pre>'; reset($personDGArray2); foreach (array_keys($personDGArray2) as $l) { $record = current($personDGArray2); $personID = $record['person_id']; if ($personID != $savedPersonID) { $personSubGroupID = $record['person_sub_group_id']; $personDGUpdater = new RowManager_PersonDGManager($personSubGroupID); $dg_id = $record['sub_group_id']; $campus_id = $record['organization_id']; // echo 'dg-id, campus-id = '.$dg_id.', '.$campus_id.'<br>'; // check to see if identical information was already stored under active person_id if (isset($dg_campus_array[$dg_id]) && $dg_campus_array[$dg_id] == $campus_id) { $personDGUpdater->deleteEntry(); $reportDataDump .= 'Deleting record for alternative person ID ' . $personID . $BR; $reportDataDump .= 'since it has information already stored for primary person ID ' . $savedPersonID . $BR . $BR; // echo "<br>TO BE DELETED FROM sch_person_sub_group: person_id = ".$personID.", dg = ".$dg_id.", campus = ".$campus_id."<br>"; } else { $updateValues = array(); $updateValues['person_id'] = $savedPersonID; // just to make sure... $updateValues['sub_group_id'] = $record['sub_group_id']; $updateValues['organization_id'] = $record['organization_id']; // echo "<br>update values from ".$personID.": <pre>".print_r($dg_campus_array,true)."</pre><br>"; // TODO: deal with case where two non-active person-ids contain identical info (currently both are saved with active person id) // update the person ID for a person-DG record (in database) $personDGUpdater->loadFromArray($updateValues); $personDGUpdater->updateDBTable(); $reportDataDump .= 'Updating record for alternative person ID ' . $personID . $BR; $reportDataDump .= 'since it has new information: setting person ID to be ' . $savedPersonID . $BR . $BR; } } next($personDGArray2); } /*** Update the personal schedule table (sch_schedule) **/ // Step 1) Find the information stored for the active person_id $schedule_array = array(); $schedule_manager = new RowManager_ScheduleManager(); $schedule_manager->setPersonID($savedPersonID); $schedule_manager->setSortOrder('schedule_id'); $schedule_manager->setAscDesc('DESC'); // sort by descending schedule_IDs $personScheduleData = $schedule_manager->getListIterator(); $personScheduleArray = $personScheduleData->getDataList(); reset($personScheduleArray); $idx = 0; foreach (array_keys($personScheduleArray) as $l) { $record = current($personScheduleArray); $schedule_block = $record['schedule_block']; $schedule_array[$idx] = $schedule_block; next($personScheduleArray); $idx++; } // echo 'active person schedule = <pre>'.print_r($personScheduleArray,true).'</pre>'; // echo 'person blocks array = <pre>'.print_r($schedule_array,true).'</pre>'; $reportDataDump .= 'Changes made to <b>sch_schedule table</b>: ' . $BR; // Step 2) Create new records for active person ID from data linked to the non-active person ids for this person $schedules = new RowManager_ScheduleManager(); $schedule_manager2 = new MultiTableManager(); $schedule_manager2->addRowManager($schedules); $schedule_manager2->addSearchCondition('person_id in (' . $person_ids_list . ')'); $schedule_manager2->addSortField('person_id', 'DESC'); // $schedule_manager2->setAscDesc( 'DESC' ); // sort by descending person ID $personScheduleData2 = $schedule_manager2->getListIterator(); $personScheduleArray2 = $personScheduleData2->getDataList(); // echo 'other person-ids schedule array = <pre>'.print_r($personScheduleArray2,true).'</pre>'; $toUpdate = false; if (count($schedule_array) < 1) { $toUpdate = true; // echo 'Staff update needed'; } // echo 'schedule array = <pre>'.print_r($personScheduleArray2,true).'</pre>'; $updatePersonID = -1; reset($personScheduleArray2); foreach (array_keys($personScheduleArray2) as $l) { $record = current($personScheduleArray2); $personID = $record['person_id']; if ($personID != $savedPersonID) { $found_sch_block = $record['schedule_block']; $schedule_id = $record['schedule_id']; $personScheduleUpdater = new RowManager_ScheduleManager($schedule_id); // $personScheduleUpdater->setPersonID($personID); // $personScheduleUpdater->setScheduleBlock($found_sch_block); // if the active person_id DOES NOT HAVE this schedule block, then update record with active person id // if (!in_array($found_sch_block, $schedule_array)) // COMMENTED OUT BECAUSE WE DON'T WANT TO MERGE SCHEDULES // { // if the active person_id DOES NOT HAVE **ANY** schedule block, then update record with active person id if ($toUpdate == true || $updatePersonID == $personID) { $updateValues = array(); $updateValues['person_id'] = $savedPersonID; // NEW VALUE $updateValues['schedule_block'] = $found_sch_block; // just to make sure... // update the person ID for a person-DG record (in database) $personScheduleUpdater->loadFromArray($updateValues); $personScheduleUpdater->updateDBTable(); if ($toUpdate == true) { $toUpdate = false; $updatePersonID = $personID; // set person ID whose schedule blocks to use for updating $reportDataDump .= 'No schedule block found for person ID ' . $savedPersonID . ',' . $BR; $reportDataDump .= 'updating using schedule blocks from person ID ' . $updatePersonID . $BR . $BR; } } else { // TODO: enable this code at mid-April 2008 // $personScheduleUpdater->deleteEntry(); // $reportDataDump .= 'Deleting record for alternative person ID '.$personID.$BR.$BR; // TODO: deal with case where two non-active person-ids contain identical info // (currently both are saved with active person id) } } next($personScheduleArray2); } /*** Remove all person records other than the active person ID (most often the one used in most-recent login) ***/ $personIDs = explode(',', $person_ids_list); foreach (array_values($personIDs) as $personID) { if ($personID != $savedPersonID) { $personUpdater = new RowManager_PersonManager($personID); $personUpdater->deleteEntry(); $reportDataDump .= 'Deleting redundant <b>cim_hrdb_person</b> record having person ID ' . $personID . $BR; } next($personIDs); } } // end if (isset($indivDataArray)) $reportDataDump = substr($reportDataDump, 0, -4); // remove the last <BR> $reportDataDump .= $HR; next($personDataArray); } $this->template->set('reportDataDump', $reportDataDump); // store the Row Manager's XML Node Name // $this->template->set( 'rowManagerXMLNodeName', RowManager_ReceiptManager::XML_NODE_NAME ); // store the primary key field name for the data being displayed // $this->template->set( 'primaryKeyFieldName', 'ccreceipt_sequencenum'); /* * Set up any additional data transfer to the Template here... */ $templateName = 'page_PersonRecordCleanUp.tpl.php'; // if you are creating a custom template for this page then // replace $templateName with the following: //$templateName = 'page_DisplayCCtransactionReceipt.php'; // send CC transaction confirmation e-mail (but first remove links) // $link_regex = '{<a.*?</a>}'; // $message_body = $this->template->fetch( $templateName ); // $message_body = preg_replace( $link_regex, '', $message_body); // // if (!defined('IGNORE_EMAILS')) // { // $this->sendCCTransactionEmail($message_body); // } return $this->template->fetch($templateName); }