Beispiel #1
0
 private function get_link_log_qb($kept = false)
 {
     $qb = org_openpsa_directmarketing_link_log_dba::new_query_builder();
     if ($kept) {
         $qb->add_constraint('metadata.revised', '>=', $this->get_deletion_timestamp());
     } else {
         $qb->add_constraint('metadata.revised', '<', $this->get_deletion_timestamp());
     }
     return $qb;
 }
Beispiel #2
0
 private function _create_link_receipt(&$receipt, &$token, &$target)
 {
     if (!array_key_exists('create_status', $this->_request_data)) {
         $this->_request_data['create_status'] = array('receipts' => array(), 'links' => array());
     }
     //Store the click in database
     $link = new org_openpsa_directmarketing_link_log_dba();
     $link->person = $receipt->person;
     $link->message = $receipt->message;
     $link->target = $target;
     $link->token = $token;
     $this->_request_data['create_status']['links'][$target] = $link->create();
     //Create received and read receipts
     $read_receipt = new org_openpsa_directmarketing_campaign_messagereceipt_dba();
     $read_receipt->person = $receipt->person;
     $read_receipt->message = $receipt->message;
     $read_receipt->token = $token;
     $read_receipt->orgOpenpsaObtype = org_openpsa_directmarketing_campaign_messagereceipt_dba::RECEIVED;
     $this->_request_data['create_status']['receipts'][$token] = $read_receipt->create();
 }
Beispiel #3
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;
 }
Beispiel #4
0
 private function _get_link_data($segmentation_param)
 {
     $this->_request_data['report']['link_data'] = array();
     $link_data =& $this->_request_data['report']['link_data'];
     $link_data['counts'] = array();
     $link_data['percentages'] = array('of_links' => array(), 'of_recipients' => array());
     $link_data['rules'] = array();
     $link_data['tokens'] = array();
     if ($segmentation_param) {
         $link_data['segments'] = array();
     }
     $segment_prototype = array();
     $segment_prototype['counts'] = array();
     $segment_prototype['percentages'] = array('of_links' => array(), 'of_recipients' => array());
     $segment_prototype['rules'] = array();
     $segment_prototype['tokens'] = array();
     $qb_links = org_openpsa_directmarketing_link_log_dba::new_query_builder();
     $qb_links->add_constraint('message', '=', $this->_request_data['message']->id);
     $qb_links->add_constraint('target', 'NOT LIKE', '%unsubscribe%');
     $links = $qb_links->execute_unchecked();
     $link_data['total'] = count($links);
     foreach ($links as $link) {
         $segment = '';
         $segment_notfound = false;
         if ($segmentation_param && !empty($link->person)) {
             try {
                 $person = org_openpsa_contacts_person_dba::get_cached($link->person);
                 $segment = $person->parameter('org.openpsa.directmarketing.segments', $segmentation_param);
             } catch (midcom_error $e) {
             }
             if (empty($segment)) {
                 $segment = $this->_l10n->get('no segment');
                 $segment_notfound = true;
             }
             if (!isset($link_data['segments'][$segment])) {
                 $link_data['segments'][$segment] = $segment_prototype;
             }
             $segment_data =& $link_data['segments'][$segment];
         } else {
             $segment_data = $segment_prototype;
         }
         $this->_increment_totals($link_data, $link);
         $this->_increment_totals($segment_data, $link);
         $this->_calculate_percentages($link_data, $link);
         $this->_calculate_percentages($segment_data, $link);
         if (!isset($link_data['rules'][$link->target])) {
             $link_data['rules'][$link->target] = array('comment' => sprintf($this->_l10n->get('all persons who have clicked on link "%s" in message #%d and have not unsubscribed from campaign #%d'), $link->target, $link->message, $this->_request_data['message']->campaign), 'type' => 'AND', 'classes' => array(array('comment' => $this->_l10n->get('link and message limits'), 'type' => 'AND', 'class' => 'org_openpsa_directmarketing_link_log_dba', 'rules' => array(array('property' => 'target', 'match' => '=', 'value' => $link->target), array('property' => 'message', 'match' => '=', 'value' => $link->message))), array('comment' => $this->_l10n->get('not-unsubscribed -limits'), 'type' => 'AND', 'class' => 'org_openpsa_directmarketing_campaign_member_dba', 'rules' => array(array('property' => 'orgOpenpsaObtype', 'match' => '<>', 'value' => org_openpsa_directmarketing_campaign_member_dba::UNSUBSCRIBED), array('property' => 'campaign', 'match' => '=', 'value' => $this->_request_data['message']->campaign)))));
         }
         if (!isset($segment_data['rules'][$link->target])) {
             $segment_data['rules'][$link->target] = $link_data['rules'][$link->target];
             if (!$segment_notfound) {
                 $segmentrule = array('comment' => $this->_l10n->get('segment limits'), 'type' => 'AND', 'class' => 'org_openpsa_contacts_person_dba', 'rules' => array(array('property' => 'parameter.domain', 'match' => '=', 'value' => 'org.openpsa.directmarketing.segments'), array('property' => 'parameter.name', 'match' => '=', 'value' => $segmentation_param), array('property' => 'parameter.value', 'match' => '=', 'value' => $segment)));
                 // On a second thought, we cannot query for empty parameter values...
                 $segment_data['rules'][$link->target]['comment'] = sprintf($this->_l10n->get('all persons in market segment "%s" who have clicked on link "%s" in message #%d and have not unsubscribed from campaign #%d'), $segment, $link->target, $link->message, $this->_request_data['message']->campaign);
                 $segment_data['rules'][$link->target]['classes'][] = $segment;
             }
         }
     }
     arsort($link_data['counts']);
     arsort($link_data['percentages']['of_links']);
     arsort($link_data['percentages']['of_recipients']);
     if ($segmentation_param) {
         ksort($link_data['segments']);
         foreach ($link_data['segments'] as $segment => $dummy) {
             $segment_data =& $link_data['segments'][$segment];
             arsort($segment_data['counts']);
             arsort($segment_data['percentages']['of_links']);
             arsort($segment_data['percentages']['of_recipients']);
         }
     }
 }