public static function render($userInputObject, $user) { global $list_max_entries_per_page; $adb = PearDatabase::getInstance(); $viewer = new Import_UI_Viewer(); $ownerId = $userInputObject->get('foruser'); $owner = new Users(); $owner->id = $ownerId; $owner->retrieve_entity_info($ownerId, 'Users'); if (!is_admin($user) && $user->id != $owner->id) { $viewer->display('OperationNotPermitted.tpl', 'Vtiger'); exit; } $userDBTableName = Import_Utils::getDbTableName($owner); $moduleName = $userInputObject->get('module'); $moduleMeta = self::getModuleMeta($moduleName, $user); $result = $adb->query('SELECT recordid FROM ' . $userDBTableName . ' WHERE status is NOT NULL AND recordid IS NOT NULL'); $noOfRecords = $adb->num_rows($result); $importedRecordIds = array(); for ($i = 0; $i < $noOfRecords; ++$i) { $importedRecordIds[] = $adb->query_result($result, $i, 'recordid'); } if (count($importedRecordIds) == 0) { $importedRecordIds[] = 0; } $focus = CRMEntity::getInstance($moduleName); $queryGenerator = new QueryGenerator($moduleName, $user); $customView = new CustomView($moduleName); $viewId = $customView->getViewIdByName('All', $moduleName); $queryGenerator->initForCustomViewById($viewId); $list_query = $queryGenerator->getQuery(); // Fetch only last imported records $list_query .= ' AND ' . $focus->table_name . '.' . $focus->table_index . ' IN (' . implode(',', $importedRecordIds) . ')'; if (PerformancePrefs::getBoolean('LISTVIEW_COMPUTE_PAGE_COUNT', false) === true) { $count_result = $adb->query(mkCountQuery($list_query)); $noofrows = $adb->query_result($count_result, 0, "count"); } else { $noofrows = null; } $start = ListViewSession::getRequestCurrentPage($moduleName, $list_query, $viewId, false); $navigation_array = VT_getSimpleNavigationValues($start, $list_max_entries_per_page, $noofrows); $limit_start_rec = ($start - 1) * $list_max_entries_per_page; $list_result = $adb->pquery($list_query . " LIMIT {$limit_start_rec}, {$list_max_entries_per_page}", array()); $recordListRangeMsg = getRecordRangeMessage($list_result, $limit_start_rec, $noofrows); $viewer->assign('recordListRange', $recordListRangeMsg); $controller = new ListViewController($adb, $user, $queryGenerator); $listview_header = $controller->getListViewHeader($focus, $moduleName, $url_string, $sorder, $order_by, true); $listview_entries = $controller->getListViewEntries($focus, $moduleName, $list_result, $navigation_array, true); $viewer->assign('CURRENT_PAGE', $start); $viewer->assign('LISTHEADER', $listview_header); $viewer->assign('LISTENTITY', $listview_entries); $viewer->assign('FOR_MODULE', $moduleName); $viewer->assign('FOR_USER', $ownerId); $isAjax = $userInputObject->get('ajax'); if (!empty($isAjax)) { echo $viewer->fetch('ListViewEntries.tpl'); } else { $viewer->display('ImportListView.tpl'); } }
public function getImportStatusCount() { $adb = PearDatabase::getInstance(); $tableName = Import_Utils::getDbTableName($this->user); $result = $adb->query('SELECT status FROM ' . $tableName); $statusCount = array('TOTAL' => 0, 'IMPORTED' => 0, 'FAILED' => 0, 'PENDING' => 0, 'CREATED' => 0, 'SKIPPED' => 0, 'UPDATED' => 0, 'MERGED' => 0); if ($result) { $noOfRows = $adb->num_rows($result); $statusCount['TOTAL'] = $noOfRows; for ($i = 0; $i < $noOfRows; ++$i) { $status = $adb->query_result($result, $i, 'status'); if (self::$IMPORT_RECORD_NONE == $status) { $statusCount['PENDING']++; } elseif (self::$IMPORT_RECORD_FAILED == $status) { $statusCount['FAILED']++; } else { $statusCount['IMPORTED']++; switch ($status) { case self::$IMPORT_RECORD_CREATED: $statusCount['CREATED']++; break; case self::$IMPORT_RECORD_SKIPPED: $statusCount['SKIPPED']++; break; case self::$IMPORT_RECORD_UPDATED: $statusCount['UPDATED']++; break; case self::$IMPORT_RECORD_MERGED: $statusCount['MERGED']++; break; } } } } return $statusCount; }
public static function process($requestObject, $user) { $moduleName = $requestObject->get('module'); $mode = $requestObject->get('mode'); if($mode == 'undo_import') { Import_Index_Controller::undoLastImport($requestObject, $user); exit; } elseif($mode == 'listview') { Import_ListView_Controller::render($requestObject, $user); exit; } elseif($mode == 'delete_map') { Import_Index_Controller::deleteMap($requestObject, $user); exit; } elseif($mode == 'clear_corrupted_data') { Import_Utils::clearUserImportInfo($user); } elseif($mode == 'cancel_import') { $importId = $requestObject->get('import_id'); $importInfo = Import_Queue_Controller::getImportInfoById($importId); if($importInfo != null) { if($importInfo['user_id'] == $user->id || is_admin($user)) { $importuser = new Users(); $importuser->id = $importInfo['user_id']; $importuser->retrieve_entity_info($importInfo['user_id'], 'Users'); $importDataController = new Import_Data_Controller($importInfo, $importuser); $importStatusCount = $importDataController->getImportStatusCount(); $importDataController->finishImport(); Import_Controller::showResult($importInfo, $importStatusCount); } exit; } } // Check if import on the module is locked $lockInfo = Import_Lock_Controller::isLockedForModule($moduleName); if($lockInfo != null) { $lockedBy = $lockInfo['userid']; if($user->id != $lockedBy && !is_admin($user)) { Import_Utils::showImportLockedError($lockInfo); exit; } else { if($mode == 'continue_import' && $user->id == $lockedBy) { $importController = new Import_Controller($requestObject, $user); $importController->triggerImport(true); } else { $importInfo = Import_Queue_Controller::getImportInfoById($lockInfo['importid']); $lockOwner = $user; if($user->id != $lockedBy) { $lockOwner = new Users(); $lockOwner->id = $lockInfo['userid']; $lockOwner->retrieve_entity_info( $lockInfo['userid'], 'Users'); } Import_Controller::showImportStatus($importInfo, $lockOwner); } exit; } } if(Import_Utils::isUserImportBlocked($user)) { $importInfo = Import_Queue_Controller::getUserCurrentImportInfo($user); if($importInfo != null) { Import_Controller::showImportStatus($importInfo, $user); exit; } else { Import_Utils::showImportTableBlockedError($moduleName, $user); exit; } } Import_Utils::clearUserImportInfo($user); if($mode == 'upload_and_parse') { if(Import_Index_Controller::validateFileUpload($requestObject)) { Import_Index_Controller::loadAdvancedSettings($requestObject, $user); exit; } } elseif($mode == 'import') { Import_Controller::import($requestObject, $user); exit; } Import_Index_Controller::loadBasicSettings($requestObject, $user); }
public function addRecordToDBFullCSV($columnNames, $fieldValues) { $adb = PearDatabase::getInstance(); $fieldValues = array_values($fieldValues); $tableName = Import_Utils::getDbTableName($this->user) . "_fullcsv"; $adb->pquery('INSERT INTO ' . $tableName . ' (' . implode(',', $columnNames) . ') VALUES (' . generateQuestionMarks($fieldValues) . ')', $fieldValues); }
function createRecords($obj) { global $adb, $VTIGER_BULK_SAVE_MODE; $moduleName = $obj->module; $moduleHandler = vtws_getModuleHandlerFromName($moduleName, $obj->user); $moduleMeta = $moduleHandler->getMeta(); $moduleObjectId = $moduleMeta->getEntityId(); $moduleFields = $moduleMeta->getModuleFields(); include_once 'include/fields/InventoryLineField.php'; $ilfields = new InventoryLineField(); $moduleFields = array_merge($moduleFields, $ilfields->getInventoryLineFieldsByObject()); $focus = CRMEntity::getInstance($moduleName); $wsrs = $adb->pquery('select id from vtiger_ws_entity where name=?', array('Products')); if ($wsrs and $adb->num_rows($wsrs) == 1) { $pdowsid = $adb->query_result($wsrs, 0, 0) . 'x'; } else { $pdowsid = '0x'; } $wsrs = $adb->pquery('select id from vtiger_ws_entity where name=?', array('Services')); if ($wsrs and $adb->num_rows($wsrs) == 1) { $srvwsid = $adb->query_result($wsrs, 0, 0) . 'x'; } else { $srvwsid = '0x'; } $wsrs = $adb->pquery('select id from vtiger_ws_entity where name=?', array('Users')); if ($wsrs and $adb->num_rows($wsrs) == 1) { $usrwsid = $adb->query_result($wsrs, 0, 0) . 'x'; } else { $usrwsid = '0x'; } $tableName = Import_Utils::getDbTableName($obj->user); $sql = 'SELECT * FROM ' . $tableName . ' WHERE status = ' . Import_Data_Controller::$IMPORT_RECORD_NONE . ' GROUP BY subject'; if ($obj->batchImport) { $importBatchLimit = GlobalVariable::getVariable('Import_Batch_Limit', 100); $sql .= ' LIMIT ' . $importBatchLimit; } $result = $adb->query($sql); $numberOfRecords = $adb->num_rows($result); if ($numberOfRecords <= 0) { return; } $fieldMapping = $obj->fieldMapping; $fieldColumnMapping = $moduleMeta->getFieldColumnMapping(); for ($i = 0; $i < $numberOfRecords; ++$i) { $row = $adb->raw_query_result_rowdata($result, $i); $rowId = $row['id']; $entityInfo = null; $fieldData = array(); $lineItems = array(); $subject = $row['subject']; $sql = 'SELECT * FROM ' . $tableName . ' WHERE status = ' . Import_Data_Controller::$IMPORT_RECORD_NONE . ' AND subject = "' . str_replace("\"", "\\\"", $subject) . '"'; $subjectResult = $adb->query($sql); $count = $adb->num_rows($subjectResult); $subjectRowIDs = array(); for ($j = 0; $j < $count; ++$j) { $subjectRow = $adb->raw_query_result_rowdata($subjectResult, $j); if ($subjectRow['productid'] == '' || $subjectRow['quantity'] == '' || $subjectRow['listprice'] == '') { continue; } array_push($subjectRowIDs, $subjectRow['id']); $lineItemData = array(); $lineItemData['discount'] = 0; foreach ($fieldMapping as $fieldName => $index) { if ($moduleFields[$fieldName]->getTableName() == 'vtiger_inventoryproductrel') { if ($fieldName == 'productid') { $fieldValue = $subjectRow[$fieldName]; if (strpos($fieldValue, '::::') > 0) { $fieldValueDetails = explode('::::', $fieldValue); } else { if (strpos($fieldValue, ':::') > 0) { $fieldValueDetails = explode(':::', $fieldValue); } else { $fieldValueDetails = $fieldValue; } } if (count($fieldValueDetails) > 1) { $referenceModuleName = trim($fieldValueDetails[0]); $entityLabel = trim($fieldValueDetails[1]); $entityId = getEntityId($referenceModuleName, $entityLabel); } else { $referencedModules = array('Products', 'Services'); $entityLabel = $fieldValue; foreach ($referencedModules as $referenceModule) { $referenceModuleName = $referenceModule; $referenceEntityId = getEntityId($referenceModule, $entityLabel); if ($referenceEntityId != 0) { $entityId = $referenceEntityId; break; } } } if (empty($entityId) and in_array($referenceModuleName, array('Products', 'Services'))) { $pdinfo = array(); if ($referenceModuleName == 'Services') { $pdoinfo['servicename'] = $entityLabel; } else { $pdoinfo['productname'] = $entityLabel; } $pdoinfo['assigned_user_id'] = $usrwsid . $obj->user->id; try { $VTIGER_BULK_SAVE_MODE = false; $psInfo = vtws_create($referenceModuleName, $pdoinfo, $obj->user); $VTIGER_BULK_SAVE_MODE = true; $entityId = $psInfo['id']; } catch (Exception $e) { continue 2; // ignore this line } } else { if ($referenceModuleName == 'Services') { $entityId = $srvwsid . $entityId; } else { $entityId = $pdowsid . $entityId; } } $lineItemData[$fieldName] = $entityId; } else { $lineItemData[$fieldName] = $subjectRow[$fieldName]; if ($fieldName == 'discount_amount' and $subjectRow[$fieldName] > 0) { $lineItemData['discount'] = 1; $lineItemData['discount_type'] = 'amount'; } if ($fieldName == 'discount_percent' and $subjectRow[$fieldName] > 0) { $lineItemData['discount'] = 1; $lineItemData['discount_percentage'] = $subjectRow[$fieldName]; $lineItemData['discount_type'] = 'percentage'; } if ($fieldName == 'quantity') { $lineItemData['qty'] = $subjectRow[$fieldName]; } } } } array_push($lineItems, $lineItemData); } foreach ($fieldMapping as $fieldName => $index) { $fieldData[$fieldName] = $row[strtolower($fieldName)]; if ($fieldName == 'hdnTaxType') { $fieldData['taxtype'] = $row[strtolower($fieldName)]; } if ($fieldName == 'txtAdjustment' and $fieldData[$fieldName] != 0) { $fieldData['adjustmentType'] = 'add'; $fieldData['adjustment'] = $fieldData[$fieldName]; } } if (!array_key_exists('assigned_user_id', $fieldData)) { $fieldData['assigned_user_id'] = $obj->user->id; } if (!empty($lineItems)) { if (method_exists($focus, 'importRecord')) { $entityInfo = $focus->importRecord($obj, $fieldData, $lineItems); } } if ($entityInfo == null) { $entityInfo = array('id' => null, 'status' => $obj->getImportRecordStatus('failed')); } foreach ($subjectRowIDs as $id) { $obj->importedRecordInfo[$id] = $entityInfo; $obj->updateImportStatus($id, $entityInfo); } } unset($result); return true; }
public function copyFromFileToDB() { $fileReader = Import_Utils::getFileReader($this->userInputObject, $this->user); $fileReader->read(); $fileReader->deleteFile(); if ($fileReader->getStatus() == 'success') { $this->numberOfRecords = $fileReader->getNumberOfRecordsRead(); return true; } else { Import_Utils::showErrorPage(getTranslatedString('ERR_FILE_READ_FAILED', 'Import') . ' - ' . getTranslatedString($fileReader->getErrorMessage(), 'Import')); return false; } }
public function addRecordToDB($columnNames, $fieldValues) { $adb = PearDatabase::getInstance(); $tableName = Import_Utils::getDbTableName($this->user); $adb->pquery('INSERT INTO ' . $tableName . ' (' . implode(',', $columnNames) . ') VALUES (' . generateQuestionMarks($fieldValues) . ')', $fieldValues); $this->numberOfRecordsRead++; }