PageRenderTime 123ms CodeModel.GetById 5ms RepoModel.GetById 0ms app.codeStats 1ms

/vtiger6/modules/Import/actions/Data.php

https://bitbucket.org/thomashii/vtigercrm-6-for-postgresql
PHP | 568 lines | 503 code | 57 blank | 8 comment | 143 complexity | 813913592f6caad76b379174875e04db MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0, LGPL-2.1, GPL-2.0, GPL-3.0
  1. <?php
  2. /*+***********************************************************************************
  3. * The contents of this file are subject to the vtiger CRM Public License Version 1.0
  4. * ("License"); You may not use this file except in compliance with the License
  5. * The Original Code is: vtiger CRM Open Source
  6. * The Initial Developer of the Original Code is vtiger.
  7. * Portions created by vtiger are Copyright (C) vtiger.
  8. * All Rights Reserved.
  9. ************************************************************************************ */
  10. require_once dirname(__FILE__).'/../../../../include/Webservices/Create.php';
  11. require_once dirname(__FILE__).'/../../../../include/Webservices/Update.php';
  12. require_once dirname(__FILE__).'/../../../../include/Webservices/Delete.php';
  13. require_once dirname(__FILE__).'/../../../../include/Webservices/Revise.php';
  14. require_once dirname(__FILE__).'/../../../../include/Webservices/Retrieve.php';
  15. require_once dirname(__FILE__).'/../../../../include/Webservices/DataTransform.php';
  16. require_once dirname(__FILE__).'/../../../../vtlib/Vtiger/Utils.php';
  17. require_once dirname(__FILE__).'/../../../../data/CRMEntity.php';
  18. require_once dirname(__FILE__).'/../../../../include/QueryGenerator/QueryGenerator.php';
  19. require_once dirname(__FILE__).'/../../../../vtlib/Vtiger/Mailer.php';
  20. class Import_Data_Action extends Vtiger_Action_Controller {
  21. var $id;
  22. var $user;
  23. var $module;
  24. var $fieldMapping;
  25. var $mergeType;
  26. var $mergeFields;
  27. var $defaultValues;
  28. var $importedRecordInfo = array();
  29. var $batchImport = true;
  30. static $IMPORT_RECORD_NONE = 0;
  31. static $IMPORT_RECORD_CREATED = 1;
  32. static $IMPORT_RECORD_SKIPPED = 2;
  33. static $IMPORT_RECORD_UPDATED = 3;
  34. static $IMPORT_RECORD_MERGED = 4;
  35. static $IMPORT_RECORD_FAILED = 5;
  36. public function __construct($importInfo, $user) {
  37. $this->id = $importInfo['id'];
  38. $this->module = $importInfo['module'];
  39. $this->fieldMapping = $importInfo['field_mapping'];
  40. $this->mergeType = $importInfo['merge_type'];
  41. $this->mergeFields = $importInfo['merge_fields'];
  42. $this->defaultValues = $importInfo['default_values'];
  43. $this->user = $user;
  44. }
  45. public function process(Vtiger_Request $request) {
  46. return;
  47. }
  48. public function getDefaultFieldValues($moduleMeta) {
  49. static $cachedDefaultValues = array();
  50. if (isset($cachedDefaultValues[$this->module])) {
  51. return $cachedDefaultValues[$this->module];
  52. }
  53. $defaultValues = array();
  54. if (!empty($this->defaultValues)) {
  55. if(!is_array($this->defaultValues)) {
  56. $this->defaultValues = Zend_Json::decode($this->defaultValues);
  57. }
  58. if($this->defaultValues != null) {
  59. $defaultValues = $this->defaultValues;
  60. }
  61. }
  62. $moduleFields = $moduleMeta->getModuleFields();
  63. $moduleMandatoryFields = $moduleMeta->getMandatoryFields();
  64. foreach ($moduleMandatoryFields as $mandatoryFieldName) {
  65. if (empty($defaultValues[$mandatoryFieldName])) {
  66. $fieldInstance = $moduleFields[$mandatoryFieldName];
  67. if($fieldInstance->getFieldDataType() == 'owner') {
  68. $defaultValues[$mandatoryFieldName] = $this->user->id;
  69. } elseif($fieldInstance->getFieldDataType() != 'datetime'
  70. && $fieldInstance->getFieldDataType() != 'date'
  71. && $fieldInstance->getFieldDataType() != 'time' && $fieldInstance->getFieldDataType() != 'reference') {
  72. $defaultValues[$mandatoryFieldName] = '????';
  73. }
  74. }
  75. }
  76. foreach ($moduleFields as $fieldName => $fieldInstance) {
  77. $fieldDefaultValue = $fieldInstance->getDefault();
  78. if(empty ($defaultValues[$fieldName])) {
  79. if($fieldInstance->getUIType() == '52') {
  80. $defaultValues[$fieldName] = $this->user->id;
  81. } elseif(!empty($fieldDefaultValue)) {
  82. $defaultValues[$fieldName] = $fieldDefaultValue;
  83. }
  84. }
  85. }
  86. $cachedDefaultValues[$this->module] = $defaultValues;
  87. return $defaultValues;
  88. }
  89. public function import() {
  90. if(!$this->initializeImport()) return false;
  91. $this->importData();
  92. $this->finishImport();
  93. }
  94. public function importData() {
  95. $this->createRecords();
  96. $this->updateModuleSequenceNumber();
  97. }
  98. public function initializeImport() {
  99. $lockInfo = Import_Lock_Action::isLockedForModule($this->module);
  100. if ($lockInfo != null) {
  101. if($lockInfo['userid'] != $this->user->id) {
  102. Import_Utils_Helper::showImportLockedError($lockInfo);
  103. return false;
  104. } else {
  105. return true;
  106. }
  107. } else {
  108. Import_Lock_Action::lock($this->id, $this->module, $this->user);
  109. return true;
  110. }
  111. }
  112. public function finishImport() {
  113. Import_Lock_Action::unLock($this->user, $this->module);
  114. Import_Queue_Action::remove($this->id);
  115. }
  116. public function updateModuleSequenceNumber() {
  117. $moduleName = $this->module;
  118. $focus = CRMEntity::getInstance($moduleName);
  119. $focus->updateMissingSeqNumber($moduleName);
  120. }
  121. public function updateImportStatus($entryId, $entityInfo) {
  122. $adb = PearDatabase::getInstance();
  123. $recordId = null;
  124. if (!empty($entityInfo['id'])) {
  125. $entityIdComponents = vtws_getIdComponents($entityInfo['id']);
  126. $recordId = $entityIdComponents[1];
  127. }
  128. $adb->pquery('UPDATE ' . Import_Utils_Helper::getDbTableName($this->user) . ' SET status=?, recordid=? WHERE id=?',
  129. array($entityInfo['status'], $recordId, $entryId));
  130. }
  131. public function createRecords() {
  132. $adb = PearDatabase::getInstance();
  133. $moduleName = $this->module;
  134. $focus = CRMEntity::getInstance($moduleName);
  135. $moduleHandler = vtws_getModuleHandlerFromName($moduleName, $this->user);
  136. $moduleMeta = $moduleHandler->getMeta();
  137. $moduleObjectId = $moduleMeta->getEntityId();
  138. $moduleFields = $moduleMeta->getModuleFields();
  139. $tableName = Import_Utils_Helper::getDbTableName($this->user);
  140. $sql = 'SELECT * FROM ' . $tableName . ' WHERE status = '. Import_Data_Action::$IMPORT_RECORD_NONE;
  141. if($this->batchImport) {
  142. $configReader = new Import_Config_Model();
  143. $importBatchLimit = $configReader->get('importBatchLimit');
  144. $sql .= ' LIMIT '. $importBatchLimit;
  145. }
  146. $result = $adb->query($sql);
  147. $numberOfRecords = $adb->num_rows($result);
  148. if ($numberOfRecords <= 0) {
  149. return;
  150. }
  151. $fieldMapping = $this->fieldMapping;
  152. $fieldColumnMapping = $moduleMeta->getFieldColumnMapping();
  153. for ($i = 0; $i < $numberOfRecords; ++$i) {
  154. $row = $adb->raw_query_result_rowdata($result, $i);
  155. $rowId = $row['id'];
  156. $entityInfo = null;
  157. $fieldData = array();
  158. foreach ($fieldMapping as $fieldName => $index) {
  159. $fieldData[$fieldName] = $row[$fieldName];
  160. }
  161. $mergeType = $this->mergeType;
  162. $createRecord = false;
  163. if(method_exists($focus, 'importRecord')) {
  164. $entityInfo = $focus->importRecord($this, $fieldData);
  165. } else {
  166. if (!empty($mergeType) && $mergeType != Import_Utils_Helper::$AUTO_MERGE_NONE) {
  167. $queryGenerator = new QueryGenerator($moduleName, $this->user);
  168. $queryGenerator->initForDefaultCustomView();
  169. $fieldsList = array('id');
  170. $queryGenerator->setFields($fieldsList);
  171. $mergeFields = $this->mergeFields;
  172. foreach ($mergeFields as $index => $mergeField) {
  173. if ($index != 0) {
  174. $queryGenerator->addConditionGlue(QueryGenerator::$AND);
  175. }
  176. $comparisonValue = $fieldData[$mergeField];
  177. $fieldInstance = $moduleFields[$mergeField];
  178. if ($fieldInstance->getFieldDataType() == 'owner') {
  179. $userId = getUserId_Ol($comparisonValue);
  180. $comparisonValue = getUserFullName($userId);
  181. }
  182. if ($fieldInstance->getFieldDataType() == 'reference') {
  183. if(strpos($comparisonValue, '::::') > 0) {
  184. $referenceFileValueComponents = explode('::::', $comparisonValue);
  185. } else {
  186. $referenceFileValueComponents = explode(':::', $comparisonValue);
  187. }
  188. if (count($referenceFileValueComponents) > 1) {
  189. $comparisonValue = trim($referenceFileValueComponents[1]);
  190. }
  191. }
  192. $queryGenerator->addCondition($mergeField, $comparisonValue, 'e', '', '', '', true);
  193. }
  194. $query = $queryGenerator->getQuery();
  195. $duplicatesResult = $adb->query($query);
  196. $noOfDuplicates = $adb->num_rows($duplicatesResult);
  197. if ($noOfDuplicates > 0) {
  198. if ($mergeType == Import_Utils_Helper::$AUTO_MERGE_IGNORE) {
  199. $entityInfo['status'] = self::$IMPORT_RECORD_SKIPPED;
  200. } elseif ($mergeType == Import_Utils_Helper::$AUTO_MERGE_OVERWRITE ||
  201. $mergeType == Import_Utils_Helper::$AUTO_MERGE_MERGEFIELDS) {
  202. for ($index = 0; $index < $noOfDuplicates - 1; ++$index) {
  203. $duplicateRecordId = $adb->query_result($duplicatesResult, $index, $fieldColumnMapping['id']);
  204. $entityId = vtws_getId($moduleObjectId, $duplicateRecordId);
  205. vtws_delete($entityId, $this->user);
  206. }
  207. $baseRecordId = $adb->query_result($duplicatesResult, $noOfDuplicates - 1, $fieldColumnMapping['id']);
  208. $baseEntityId = vtws_getId($moduleObjectId, $baseRecordId);
  209. if ($mergeType == Import_Utils_Helper::$AUTO_MERGE_OVERWRITE) {
  210. $fieldData = $this->transformForImport($fieldData, $moduleMeta);
  211. $fieldData['id'] = $baseEntityId;
  212. $entityInfo = vtws_update($fieldData, $this->user);
  213. $entityInfo['status'] = self::$IMPORT_RECORD_UPDATED;
  214. }
  215. if ($mergeType == Import_Utils_Helper::$AUTO_MERGE_MERGEFIELDS) {
  216. $filteredFieldData = array();
  217. $defaultFieldValues = $this->getDefaultFieldValues($moduleMeta);
  218. foreach ($fieldData as $fieldName => $fieldValue) {
  219. if (!empty($fieldValue)) {
  220. $filteredFieldData[$fieldName] = $fieldValue;
  221. }
  222. }
  223. $existingFieldValues = vtws_retrieve($baseEntityId, $this->user);
  224. foreach ($existingFieldValues as $fieldName => $fieldValue) {
  225. if (empty($fieldValue)
  226. && empty($filteredFieldData[$fieldName])
  227. && !empty($defaultFieldValues[$fieldName])) {
  228. $filteredFieldData[$fieldName] = $fieldValue;
  229. }
  230. }
  231. $filteredFieldData = $this->transformForImport($filteredFieldData, $moduleMeta, false);
  232. $filteredFieldData['id'] = $baseEntityId;
  233. $entityInfo = vtws_revise($filteredFieldData, $this->user);
  234. $entityInfo['status'] = self::$IMPORT_RECORD_MERGED;
  235. }
  236. } else {
  237. $createRecord = true;
  238. }
  239. } else {
  240. $createRecord = true;
  241. }
  242. } else {
  243. $createRecord = true;
  244. }
  245. if ($createRecord) {
  246. $fieldData = $this->transformForImport($fieldData, $moduleMeta);
  247. if($fieldData == null) {
  248. $entityInfo = null;
  249. } else {
  250. $entityInfo = vtws_create($moduleName, $fieldData, $this->user);
  251. $entityInfo['status'] = self::$IMPORT_RECORD_CREATED;
  252. $entityIdComponents = vtws_getIdComponents($entityInfo['id']);
  253. $recordId = $entityIdComponents[1];
  254. updateRecordLabel($this->module, $recordId);
  255. }
  256. }
  257. }
  258. if($entityInfo == null) {
  259. $entityInfo = array('id' => null, 'status' => self::$IMPORT_RECORD_FAILED);
  260. }
  261. $this->importedRecordInfo[$rowId] = $entityInfo;
  262. $this->updateImportStatus($rowId, $entityInfo);
  263. }
  264. unset($result);
  265. return true;
  266. }
  267. public function transformForImport($fieldData, $moduleMeta, $fillDefault=true) {
  268. $moduleFields = $moduleMeta->getModuleFields();
  269. $defaultFieldValues = $this->getDefaultFieldValues($moduleMeta);
  270. foreach ($fieldData as $fieldName => $fieldValue) {
  271. $fieldInstance = $moduleFields[$fieldName];
  272. if ($fieldInstance->getFieldDataType() == 'owner') {
  273. $ownerId = getUserId_Ol($fieldValue);
  274. if (empty($ownerId)) {
  275. $ownerId = getGrpId($fieldValue);
  276. }
  277. if (empty($ownerId) && isset($defaultFieldValues[$fieldName])) {
  278. $ownerId = $defaultFieldValues[$fieldName];
  279. }
  280. if(empty($ownerId) ||
  281. !Import_Utils_Helper::hasAssignPrivilege($moduleMeta->getEntityName(), $ownerId)) {
  282. $ownerId = $this->user->id;
  283. }
  284. $fieldData[$fieldName] = $ownerId;
  285. } elseif ($fieldInstance->getFieldDataType() == 'reference') {
  286. $entityId = false;
  287. if (!empty($fieldValue)) {
  288. if(strpos($fieldValue, '::::') > 0) {
  289. $fieldValueDetails = explode('::::', $fieldValue);
  290. } else if (strpos($fieldValue, ':::') > 0) {
  291. $fieldValueDetails = explode(':::', $fieldValue);
  292. }
  293. if (count($fieldValueDetails) > 1) {
  294. $referenceModuleName = trim($fieldValueDetails[0]);
  295. $entityLabel = trim($fieldValueDetails[1]);
  296. $entityId = getEntityId($referenceModuleName, $entityLabel);
  297. } else {
  298. $referencedModules = $fieldInstance->getReferenceList();
  299. $entityLabel = $fieldValue;
  300. foreach ($referencedModules as $referenceModule) {
  301. $referenceModuleName = $referenceModule;
  302. if ($referenceModule == 'Users') {
  303. $referenceEntityId = getUserId_Ol($entityLabel);
  304. if(empty($referenceEntityId) ||
  305. !Import_Utils_Helper::hasAssignPrivilege($moduleMeta->getEntityName(), $referenceEntityId)) {
  306. $referenceEntityId = $this->user->id;
  307. }
  308. } else {
  309. $referenceEntityId = getEntityId($referenceModule, $entityLabel);
  310. }
  311. if ($referenceEntityId != 0) {
  312. $entityId = $referenceEntityId;
  313. break;
  314. }
  315. }
  316. }
  317. if ((empty($entityId) || $entityId == 0) && !empty($referenceModuleName)) {
  318. if(isPermitted($referenceModuleName, 'EditView') == 'yes') {
  319. try {
  320. $wsEntityIdInfo = $this->createEntityRecord($referenceModuleName, $entityLabel);
  321. $wsEntityId = $wsEntityIdInfo['id'];
  322. $entityIdComponents = vtws_getIdComponents($wsEntityId);
  323. $entityId = $entityIdComponents[1];
  324. } catch (Exception $e) {
  325. $entityId = false;
  326. }
  327. }
  328. }
  329. $fieldData[$fieldName] = $entityId;
  330. } else {
  331. $referencedModules = $fieldInstance->getReferenceList();
  332. if ($referencedModules[0] == 'Users') {
  333. if(isset($defaultFieldValues[$fieldName])) {
  334. $fieldData[$fieldName] = $defaultFieldValues[$fieldName];
  335. }
  336. if(empty($fieldData[$fieldName]) ||
  337. !Import_Utils_Helper::hasAssignPrivilege($moduleMeta->getEntityName(), $fieldData[$fieldName])) {
  338. $fieldData[$fieldName] = $this->user->id;
  339. }
  340. } else {
  341. $fieldData[$fieldName] = '';
  342. }
  343. }
  344. } elseif ($fieldInstance->getFieldDataType() == 'picklist') {
  345. global $default_charset;
  346. if (empty($fieldValue) && isset($defaultFieldValues[$fieldName])) {
  347. $fieldData[$fieldName] = $fieldValue = $defaultFieldValues[$fieldName];
  348. }
  349. $olderCacheEnable = Vtiger_Cache::$cacheEnable;
  350. Vtiger_Cache::$cacheEnable = false;
  351. $allPicklistDetails = $fieldInstance->getPicklistDetails();
  352. $allPicklistValues = array();
  353. foreach ($allPicklistDetails as $picklistDetails) {
  354. $allPicklistValues[] = $picklistDetails['value'];
  355. }
  356. $encodePicklistValue = htmlentities($fieldValue,ENT_QUOTES,$default_charset);
  357. if (!in_array($encodePicklistValue, $allPicklistValues)) {
  358. $moduleObject = Vtiger_Module::getInstance($moduleMeta->getEntityName());
  359. $fieldObject = Vtiger_Field::getInstance($fieldName, $moduleObject);
  360. $fieldObject->setPicklistValues(array($fieldValue));
  361. }
  362. Vtiger_Cache::$cacheEnable = $olderCacheEnable;
  363. } else {
  364. if ($fieldInstance->getFieldDataType() == 'datetime' && !empty($fieldValue)) {
  365. if($fieldValue == null || $fieldValue == '0000-00-00 00:00:00') {
  366. $fieldValue = '';
  367. }
  368. $valuesList = explode(' ', $fieldValue);
  369. if(count($valuesList) == 1) $fieldValue = '';
  370. $fieldValue = getValidDBInsertDateTimeValue($fieldValue);
  371. if (preg_match("/^[0-9]{2,4}[-][0-1]{1,2}?[0-9]{1,2}[-][0-3]{1,2}?[0-9]{1,2} ([0-1][0-9]|[2][0-3])([:][0-5][0-9]){1,2}$/",
  372. $fieldValue) == 0) {
  373. $fieldValue = '';
  374. }
  375. $fieldData[$fieldName] = $fieldValue;
  376. }
  377. if ($fieldInstance->getFieldDataType() == 'date' && !empty($fieldValue)) {
  378. if($fieldValue == null || $fieldValue == '0000-00-00') {
  379. $fieldValue = '';
  380. }
  381. $fieldValue = getValidDBInsertDateValue($fieldValue);
  382. if (preg_match("/^[0-9]{2,4}[-][0-1]{1,2}?[0-9]{1,2}[-][0-3]{1,2}?[0-9]{1,2}$/", $fieldValue) == 0) {
  383. $fieldValue = '';
  384. }
  385. $fieldData[$fieldName] = $fieldValue;
  386. }
  387. if (empty($fieldValue) && isset($defaultFieldValues[$fieldName])) {
  388. $fieldData[$fieldName] = $fieldValue = $defaultFieldValues[$fieldName];
  389. }
  390. }
  391. }
  392. if($fillDefault) {
  393. foreach($defaultFieldValues as $fieldName => $fieldValue) {
  394. if (!isset($fieldData[$fieldName])) {
  395. $fieldData[$fieldName] = $defaultFieldValues[$fieldName];
  396. }
  397. }
  398. }
  399. foreach ($moduleFields as $fieldName => $fieldInstance) {
  400. if(empty($fieldData[$fieldName]) && $fieldInstance->isMandatory()) {
  401. return null;
  402. }
  403. }
  404. return DataTransform::sanitizeData($fieldData, $moduleMeta);
  405. }
  406. public function createEntityRecord($moduleName, $entityLabel) {
  407. $moduleHandler = vtws_getModuleHandlerFromName($moduleName, $this->user);
  408. $moduleMeta = $moduleHandler->getMeta();
  409. $moduleFields = $moduleMeta->getModuleFields();
  410. $mandatoryFields = $moduleMeta->getMandatoryFields();
  411. $entityNameFieldsString = $moduleMeta->getNameFields();
  412. $entityNameFields = explode(',', $entityNameFieldsString);
  413. $fieldData = array();
  414. foreach ($entityNameFields as $entityNameField) {
  415. $entityNameField = trim($entityNameField);
  416. if (in_array($entityNameField, $mandatoryFields)) {
  417. $fieldData[$entityNameField] = $entityLabel;
  418. }
  419. }
  420. foreach ($mandatoryFields as $mandatoryField) {
  421. if (empty($fieldData[$mandatoryField])) {
  422. $fieldInstance = $moduleFields[$mandatoryField];
  423. if ($fieldInstance->getFieldDataType() == 'owner') {
  424. $fieldData[$mandatoryField] = $this->user->id;
  425. } else if (!in_array($mandatoryField, $entityNameFields) && $fieldInstance->getFieldDataType() != 'reference') {
  426. $fieldData[$mandatoryField] = '????';
  427. }
  428. }
  429. }
  430. $fieldData = DataTransform::sanitizeData($fieldData, $moduleMeta);
  431. $entityIdInfo = vtws_create($moduleName, $fieldData, $this->user);
  432. $focus = CRMEntity::getInstance($moduleName);
  433. $focus->updateMissingSeqNumber($moduleName);
  434. return $entityIdInfo;
  435. }
  436. public function getImportStatusCount() {
  437. $adb = PearDatabase::getInstance();
  438. $tableName = Import_Utils_Helper::getDbTableName($this->user);
  439. $result = $adb->query('SELECT status FROM '.$tableName);
  440. $statusCount = array('TOTAL' => 0, 'IMPORTED' => 0, 'FAILED' => 0, 'PENDING' => 0,
  441. 'CREATED' => 0, 'SKIPPED' => 0, 'UPDATED' => 0, 'MERGED' => 0);
  442. if($result) {
  443. $noOfRows = $adb->num_rows($result);
  444. $statusCount['TOTAL'] = $noOfRows;
  445. for($i=0; $i<$noOfRows; ++$i) {
  446. $status = $adb->query_result($result, $i, 'status');
  447. if(self::$IMPORT_RECORD_NONE == $status) {
  448. $statusCount['PENDING']++;
  449. } elseif(self::$IMPORT_RECORD_FAILED == $status) {
  450. $statusCount['FAILED']++;
  451. } else {
  452. $statusCount['IMPORTED']++;
  453. switch($status) {
  454. case self::$IMPORT_RECORD_CREATED : $statusCount['CREATED']++;
  455. break;
  456. case self::$IMPORT_RECORD_SKIPPED : $statusCount['SKIPPED']++;
  457. break;
  458. case self::$IMPORT_RECORD_UPDATED : $statusCount['UPDATED']++;
  459. break;
  460. case self::$IMPORT_RECORD_MERGED : $statusCount['MERGED']++;
  461. break;
  462. }
  463. }
  464. }
  465. }
  466. return $statusCount;
  467. }
  468. public static function runScheduledImport() {
  469. global $current_user;
  470. $scheduledImports = self::getScheduledImport();
  471. $vtigerMailer = new Vtiger_Mailer();
  472. $vtigerMailer->IsHTML(true);
  473. foreach ($scheduledImports as $scheduledId => $importDataController) {
  474. $current_user = $importDataController->user;
  475. $importDataController->batchImport = false;
  476. if(!$importDataController->initializeImport()) { continue; }
  477. $importDataController->importData();
  478. $importStatusCount = $importDataController->getImportStatusCount();
  479. $emailSubject = 'vtiger CRM - Scheduled Import Report for '.$importDataController->module;
  480. $viewer = new Import_UI_Viewer();
  481. $viewer->assign('FOR_MODULE', $importDataController->module);
  482. $viewer->assign('IMPORT_RESULT', $importStatusCount);
  483. $importResult = $viewer->fetch('Import_Result_Details.tpl');
  484. $importResult = str_replace('align="center"', '', $importResult);
  485. $emailData = 'vtiger CRM has just completed your import process. <br/><br/>' .
  486. $importResult . '<br/><br/>'.
  487. 'We recommend you to login to the CRM and check few records to confirm that the import has been successful.';
  488. $userName = getFullNameFromArray('Users', $importDataController->user->column_fields);
  489. $userEmail = $importDataController->user->email1;
  490. $vtigerMailer->to = array( array($userEmail, $userName));
  491. $vtigerMailer->Subject = $emailSubject;
  492. $vtigerMailer->Body = $emailData;
  493. $vtigerMailer->Send();
  494. $importDataController->finishImport();
  495. }
  496. Vtiger_Mailer::dispatchQueue(null);
  497. }
  498. public static function getScheduledImport() {
  499. $scheduledImports = array();
  500. $importQueue = Import_Queue_Action::getAll(Import_Queue_Action::$IMPORT_STATUS_SCHEDULED);
  501. foreach($importQueue as $importId => $importInfo) {
  502. $userId = $importInfo['user_id'];
  503. $user = new Users();
  504. $user->id = $userId;
  505. $user->retrieve_entity_info($userId, 'Users');
  506. $scheduledImports[$importId] = new Import_Data_Action($importInfo, $user);
  507. }
  508. return $scheduledImports;
  509. }
  510. }
  511. ?>