예제 #1
0
 /**
  * Support for contacts person merge
  */
 function org_openpsa_contacts_duplicates_merge_person(&$person1, &$person2, $mode)
 {
     switch ($mode) {
         case 'all':
             break;
             /* In theory we could have future things (like resource/manager ships), but now we don't support that mode, we just exit */
         /* In theory we could have future things (like resource/manager ships), but now we don't support that mode, we just exit */
         case 'future':
             return true;
             break;
         default:
             // Mode not implemented
             debug_add("mode {$mode} not implemented", MIDCOM_LOG_ERROR);
             return false;
             break;
     }
     // Transfer links from classes we drive
     // ** expense reports **
     $qb_expense = org_openpsa_expenses_expense::new_query_builder();
     $qb_expense->add_constraint('person', '=', $person2->id);
     $expenses = $qb_expense->execute();
     if ($expenses === false) {
         // Some error with QB
         debug_add('QB Error / expenses', MIDCOM_LOG_ERROR);
         return false;
     }
     foreach ($expenses as $expense) {
         debug_add("Transferred expense #{$expense->id} to person #{$person1->id} (from #{$expense->person})", MIDCOM_LOG_INFO);
         $expense->person = $person1->id;
         if (!$expense->update()) {
             // Error updating
             debug_add("Failed to update expense #{$expense->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // Transfer metadata dependencies from classes that we drive
     $classes = array('org_openpsa_expenses_expense');
     $metadata_fields = array('creator' => 'guid', 'revisor' => 'guid');
     foreach ($classes as $class) {
         $ret = org_openpsa_contacts_duplicates_merge::person_metadata_dependencies_helper($class, $person1, $person2, $metadata_fields);
         if (!$ret) {
             // Failure updating metadata
             debug_add("Failed to update metadata dependencies in class {$class}, errsrtr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // All done
     return true;
 }
예제 #2
0
 /**
  * Support for contacts person merge
  */
 function org_openpsa_contacts_duplicates_merge_person(&$person1, &$person2, $mode)
 {
     switch ($mode) {
         case 'all':
             break;
             /* In theory we could have future things (like resource/manager ships), but now we don't support that mode, we just exit */
         /* In theory we could have future things (like resource/manager ships), but now we don't support that mode, we just exit */
         case 'future':
             return true;
             break;
         default:
             // Mode not implemented
             debug_add("mode {$mode} not implemented", MIDCOM_LOG_ERROR);
             return false;
             break;
     }
     // Transfer links from classes we drive
     // ** resources **
     $qb_member = org_openpsa_projects_task_resource_dba::new_query_builder();
     $qb_member->add_constraint('person', '=', $person2->id);
     $members = $qb_member->execute();
     if ($members === false) {
         // Some error with QB
         debug_add('QB Error', MIDCOM_LOG_ERROR);
         return false;
     }
     // Transfer memberships
     foreach ($members as $member) {
         // TODO: figure out duplicate memberships and delete unneeded ones
         $member->person = $person1->id;
         debug_add("Transferred task resource #{$member->id} to person #{$person1->id} (from #{$member->person})", MIDCOM_LOG_INFO);
         if (!$member->update()) {
             debug_add("Failed to update task resource #{$member->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // ** task statuses **
     $qb_receipt = org_openpsa_projects_task_status_dba::new_query_builder();
     $qb_receipt->add_constraint('targetPerson', '=', $person2->id);
     $receipts = $qb_receipt->execute();
     if ($receipts === false) {
         // Some error with QB
         debug_add('QB Error / status', MIDCOM_LOG_ERROR);
         return false;
     }
     foreach ($receipts as $receipt) {
         debug_add("Transferred task_status #{$receipt->id} to person #{$person1->id} (from #{$receipt->person})", MIDCOM_LOG_INFO);
         $receipt->targetPerson = $person1->id;
         if (!$receipt->update()) {
             // Error updating
             debug_add("Failed to update status #{$receipt->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // ** hour reports **
     $qb_log = org_openpsa_projects_hour_report_dba::new_query_builder();
     $qb_log->add_constraint('person', '=', $person2->id);
     $logs = $qb_log->execute();
     if ($logs === false) {
         // Some error with QB
         debug_add('QB Error / hours', MIDCOM_LOG_ERROR);
         return false;
     }
     foreach ($logs as $log) {
         debug_add("Transferred hour_report #{$log->id} to person #{$person1->id} (from #{$log->person})", MIDCOM_LOG_INFO);
         $log->person = $person1->id;
         if (!$log->update()) {
             // Error updating
             debug_add("Failed to update hour_report #{$log->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // ** Task managers **
     $qb_task = org_openpsa_projects_task_dba::new_query_builder();
     $qb_task->add_constraint('manager', '=', $person2->id);
     $tasks = $qb_task->execute();
     if ($tasks === false) {
         // Some error with QB
         debug_add('QB Error / tasks', MIDCOM_LOG_ERROR);
         return false;
     }
     foreach ($tasks as $task) {
         debug_add("Transferred task #{$task->id} to person #{$person1->id} (from #{$task->person})", MIDCOM_LOG_INFO);
         $task->manager = $person1->id;
         if (!$task->update()) {
             // Error updating
             debug_add("Failed to update task #{$task->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // Transfer metadata dependencies from classes that we drive
     $classes = array('org_openpsa_projects_task_resource_dba', 'org_openpsa_projects_task_status_dba', 'org_openpsa_projects_task_dba', 'org_openpsa_projects_hour_report_dba');
     $metadata_fields = array('creator' => 'guid', 'revisor' => 'guid');
     foreach ($classes as $class) {
         $ret = org_openpsa_contacts_duplicates_merge::person_metadata_dependencies_helper($class, $person1, $person2, $metadata_fields);
         if (!$ret) {
             // Failure updating metadata
             debug_add("Failed to update metadata dependencies in class {$class}, errsrtr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // All done
     return true;
 }
예제 #3
0
 /**
  * Support for contacts person merge
  */
 function org_openpsa_contacts_duplicates_merge_person(&$person1, &$person2, $mode)
 {
     switch ($mode) {
         case 'all':
             break;
         case 'future':
             // Contacts does not have future references so we have nothing to transfer...
             return true;
             break;
         default:
             // Mode not implemented
             debug_add("mode {$mode} not implemented", MIDCOM_LOG_ERROR);
             return false;
             break;
     }
     $qb = midcom_db_member::new_query_builder();
     $qb->begin_group('OR');
     // We need the remaining persons memberships later when we compare the two
     $qb->add_constraint('uid', '=', $person1->id);
     $qb->add_constraint('uid', '=', $person2->id);
     $qb->end_group();
     $members = $qb->execute();
     if ($members === false) {
         // Some error with QB
         debug_add('QB Error', MIDCOM_LOG_ERROR);
         return false;
     }
     // Transfer memberships
     $membership_map = array();
     foreach ($members as $member) {
         if ($member->uid != $person1->id) {
             debug_add("Transferred membership #{$member->id} to person #{$person1->id} (from #{$member->uid})");
             $member->uid = $person1->id;
         }
         if (!isset($membership_map[$member->gid]) || !is_array($membership_map[$member->gid])) {
             $membership_map[$member->gid] = array();
         }
         $membership_map[$member->gid][] = $member;
     }
     unset($members);
     // Merge memberships
     foreach ($membership_map as $members) {
         foreach ($members as $member) {
             if (count($members) == 1) {
                 // We only have one membership in this group, skip rest of the logic
                 if (!$member->update()) {
                     // Failure updating member
                     debug_add("Failed to update member #{$member->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
                     return false;
                 }
                 continue;
             }
             // TODO: Compare memberships to determine which of them are identical and thus not worth keeping
             if (!$member->update()) {
                 // Failure updating member
                 debug_add("Failed to update member #{$member->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
                 return false;
             }
         }
     }
     // Transfer metadata dependencies from classes that we drive
     $classes = array('midcom_db_member', 'org_openpsa_contacts_person_dba', 'org_openpsa_contacts_group_dba');
     $metadata_fields = array('creator' => 'guid', 'revisor' => 'guid');
     foreach ($classes as $class) {
         $ret = org_openpsa_contacts_duplicates_merge::person_metadata_dependencies_helper($class, $person1, $person2, $metadata_fields);
         if (!$ret) {
             // Failure updating metadata
             debug_add("Failed to update metadata dependencies in class {$class}, errsrtr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // Copy fields missing from person1 and present in person2 over
     $skip_properties = array('id' => true, 'guid' => true);
     $changed = false;
     foreach ($person2 as $property => $value) {
         // Copy only simple properties not marked to be skipped missing from person1
         if (empty($person2->{$property}) || !empty($person1->{$property}) || isset($skip_properties[$property]) || is_array($value) || is_object($value)) {
             continue;
         }
         $person1->{$property} = $value;
         $changed = true;
     }
     // Avoid unnecessary updates
     if ($changed) {
         if (!$person1->update()) {
             // Error updating person
             debug_add("Error updating person #{$person1->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // PONDER: sensible way to do the same for parameters ??
     return true;
 }
예제 #4
0
 /**
  * Support for contacts person merge
  */
 function org_openpsa_contacts_duplicates_merge_person(&$person1, &$person2, $mode)
 {
     switch ($mode) {
         case 'all':
             break;
         case 'future':
             // DirMar does not have future references so we have nothing to transfer...
             return true;
             break;
         default:
             // Mode not implemented
             debug_add("mode {$mode} not implemented", MIDCOM_LOG_ERROR);
             return false;
             break;
     }
     // Transfer links from classes we drive
     // ** Members **
     $qb_member = org_openpsa_directmarketing_campaign_member_dba::new_query_builder();
     $qb_member->add_constraint('person', '=', $person2->id);
     $members = $qb_member->execute();
     if ($members === false) {
         // Some error with QB
         debug_add('QB Error', MIDCOM_LOG_ERROR);
         return false;
     }
     // Transfer memberships
     foreach ($members as $member) {
         $member->person = $person1->id;
         if (!$member->_check_duplicate_membership()) {
             // This is a duplicate membership, delete it
             debug_add("Person #{$person1->id} is already member in campaign #{$member->campaign}, removing membership #{$member->id}", MIDCOM_LOG_INFO);
             if (!$member->delete()) {
                 debug_add("Could not delete campaign member #{$member->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
                 return false;
             }
             continue;
         }
         debug_add("Transferred campaign membership #{$member->id} to person #{$person1->id} (from #{$member->person})", MIDCOM_LOG_INFO);
         if (!$member->update()) {
             debug_add("Failed to update campaign member #{$member->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // ** Receipts **
     $qb_receipt = org_openpsa_directmarketing_campaign_messagereceipt_dba::new_query_builder();
     $qb_receipt->add_constraint('person', '=', $person2->id);
     $receipts = $qb_receipt->execute();
     if ($receipts === false) {
         // Some error with QB
         debug_add('QB Error / receipts', MIDCOM_LOG_ERROR);
         return false;
     }
     foreach ($receipts as $receipt) {
         debug_add("Transferred message_receipt #{$receipt->id} to person #{$person1->id} (from #{$receipt->person})", MIDCOM_LOG_INFO);
         $receipt->person = $person1->id;
         if (!$receipt->update()) {
             // Error updating
             debug_add("Failed to update receipt #{$receipt->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // ** Logs **
     $qb_log = org_openpsa_directmarketing_link_log_dba::new_query_builder();
     $qb_log->add_constraint('person', '=', $person2->id);
     $logs = $qb_log->execute();
     if ($logs === false) {
         // Some error with QB
         debug_add('QB Error / links', MIDCOM_LOG_ERROR);
         return false;
     }
     foreach ($logs as $log) {
         debug_add("Transferred link_log #{$log->id} to person #{$person1->id} (from #{$log->person})", MIDCOM_LOG_INFO);
         $log->person = $person1->id;
         if (!$log->update()) {
             // Error updating
             debug_add("Failed to update link #{$log->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // Transfer metadata dependencies from classes that we drive
     $classes = array('org_openpsa_directmarketing_campaign_dba', 'org_openpsa_directmarketing_campaign_member_dba', 'org_openpsa_directmarketing_campaign_message_dba', 'org_openpsa_directmarketing_campaign_messagereceipt_dba', 'org_openpsa_directmarketing_link_log_dba');
     foreach ($classes as $class) {
         // TODO: 1.8 metadata format support
         $ret = org_openpsa_contacts_duplicates_merge::person_metadata_dependencies_helper($class, $person1, $person2, $metadata_fields);
         if (!$ret) {
             // Failure updating metadata
             debug_add("Failed to update metadata dependencies in class {$class}, errsrtr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     // All done
     return true;
 }
예제 #5
0
 /**
  * Support for contacts person merge
  */
 function org_openpsa_contacts_duplicates_merge_person(&$person1, &$person2, $mode)
 {
     switch ($mode) {
         case 'all':
             break;
             /*
             case 'future':
                 // Calendar should have future mode but we don't support it yet
             
                 break;
             */
         /*
         case 'future':
             // Calendar should have future mode but we don't support it yet
         
             break;
         */
         default:
             // Mode not implemented
             debug_add("mode {$mode} not implemented", MIDCOM_LOG_ERROR);
             return false;
             break;
     }
     $qb = org_openpsa_calendar_event_member_dba::new_query_builder();
     $qb->begin_group('OR');
     // We need the remaining persons memberships later when we compare the two
     $qb->add_constraint('uid', '=', $person1->id);
     $qb->add_constraint('uid', '=', $person2->id);
     $qb->end_group();
     $members = $qb->execute();
     if ($members === false) {
         // Some error with QB
         debug_add('QB Error', MIDCOM_LOG_ERROR);
         return false;
     }
     // Transfer memberships
     $membership_map = array();
     foreach ($members as $member) {
         if ($member->uid != $person1->id) {
             debug_add("Transferred event membership #{$member->id} to person #{$person1->id} (from #{$member->uid})");
             $member->uid = $person1->id;
         }
         if (!isset($membership_map[$member->eid]) || !is_array($membership_map[$member->eid])) {
             $membership_map[$member->eid] = array();
         }
         $membership_map[$member->eid][] = $member;
     }
     unset($members);
     // Merge memberships
     foreach ($membership_map as $members) {
         foreach ($members as $member) {
             if (count($members) == 1) {
                 // We only have one membership in this event, skip rest of the logic
                 if (!$member->update()) {
                     // Failure updating member
                     debug_add("Failed to update eventmember #{$member->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
                     return false;
                 }
                 continue;
             }
             // TODO: Compare memberships to determine which of them are identical and thus not worth keeping
             if (!$member->update()) {
                 // Failure updating member
                 debug_add("Failed to update eventmember #{$member->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
                 return false;
             }
         }
     }
     // Transfer metadata dependencies from classes that we drive
     $classes = array('org_openpsa_calendar_event_dba', 'org_openpsa_calendar_event_member_dba');
     $metadata_fields = array('creator' => 'guid', 'revisor' => 'guid');
     foreach ($classes as $class) {
         $ret = org_openpsa_contacts_duplicates_merge::person_metadata_dependencies_helper($class, $person1, $person2, $metadata_fields);
         if (!$ret) {
             // Failure updating metadata
             debug_add("Failed to update metadata dependencies in class {$class}, errsrtr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR);
             return false;
         }
     }
     return true;
 }