3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
19 * This class acts like a psuedo-BAO for transient import job tables.
21 class CRM_Contact_Import_ImportJob
{
23 protected $_onDuplicate;
25 protected $_newGroupName;
26 protected $_newGroupDesc;
27 protected $_newGroupType;
29 protected $_allGroups;
30 protected $_newTagName;
31 protected $_newTagDesc;
36 protected $_mapperKeys = [];
37 protected $_mapFields;
40 * @var CRM_Contact_Import_Parser_Contact
44 protected $_userJobID;
47 * Has the job completed.
51 public function isComplete(): bool {
52 return $this->_parser
->isComplete();
56 * @param array $params
58 public function setJobParams(&$params) {
59 foreach ($params as $param => $value) {
61 $this->$fldName = $value;
66 * @param CRM_Core_Form $form
69 public function runImport(&$form, $timeout = 55) {
70 $mapper = $this->_mapper
;
71 foreach ($mapper as $key => $value) {
72 $this->_mapperKeys
[$key] = $mapper[$key][0] ??
NULL;
75 $this->_parser
= new CRM_Contact_Import_Parser_Contact(
78 $this->_parser
->setUserJobID($this->_userJobID
);
81 CRM_Import_Parser
::MODE_IMPORT
,
85 $contactIds = $this->_parser
->getImportedContacts();
87 //get the related contactIds. CRM-2926
88 $relatedContactIds = $this->_parser
->getRelatedImportedContacts();
89 if ($relatedContactIds) {
90 $contactIds = array_merge($contactIds, $relatedContactIds);
92 $form->set('relatedCount', count($relatedContactIds));
96 if ($this->_newGroupName ||
count($this->_groups
)) {
97 $groupAdditions = $this->_addImportedContactsToNewGroup($contactIds,
103 $form->set('groupAdditions', $groupAdditions);
107 if ($this->_newTagName ||
!empty($this->_tag
)) {
108 $tagAdditions = $this->_tagImportedContactsWithNewTag($contactIds,
113 $form->set('tagAdditions', $tagAdditions);
121 public function setFormVariables($form) {
122 $this->_parser
->set($form, CRM_Import_Parser
::MODE_IMPORT
);
126 * Add imported contacts.
128 * @param array $contactIds
129 * @param string $newGroupName
130 * @param string $newGroupDesc
131 * @param string $newGroupType
135 private function _addImportedContactsToNewGroup(
137 $newGroupName, $newGroupDesc, $newGroupType
143 /* Create a new group */
144 $newGroupType = $newGroupType ??
[];
146 'title' => $newGroupName,
147 'description' => $newGroupDesc,
148 'group_type' => $newGroupType,
151 $group = CRM_Contact_BAO_Group
::create($gParams);
152 $this->_groups
[] = $newGroupId = $group->id
;
155 if (is_array($this->_groups
)) {
156 $groupAdditions = [];
157 foreach ($this->_groups
as $groupId) {
158 $addCount = CRM_Contact_BAO_GroupContact
::addContactsToGroup($contactIds, $groupId);
159 $totalCount = $addCount[1];
160 if ($groupId == $newGroupId) {
161 $name = $newGroupName;
165 $name = $this->_allGroups
[$groupId];
168 $groupAdditions[] = array(
169 'url' => CRM_Utils_System
::url('civicrm/group/search',
170 'reset=1&force=1&context=smog&gid=' . $groupId
173 'added' => $totalCount,
174 'notAdded' => $addCount[2],
178 return $groupAdditions;
185 * @param string $newTagName
189 * @throws \CRM_Core_Exception
191 private function _tagImportedContactsWithNewTag(
193 $newTagName, $newTagDesc
198 /* Create a new Tag */
201 'name' => $newTagName,
202 'description' => $newTagDesc,
203 'is_selectable' => TRUE,
204 'used_for' => 'civicrm_contact',
206 $addedTag = CRM_Core_BAO_Tag
::add($tagParams);
207 $this->_tag
[$addedTag->id
] = 1;
211 if (is_array($this->_tag
)) {
213 foreach ($this->_tag
as $tagId => $val) {
214 $addTagCount = CRM_Core_BAO_EntityTag
::addEntitiesToTag($contactIds, $tagId, 'civicrm_contact', FALSE);
215 $totalTagCount = $addTagCount[1];
216 if (isset($addedTag) && $tagId == $addedTag->id
) {
217 $tagName = $newTagName;
221 $tagName = $this->_allTags
[$tagId];
224 $tagAdditions[] = array(
225 'url' => CRM_Utils_System
::url('civicrm/contact/search',
226 'reset=1&force=1&context=smog&id=' . $tagId
229 'added' => $totalTagCount,
230 'notAdded' => $addTagCount[2],
234 return $tagAdditions;