Stop setting now-unused updateWithId
[civicrm-core.git] / CRM / Contact / Import / ImportJob.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
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 +--------------------------------------------------------------------+
10 */
11
12 /**
13 *
14 * @package CRM
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
16 */
17
18 /**
19 * This class acts like a psuedo-BAO for transient import job tables.
20 */
21 class CRM_Contact_Import_ImportJob {
22
23 protected $_onDuplicate;
24 protected $_dedupe;
25 protected $_newGroupName;
26 protected $_newGroupDesc;
27 protected $_newGroupType;
28 protected $_groups;
29 protected $_allGroups;
30 protected $_newTagName;
31 protected $_newTagDesc;
32 protected $_tag;
33 protected $_allTags;
34
35 protected $_mapper;
36 protected $_mapperKeys = [];
37 protected $_mapFields;
38
39 /**
40 * @var CRM_Contact_Import_Parser_Contact
41 */
42 protected $_parser;
43
44 protected $_userJobID;
45
46 /**
47 * Has the job completed.
48 *
49 * @return bool
50 */
51 public function isComplete(): bool {
52 return $this->_parser->isComplete();
53 }
54
55 /**
56 * @param array $params
57 */
58 public function setJobParams(&$params) {
59 foreach ($params as $param => $value) {
60 $fldName = "_$param";
61 $this->$fldName = $value;
62 }
63 }
64
65 /**
66 * @param CRM_Core_Form $form
67 * @param int $timeout
68 */
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;
73 }
74
75 $this->_parser = new CRM_Contact_Import_Parser_Contact(
76 $this->_mapperKeys
77 );
78 $this->_parser->setUserJobID($this->_userJobID);
79 $this->_parser->run(
80 [],
81 CRM_Import_Parser::MODE_IMPORT,
82 $this->_statusID
83 );
84
85 $contactIds = $this->_parser->getImportedContacts();
86
87 //get the related contactIds. CRM-2926
88 $relatedContactIds = $this->_parser->getRelatedImportedContacts();
89 if ($relatedContactIds) {
90 $contactIds = array_merge($contactIds, $relatedContactIds);
91 }
92
93 if ($this->_newGroupName || count($this->_groups)) {
94 $groupAdditions = $this->_addImportedContactsToNewGroup($contactIds,
95 $this->_newGroupName,
96 $this->_newGroupDesc,
97 $this->_newGroupType
98 );
99 if ($form) {
100 $form->set('groupAdditions', $groupAdditions);
101 }
102 }
103
104 if ($this->_newTagName || !empty($this->_tag)) {
105 $tagAdditions = $this->_tagImportedContactsWithNewTag($contactIds,
106 $this->_newTagName,
107 $this->_newTagDesc
108 );
109 if ($form) {
110 $form->set('tagAdditions', $tagAdditions);
111 }
112 }
113 }
114
115 /**
116 * @param $form
117 */
118 public function setFormVariables($form) {
119 $this->_parser->set($form, CRM_Import_Parser::MODE_IMPORT);
120 }
121
122 /**
123 * Add imported contacts.
124 *
125 * @param array $contactIds
126 * @param string $newGroupName
127 * @param string $newGroupDesc
128 * @param string $newGroupType
129 *
130 * @return array|bool
131 */
132 private function _addImportedContactsToNewGroup(
133 $contactIds,
134 $newGroupName, $newGroupDesc, $newGroupType
135 ) {
136
137 $newGroupId = NULL;
138
139 if ($newGroupName) {
140 /* Create a new group */
141 $newGroupType = $newGroupType ?? [];
142 $gParams = array(
143 'title' => $newGroupName,
144 'description' => $newGroupDesc,
145 'group_type' => $newGroupType,
146 'is_active' => TRUE,
147 );
148 $group = CRM_Contact_BAO_Group::create($gParams);
149 $this->_groups[] = $newGroupId = $group->id;
150 }
151
152 if (is_array($this->_groups)) {
153 $groupAdditions = [];
154 foreach ($this->_groups as $groupId) {
155 $addCount = CRM_Contact_BAO_GroupContact::addContactsToGroup($contactIds, $groupId);
156 $totalCount = $addCount[1];
157 if ($groupId == $newGroupId) {
158 $name = $newGroupName;
159 $new = TRUE;
160 }
161 else {
162 $name = $this->_allGroups[$groupId];
163 $new = FALSE;
164 }
165 $groupAdditions[] = array(
166 'url' => CRM_Utils_System::url('civicrm/group/search',
167 'reset=1&force=1&context=smog&gid=' . $groupId
168 ),
169 'name' => $name,
170 'added' => $totalCount,
171 'notAdded' => $addCount[2],
172 'new' => $new,
173 );
174 }
175 return $groupAdditions;
176 }
177 return FALSE;
178 }
179
180 /**
181 * @param $contactIds
182 * @param string $newTagName
183 * @param $newTagDesc
184 *
185 * @return array|bool
186 * @throws \CRM_Core_Exception
187 */
188 private function _tagImportedContactsWithNewTag(
189 $contactIds,
190 $newTagName, $newTagDesc
191 ) {
192
193 $newTagId = NULL;
194 if ($newTagName) {
195 /* Create a new Tag */
196
197 $tagParams = array(
198 'name' => $newTagName,
199 'description' => $newTagDesc,
200 'is_selectable' => TRUE,
201 'used_for' => 'civicrm_contact',
202 );
203 $addedTag = CRM_Core_BAO_Tag::add($tagParams);
204 $this->_tag[$addedTag->id] = 1;
205 }
206 //add Tag to Import
207
208 if (is_array($this->_tag)) {
209 $tagAdditions = [];
210 foreach ($this->_tag as $tagId => $val) {
211 $addTagCount = CRM_Core_BAO_EntityTag::addEntitiesToTag($contactIds, $tagId, 'civicrm_contact', FALSE);
212 $totalTagCount = $addTagCount[1];
213 if (isset($addedTag) && $tagId == $addedTag->id) {
214 $tagName = $newTagName;
215 $new = TRUE;
216 }
217 else {
218 $tagName = $this->_allTags[$tagId];
219 $new = FALSE;
220 }
221 $tagAdditions[] = array(
222 'url' => CRM_Utils_System::url('civicrm/contact/search',
223 'reset=1&force=1&context=smog&id=' . $tagId
224 ),
225 'name' => $tagName,
226 'added' => $totalTagCount,
227 'notAdded' => $addTagCount[2],
228 'new' => $new,
229 );
230 }
231 return $tagAdditions;
232 }
233 return FALSE;
234 }
235
236 }