Merge remote-tracking branch 'upstream/4.4' into 4.4-master-2013-11-26-11-46-28
[civicrm-core.git] / CRM / Utils / Migrate / ExportJSON.php
index e188e461ca10c204bf0dc3b0d46ee704f06730cd..33296f80ec027045f8f6f4868e45bef6a55afde0 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.3                                                |
+ | CiviCRM version 4.4                                                |
  +--------------------------------------------------------------------+
  | Copyright CiviCRM LLC (c) 2004-2013                                |
  +--------------------------------------------------------------------+
@@ -47,7 +47,9 @@ class CRM_Utils_Migrate_ExportJSON {
 
   protected $_renameTags = 1;
 
-  protected $_sitePrefix = 'Site 1'; function __construct(&$params) {
+  protected $_sitePrefix = 'Site 1';
+
+  function __construct(&$params) {
     foreach ($params as $name => $value) {
       $varName = '_' . $name;
       $this->$varName = $value;
@@ -60,10 +62,10 @@ class CRM_Utils_Migrate_ExportJSON {
   function &splitContactIDs(&$contactIDs) {
     // contactIDs could be a real large array, so we split it up into
     // smaller chunks and then general xml for each chunk
-    $chunks           = array();
-    $current          = 0;
+    $chunks = array();
+    $current = 0;
     $chunks[$current] = array();
-    $count            = 0;
+    $count = 0;
 
     foreach ($contactIDs as $k => $v) {
       $chunks[$current][$k] = $v;
@@ -118,6 +120,7 @@ class CRM_Utils_Migrate_ExportJSON {
       'status_id' => 'activity_status_id',
       'priority_id' => 'activity_priority_id',
       'medium_id' => 'encounter_medium',
+      'communication_style_id' => 'communication_style',
       'email_greeting' => 'email_greeting',
       'postal_greeting' => 'postal_greeting',
       'addressee_id' => 'addressee',
@@ -133,7 +136,7 @@ class CRM_Utils_Migrate_ExportJSON {
 
   function auxTable($tables) {
     foreach ($tables as $tableName => $daoName) {
-      $fields = &$this->dbFields($daoName, TRUE);
+      $fields = & $this->dbFields($daoName, TRUE);
 
       $sql = "SELECT * from $tableName";
       $this->sql($sql, $tableName, $fields);
@@ -153,7 +156,7 @@ SELECT *
 FROM   civicrm_option_group
 WHERE  name IN ( $nameString )
 ";
-    $fields = &$this->dbFields('CRM_Core_DAO_OptionGroup', TRUE);
+    $fields = & $this->dbFields('CRM_Core_DAO_OptionGroup', TRUE);
     $this->sql($sql, 'civicrm_option_group', $fields);
 
     $sql = "
@@ -162,15 +165,15 @@ FROM       civicrm_option_value v
 INNER JOIN civicrm_option_group g ON v.option_group_id = g.id
 WHERE      g.name IN ( $nameString )
 ";
-    $fields = &$this->dbFields('CRM_Core_DAO_OptionValue', TRUE);
+    $fields = & $this->dbFields('CRM_Core_DAO_OptionValue', TRUE);
     $this->sql($sql, 'civicrm_option_value', $fields);
   }
 
   function table(&$ids,
-    $tableName,
-    &$fields,
-    $whereField,
-    $additionalWhereCond = NULL
+                 $tableName,
+                 &$fields,
+                 $whereField,
+                 $additionalWhereCond = NULL
   ) {
     if (empty($ids)) {
       return;
@@ -192,7 +195,7 @@ SELECT *
   }
 
   function sql($sql, $tableName, &$fields) {
-    $dao = &CRM_Core_DAO::executeQuery($sql);
+    $dao = & CRM_Core_DAO::executeQuery($sql);
 
     while ($dao->fetch()) {
       $value = array();
@@ -210,42 +213,42 @@ SELECT *
   }
 
   function contact(&$contactIDs) {
-    $fields = &$this->dbFields('CRM_Contact_DAO_Contact', TRUE);
+    $fields = & $this->dbFields('CRM_Contact_DAO_Contact', TRUE);
     $this->table($contactIDs, 'civicrm_contact', $fields, 'id', NULL);
   }
 
   function note(&$contactIDs) {
-    $fields = &$this->dbFields('CRM_Core_DAO_Note', TRUE);
+    $fields = & $this->dbFields('CRM_Core_DAO_Note', TRUE);
     $this->table($contactIDs, 'civicrm_note', $fields, 'entity_id', "entity_table = 'civicrm_contact'");
   }
 
   function phone(&$contactIDs) {
-    $fields = &$this->dbFields('CRM_Core_DAO_Phone', TRUE);
+    $fields = & $this->dbFields('CRM_Core_DAO_Phone', TRUE);
     $this->table($contactIDs, 'civicrm_phone', $fields, 'contact_id', NULL);
   }
 
   function email(&$contactIDs) {
-    $fields = &$this->dbFields('CRM_Core_DAO_Email', TRUE);
+    $fields = & $this->dbFields('CRM_Core_DAO_Email', TRUE);
     $this->table($contactIDs, 'civicrm_email', $fields, 'contact_id', NULL);
   }
 
   function im(&$contactIDs) {
-    $fields = &$this->dbFields('CRM_Core_DAO_IM', TRUE);
+    $fields = & $this->dbFields('CRM_Core_DAO_IM', TRUE);
     $this->table($contactIDs, 'civicrm_im', $fields, 'contact_id', NULL);
   }
 
   function website(&$contactIDs) {
-    $fields = &$this->dbFields('CRM_Core_DAO_Website', TRUE);
+    $fields = & $this->dbFields('CRM_Core_DAO_Website', TRUE);
     $this->table($contactIDs, 'civicrm_website', $fields, 'contact_id', NULL);
   }
 
   function address(&$contactIDs) {
-    $fields = &$this->dbFields('CRM_Core_DAO_Email', TRUE);
+    $fields = & $this->dbFields('CRM_Core_DAO_Email', TRUE);
     $this->table($contactIDs, 'civicrm_address', $fields, 'contact_id', NULL);
   }
 
   function groupContact(&$contactIDs) {
-    $fields = &$this->dbFields('CRM_Contact_DAO_GroupContact', TRUE);
+    $fields = & $this->dbFields('CRM_Contact_DAO_GroupContact', TRUE);
     $this->table($contactIDs, 'civicrm_group_contact', $fields, 'contact_id', NULL);
   }
 
@@ -271,7 +274,7 @@ WHERE  contact_id IN ( $ids )
       }
     }
 
-    $fields = &$this->dbFields('CRM_Contact_DAO_Group', TRUE);
+    $fields = & $this->dbFields('CRM_Contact_DAO_Group', TRUE);
     $this->table($groupIDs, 'civicrm_group', $fields, 'id');
 
     $this->savedSearch($groupIDs);
@@ -291,12 +294,12 @@ INNER JOIN civicrm_group g on g.saved_search_id = s.id
 WHERE      g.id IN ( $idString )
 ";
 
-    $fields = &$this->dbFields('CRM_Contact_DAO_SavedSearch', TRUE);
+    $fields = & $this->dbFields('CRM_Contact_DAO_SavedSearch', TRUE);
     $this->sql($sql, 'civicrm_saved_search', $fields);
   }
 
   function entityTag(&$contactIDs) {
-    $fields = &$this->dbFields('CRM_Core_DAO_EntityTag', TRUE);
+    $fields = & $this->dbFields('CRM_Core_DAO_EntityTag', TRUE);
     $this->table($contactIDs, 'civicrm_entity_tag', $fields, 'entity_id', "entity_table = 'civicrm_contact'");
   }
 
@@ -321,7 +324,7 @@ AND    entity_table = 'civicrm_contact'
       }
     }
 
-    $fields = &$this->dbFields('CRM_Core_DAO_Tag', TRUE);
+    $fields = & $this->dbFields('CRM_Core_DAO_Tag', TRUE);
     $this->table($tagIDs, 'civicrm_tag', $fields, 'id');
   }
 
@@ -343,7 +346,7 @@ AND    entity_table = 'civicrm_contact'
 ";
 
     $fields = $this->dbFields('CRM_Contact_DAO_Relationship', TRUE);
-    $dao = &CRM_Core_DAO::executeQuery($sql);
+    $dao = & CRM_Core_DAO::executeQuery($sql);
     while ($dao->fetch()) {
       if (isset($_relationshipsHandled[$dao->id])) {
         continue;
@@ -362,7 +365,7 @@ AND    entity_table = 'civicrm_contact'
       $this->appendValue($dao->id, 'civicrm_relationship', $relationship);
 
       $this->addAdditionalContacts(array(
-        $dao->contact_id_a,
+          $dao->contact_id_a,
           $dao->contact_id_b,
         ),
         $additionalContacts
@@ -373,37 +376,42 @@ AND    entity_table = 'civicrm_contact'
 
   function activity(&$contactIDs, &$additionalContacts) {
     static $_activitiesHandled = array();
-    $activityContacts = CRM_Core_PseudoConstant::activityContacts('name');
+    $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
     $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
     $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
     $ids = implode(',', $contactIDs);
 
-    $sql = "(
-  SELECT     a.*
-  FROM       civicrm_activity a
-  INNER JOIN civicrm_activity_contact aa ON aa.activity_id = a.id AND aa.record_type_id = $assigneeID
-  WHERE      aa.contact_id IN ( $ids )
-    AND      ( a.activity_type_id != 3 AND a.activity_type_id != 20 )
-) UNION (
-  SELECT     a.*
-  FROM       civicrm_activity a
-  INNER JOIN civicrm_activity_contact at ON at.activity_id = a.id AND at.record_type_id = $targetID  
-  WHERE      at.contact_id IN ( $ids )
-    AND      ( a.activity_type_id != 3 AND a.activity_type_id != 20 )
-)
+    // query framing returning all contacts in valid activity
+    $sql = "
+SELECT  a.*, ac.id as acID, ac.activity_id, ac.contact_id, ac.record_type_id
+FROM civicrm_activity a
+INNER JOIN civicrm_activity_contact ac ON ac.activity_id = a.id
+WHERE ac.contact_id IN ( $ids )
+  AND (a.activity_type_id != 3 AND a.activity_type_id != 20)
 ";
 
-    $fields = &$this->dbFields('CRM_Activity_DAO_Activity', TRUE);
+    $fields = & $this->dbFields('CRM_Activity_DAO_Activity', TRUE);
 
-    $activityIDs = array();
-    $dao = &CRM_Core_DAO::executeQuery($sql);
+    $dao = & CRM_Core_DAO::executeQuery($sql);
     while ($dao->fetch()) {
+      // adding source, target and assignee contacts in additional contacts array
+      $this->addAdditionalContacts(array($dao->contact_id),
+        $additionalContacts
+      );
+
+      // append values of activity contacts
+      $activityContacts = array(
+        'id' => $dao->acID,
+        'contact_id' => $dao->contact_id,
+        'activity_id' => $dao->activity_id,
+        'record_type_id' => $dao->record_type_id
+      );
+      $this->appendValue($dao->acID, 'civicrm_activity_contact', $activityContacts);
+
       if (isset($_activitiesHandled[$dao->id])) {
         continue;
       }
       $_activitiesHandled[$dao->id] = $dao->id;
-      $activityIDs[] = $dao->id;
 
       $activity = array();
       foreach ($fields as $fld) {
@@ -415,48 +423,10 @@ AND    entity_table = 'civicrm_contact'
         }
       }
 
+      // append activity value
       $this->appendValue($dao->id, 'civicrm_activity', $activity);
-      $this->addAdditionalContacts(array($dao->source_contact_id),
-        $additionalContacts
-      );
     }
     $dao->free();
-
-    if (empty($activityIDs)) {
-      return;
-    }
-
-    $activityIDString = implode(",", $activityIDs);
-
-    // now get all assignee contact ids and target contact ids for this activity
-    $sql              = "SELECT * FROM civicrm_activity_contact WHERE activity_id IN ($activityIDString) AND record_type = 'Assignee'";
-    $aaDAO            = &CRM_Core_DAO::executeQuery($sql);
-    $activityContacts = array();
-    while ($aaDAO->fetch()) {
-      $activityAssignee = array(
-        'id' => $aaDAO->id,
-        'assignee_contact_id' => $aaDAO->assignee_contact_id,
-        'activity_id' => $aaDAO->activity_id,
-      );
-      $this->appendValue($aaDAO->id, 'civicrm_activity_assignment', $activityAssignee);
-      $activityContacts[] = $aaDAO->assignee_contact_id;
-    }
-    $aaDAO->free();
-
-    $sql = "SELECT * FROM civicrm_activity_contact WHERE activity_id IN ($activityIDString) AND record_type = 'Target'";
-    $atDAO = &CRM_Core_DAO::executeQuery($sql);
-    while ($atDAO->fetch()) {
-      $activityTarget = array(
-        'id' => $atDAO->id,
-        'target_contact_id' => $atDAO->target_contact_id,
-        'activity_id' => $atDAO->activity_id,
-      );
-      $this->appendValue($atDAO->id, 'civicrm_activity_target', $activityTarget);
-      $activityContacts[] = $atDAO->target_contact_id;
-    }
-    $atDAO->free();
-
-    $this->addAdditionalContacts($activityContacts, $additionalContacts);
   }
 
   function appendValue($id, $name, $value) {
@@ -482,7 +452,7 @@ AND    entity_table = 'civicrm_contact'
       ) . '.php';
       include_once ($daoFile);
 
-      $daoFields = &$daoName::fields();
+      $daoFields = & $daoName::fields();
 
       foreach ($daoFields as $key => & $value) {
         $_fieldsRetrieved[$daoName][$value['name']] = array(
@@ -517,7 +487,7 @@ AND    entity_table = 'civicrm_contact'
   }
 
   function export(&$contactIDs) {
-    $chunks = &$this->splitContactIDs($contactIDs);
+    $chunks = & $this->splitContactIDs($contactIDs);
 
     $additionalContactIDs = array();
 
@@ -532,8 +502,8 @@ AND    entity_table = 'civicrm_contact'
   }
 
   function run($fileName,
-    $lastExportTime = NULL,
-    $discoverContacts = FALSE
+               $lastExportTime = NULL,
+               $discoverContacts = FALSE
   ) {
     $this->_discoverContacts = $discoverContacts;
 
@@ -558,7 +528,7 @@ WHERE  date >= $lastExportTime
     }
 
 
-    $dao = &CRM_Core_DAO::executeQuery($sql);
+    $dao = & CRM_Core_DAO::executeQuery($sql);
 
     $contactIDs = array();
     while ($dao->fetch()) {