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