Remove unreachable code
[civicrm-core.git] / CRM / Contact / Import / ImportJob.php
CommitLineData
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 21class 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}