/** * @see SugarView::display() */ public function display() { global $mod_strings, $app_list_strings, $app_strings, $current_user, $import_bean_map, $import_mod_strings; $this->instruction = 'LBL_SELECT_UPLOAD_INSTRUCTION'; $this->ss->assign('INSTRUCTION', $this->getInstruction()); $this->ss->assign("MODULE_TITLE", $this->getModuleTitle(false)); $this->ss->assign("IMP", $import_mod_strings); $this->ss->assign("CURRENT_STEP", $this->currentStep); $this->ss->assign("TYPE", !empty($_REQUEST['type']) ? $_REQUEST['type'] : "import"); $this->ss->assign("CUSTOM_DELIMITER", !empty($_REQUEST['custom_delimiter']) ? $_REQUEST['custom_delimiter'] : ","); $this->ss->assign("CUSTOM_ENCLOSURE", htmlentities(!empty($_REQUEST['custom_enclosure']) && $_REQUEST['custom_enclosure'] != 'other' ? $_REQUEST['custom_enclosure'] : (!empty($_REQUEST['custom_enclosure_other']) ? $_REQUEST['custom_enclosure_other'] : ""))); $this->ss->assign("IMPORT_MODULE", $_REQUEST['import_module']); $this->ss->assign("HEADER", $app_strings['LBL_IMPORT'] . " " . $mod_strings['LBL_MODULE_NAME']); $this->ss->assign("JAVASCRIPT", $this->_getJS()); $this->ss->assign("SAMPLE_URL", "<a href=\"javascript: void(0);\" onclick=\"window.location.href='index.php?entryPoint=export&module=" . $_REQUEST['import_module'] . "&action=index&all=true&sample=true'\" >" . $mod_strings['LBL_EXAMPLE_FILE'] . "</a>"); $displayBackBttn = isset($_REQUEST['action']) && $_REQUEST['action'] == 'Step2' && isset($_REQUEST['current_step']) && $_REQUEST['current_step'] !== '2' ? TRUE : FALSE; //bug 51239 $this->ss->assign("displayBackBttn", $displayBackBttn); // get user defined import maps $is_admin = is_admin($current_user); if ($is_admin) { $savedMappingHelpText = $mod_strings['LBL_MY_SAVED_ADMIN_HELP']; } else { $savedMappingHelpText = $mod_strings['LBL_MY_SAVED_HELP']; } $this->ss->assign('savedMappingHelpText', $savedMappingHelpText); $this->ss->assign('is_admin', $is_admin); $import_map_seed = new ImportMap(); $custom_imports_arr = $import_map_seed->retrieve_all_by_string_fields(array('assigned_user_id' => $current_user->id, 'is_published' => 'no', 'module' => $_REQUEST['import_module'])); if (count($custom_imports_arr)) { $custom = array(); foreach ($custom_imports_arr as $import) { $custom[] = array("IMPORT_NAME" => $import->name, "IMPORT_ID" => $import->id); } $this->ss->assign('custom_imports', $custom); } // get globally defined import maps $published_imports_arr = $import_map_seed->retrieve_all_by_string_fields(array('is_published' => 'yes', 'module' => $_REQUEST['import_module'])); if (count($published_imports_arr)) { $published = array(); foreach ($published_imports_arr as $import) { $published[] = array("IMPORT_NAME" => $import->name, "IMPORT_ID" => $import->id); } $this->ss->assign('published_imports', $published); } //End custom mapping // add instructions for anything other than custom_delimited $instructions = array(); $lang_key = "CUSTOM"; for ($i = 1; isset($mod_strings["LBL_{$lang_key}_NUM_{$i}"]); $i++) { $instructions[] = array("STEP_NUM" => $mod_strings["LBL_NUM_{$i}"], "INSTRUCTION_STEP" => $mod_strings["LBL_{$lang_key}_NUM_{$i}"]); } $this->ss->assign("INSTRUCTIONS_TITLE", $mod_strings["LBL_IMPORT_{$lang_key}_TITLE"]); $this->ss->assign("instructions", $instructions); $content = $this->ss->fetch('modules/Import/tpls/step2.tpl'); $this->ss->assign("CONTENT", $content); $this->ss->display('modules/Import/tpls/wizardWrapper.tpl'); }
private function getImportMap() { if (!empty($_REQUEST['source_id'])) { $import_map_seed = new ImportMap(); $import_map_seed->retrieve($_REQUEST['source_id'], false); return $import_map_seed->getMapping(); } else { return array(); } }
public function testSaveMappingFileSavesNumberFieldAssociationCorrectly() { $lead = new Lead(); $importSource = new ImportFile($this->testFile, ',', '', false); $importer = new Bug61172TestImporterMock($importSource, $lead); $importer->saveMappingFile(); $mappingFile = new ImportMap(); $mappingFile->retrieve_by_string_fields(array('name' => $_REQUEST['save_map_as'])); $this->assertNotEmpty($mappingFile->content); $contentFields = explode('&', $mappingFile->content); $this->assertContains('1=status', $contentFields, "Field status should be associated with #1"); $mappingFile->mark_deleted($mappingFile->id); }
// SAVE MAPPING IF REQUESTED if (isset($_REQUEST['save_map']) && $_REQUEST['save_map'] == 'on' && isset($_REQUEST['save_map_as']) && $_REQUEST['save_map_as'] != '') { p("save map"); $serialized_mapping = ''; if ($has_header) { foreach ($col_pos_to_field as $pos => $field_name) { if (isset($firstrow[$pos]) && isset($field_name)) { $header_to_field[$firstrow[$pos]] = $field_name; } } $serialized_mapping = implode_assoc("=", "&", $header_to_field); } else { $serialized_mapping = implode_assoc("=", "&", $col_pos_to_field); } $mapping_file_name = $_REQUEST['save_map_as']; $mapping_file = new ImportMap(); $result = $mapping_file->save_map($current_user->id, $mapping_file_name, $_REQUEST['module'], $has_header, $serialized_mapping); $adb->println("Save map done"); $adb->println($result); } //save map - ends if (isset($_SESSION['totalrows']) && $_SESSION['totalrows'] != '') { $xrows = $_SESSION['totalrows']; } else { $xrows = $datarows; } if (isset($_SESSION['return_field_count'])) { $ret_field_count = $_SESSION['return_field_count']; } if (isset($_SESSION['column_position_to_field'])) { $col_pos_to_field = $_SESSION['column_position_to_field'];
$map_name = $_REQUEST['name']; global $adb; $query = "select * from vtiger_import_maps where deleted=0 and name=?"; $Result = $adb->pquery($query, array($map_name)); $noofrows = $adb->num_rows($Result); if ($noofrows > 0) { echo "false"; } else { echo "true"; } } else { if ($_REQUEST['delete_map'] != '') { $query = "update vtiger_import_maps set deleted=1 where id = ?"; $adb->pquery($query, array($_REQUEST['mapping'])); } $mapping_file = new ImportMap(); $mapping_arr = $mapping_file->getSavedMappingContent($_REQUEST['mapping']); $importable_fields = $_SESSION['import_module_object_column_fields']; $field_count = $_SESSION['import_module_field_count']; $required_fields = $_SESSION['import_module_object_required_fields']; $translated_column_fields = $_SESSION['import_module_translated_column_fields']; $tablename = ''; $has_header = $_SESSION['import_has_header']; $firstrow = $_SESSION['import_firstrow']; $field_map =& $mapping_arr; //$_SESSION['import_field_map']; $smarty_array1 = array(); for ($i = 0; $i < $field_count; $i++) { $suggest = ''; if ($has_header && isset($field_map[$firstrow[$i]])) { $suggest = $field_map[$firstrow[$i]];
/** * @see SugarView::display() */ public function display() { global $mod_strings, $app_strings, $current_user, $sugar_config, $app_list_strings, $locale; $this->ss->assign("IMPORT_MODULE", $_REQUEST['import_module']); $has_header = isset($_REQUEST['has_header']) ? 1 : 0; $sugar_config['import_max_records_per_file'] = empty($sugar_config['import_max_records_per_file']) ? 1000 : $sugar_config['import_max_records_per_file']; // Clear out this user's last import $seedUsersLastImport = new UsersLastImport(); $seedUsersLastImport->mark_deleted_by_user_id($current_user->id); ImportCacheFiles::clearCacheFiles(); // attempt to lookup a preexisting field map // use the custom one if specfied to do so in step 1 $field_map = array(); $default_values = array(); $ignored_fields = array(); if (!empty($_REQUEST['source_id'])) { $mapping_file = new ImportMap(); $mapping_file->retrieve($_REQUEST['source_id'], false); $_REQUEST['source'] = $mapping_file->source; $has_header = $mapping_file->has_header; if (isset($mapping_file->delimiter)) { $_REQUEST['custom_delimiter'] = $mapping_file->delimiter; } if (isset($mapping_file->enclosure)) { $_REQUEST['custom_enclosure'] = htmlentities($mapping_file->enclosure); } $field_map = $mapping_file->getMapping(); $default_values = $mapping_file->getDefaultValues(); $this->ss->assign("MAPNAME", $mapping_file->name); $this->ss->assign("CHECKMAP", 'checked="checked" value="on"'); } else { // Try to see if we have a custom mapping we can use // based upon the where the records are coming from // and what module we are importing into $classname = 'ImportMap' . ucfirst($_REQUEST['source']); if (file_exists("modules/Import/{$classname}.php")) { require_once "modules/Import/{$classname}.php"; } elseif (file_exists("custom/modules/Import/{$classname}.php")) { require_once "custom/modules/Import/{$classname}.php"; } else { require_once "custom/modules/Import/ImportMapOther.php"; $classname = 'ImportMapOther'; $_REQUEST['source'] = 'other'; } if (class_exists($classname)) { $mapping_file = new $classname(); if (isset($mapping_file->delimiter)) { $_REQUEST['custom_delimiter'] = $mapping_file->delimiter; } if (isset($mapping_file->enclosure)) { $_REQUEST['custom_enclosure'] = htmlentities($mapping_file->enclosure); } $ignored_fields = $mapping_file->getIgnoredFields($_REQUEST['import_module']); $field_map = $mapping_file->getMapping($_REQUEST['import_module']); } } $this->ss->assign("CUSTOM_DELIMITER", !empty($_REQUEST['custom_delimiter']) ? $_REQUEST['custom_delimiter'] : ","); $this->ss->assign("CUSTOM_ENCLOSURE", !empty($_REQUEST['custom_enclosure']) ? $_REQUEST['custom_enclosure'] : ""); // handle uploaded file $uploadFile = new UploadFile('userfile'); if (isset($_FILES['userfile']) && $uploadFile->confirm_upload()) { $uploadFile->final_move('IMPORT_' . $this->bean->object_name . '_' . $current_user->id); $uploadFileName = $uploadFile->get_upload_path('IMPORT_' . $this->bean->object_name . '_' . $current_user->id); } else { $this->_showImportError($mod_strings['LBL_IMPORT_MODULE_ERROR_NO_UPLOAD'], $_REQUEST['import_module'], 'Step2'); return; } // split file into parts $splitter = new ImportFileSplitter($uploadFileName, $sugar_config['import_max_records_per_file']); $splitter->splitSourceFile($_REQUEST['custom_delimiter'], html_entity_decode($_REQUEST['custom_enclosure'], ENT_QUOTES), $has_header); // Now parse the file and look for errors $importFile = new ImportFile($uploadFileName, $_REQUEST['custom_delimiter'], html_entity_decode($_REQUEST['custom_enclosure'], ENT_QUOTES)); if (!$importFile->fileExists()) { $this->_showImportError($mod_strings['LBL_CANNOT_OPEN'], $_REQUEST['import_module'], 'Step2'); return; } // retrieve first 3 rows $rows = array(); $system_charset = $locale->default_export_charset; $user_charset = $locale->getExportCharset(); $other_charsets = 'UTF-8, UTF-7, ASCII, CP1252, EUC-JP, SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP'; $detectable_charsets = "UTF-8, {$user_charset}, {$system_charset}, {$other_charsets}"; // Bug 26824 - mb_detect_encoding() thinks CP1252 is IS0-8859-1, so use that instead in the encoding list passed to the function $detectable_charsets = str_replace('CP1252', 'ISO-8859-1', $detectable_charsets); $charset_for_import = $user_charset; //We will set the default import charset option by user's preference. $able_to_detect = function_exists('mb_detect_encoding'); for ($i = 0; $i < 3; $i++) { $rows[$i] = $importFile->getNextRow(); if (!empty($rows[$i]) && $able_to_detect) { foreach ($rows[$i] as &$temp_value) { $current_charset = mb_detect_encoding($temp_value, $detectable_charsets); if (!empty($current_charset) && $current_charset != "UTF-8") { $temp_value = $locale->translateCharset($temp_value, $current_charset); // we will use utf-8 for displaying the data on the page. $charset_for_import = $current_charset; //set the default import charset option according to the current_charset. //If it is not utf-8, tt may be overwritten by the later one. So the uploaded file should not contain two types of charset($user_charset, $system_charset), and I think this situation will not occur. } } } } $ret_field_count = $importFile->getFieldCount(); // Bug 14689 - Parse the first data row to make sure it has non-empty data in it $isempty = true; if ($rows[(int) $has_header] != false) { foreach ($rows[(int) $has_header] as $value) { if (strlen(trim($value)) > 0) { $isempty = false; break; } } } if ($isempty || $rows[(int) $has_header] == false) { $this->_showImportError($mod_strings['LBL_NO_LINES'], $_REQUEST['import_module'], 'Step2'); return; } // save first row to send to step 4 $this->ss->assign("FIRSTROW", base64_encode(serialize($rows[0]))); // Now build template $this->ss->assign("TMP_FILE", $uploadFileName); $this->ss->assign("FILECOUNT", $splitter->getFileCount()); $this->ss->assign("RECORDCOUNT", $splitter->getRecordCount()); $this->ss->assign("RECORDTHRESHOLD", $sugar_config['import_max_records_per_file']); $this->ss->assign("SOURCE", $_REQUEST['source']); $this->ss->assign("TYPE", $_REQUEST['type']); $this->ss->assign("DELETE_INLINE_PNG", SugarThemeRegistry::current()->getImage('basic_search', 'align="absmiddle" alt="' . $app_strings['LNK_DELETE'] . '" border="0"')); $this->ss->assign("PUBLISH_INLINE_PNG", SugarThemeRegistry::current()->getImage('advanced_search', 'align="absmiddle" alt="' . $mod_strings['LBL_PUBLISH'] . '" border="0"')); $this->ss->assign("MODULE_TITLE", $this->getModuleTitle()); $this->ss->assign("STEP4_TITLE", strip_tags(str_replace("\n", "", getClassicModuleTitle($mod_strings['LBL_MODULE_NAME'], array($mod_strings['LBL_MODULE_NAME'], $mod_strings['LBL_STEP_4_TITLE']), false)))); $this->ss->assign("HEADER", $app_strings['LBL_IMPORT'] . " " . $mod_strings['LBL_MODULE_NAME']); // we export it as email_address, but import as email1 $field_map['email_address'] = 'email1'; // build each row; row count is determined by the the number of fields in the import file $columns = array(); $mappedFields = array(); for ($field_count = 0; $field_count < $ret_field_count; $field_count++) { // See if we have any field map matches $defaultValue = ""; // Bug 31260 - If the data rows have more columns than the header row, then just add a new header column if (!isset($rows[0][$field_count])) { $rows[0][$field_count] = ''; } // See if we can match the import row to a field in the list of fields to import $firstrow_name = trim(str_replace(":", "", $rows[0][$field_count])); if ($has_header && isset($field_map[$firstrow_name])) { $defaultValue = $field_map[$firstrow_name]; } elseif (isset($field_map[$field_count])) { $defaultValue = $field_map[$field_count]; } elseif (empty($_REQUEST['source_id'])) { $defaultValue = trim($rows[0][$field_count]); } // build string of options $fields = $this->bean->get_importable_fields(); $options = array(); $defaultField = ''; foreach ($fields as $fieldname => $properties) { // get field name if (!empty($properties['vname'])) { $displayname = str_replace(":", "", translate($properties['vname'], $this->bean->module_dir)); } else { $displayname = str_replace(":", "", translate($properties['name'], $this->bean->module_dir)); } // see if this is required $req_mark = ""; $req_class = ""; if (array_key_exists($fieldname, $this->bean->get_import_required_fields())) { $req_mark = ' ' . $app_strings['LBL_REQUIRED_SYMBOL']; $req_class = ' class="required" '; } // see if we have a match $selected = ''; if (!empty($defaultValue) && !in_array($fieldname, $mappedFields) && !in_array($fieldname, $ignored_fields)) { if (strtolower($fieldname) == strtolower($defaultValue) || strtolower($fieldname) == str_replace(" ", "_", strtolower($defaultValue)) || strtolower($displayname) == strtolower($defaultValue) || strtolower($displayname) == str_replace(" ", "_", strtolower($defaultValue))) { $selected = ' selected="selected" '; $defaultField = $fieldname; $mappedFields[] = $fieldname; } } // get field type information $fieldtype = ''; if (isset($properties['type']) && isset($mod_strings['LBL_IMPORT_FIELDDEF_' . strtoupper($properties['type'])])) { $fieldtype = ' [' . $mod_strings['LBL_IMPORT_FIELDDEF_' . strtoupper($properties['type'])] . '] '; } if (isset($properties['comment'])) { $fieldtype .= ' - ' . $properties['comment']; } $options[$displayname . $fieldname] = '<option value="' . $fieldname . '" title="' . $displayname . htmlentities($fieldtype) . '"' . $selected . $req_class . '>' . $displayname . $req_mark . '</option>\\n'; } // get default field value $defaultFieldHTML = ''; if (!empty($defaultField)) { $defaultFieldHTML = getControl($_REQUEST['import_module'], $defaultField, $fields[$defaultField], isset($default_values[$defaultField]) ? $default_values[$defaultField] : ''); } if (isset($default_values[$defaultField])) { unset($default_values[$defaultField]); } // Bug 27046 - Sort the column name picker alphabetically ksort($options); $columns[] = array('field_choices' => implode('', $options), 'default_field' => $defaultFieldHTML, 'cell1' => str_replace(""", '', htmlspecialchars($rows[0][$field_count])), 'cell2' => str_replace(""", '', htmlspecialchars($rows[1][$field_count])), 'cell3' => str_replace(""", '', htmlspecialchars($rows[2][$field_count])), 'show_remove' => false); } // add in extra defaulted fields if they are in the mapping record if (count($default_values) > 0) { foreach ($default_values as $field_name => $default_value) { // build string of options $fields = $this->bean->get_importable_fields(); $options = array(); $defaultField = ''; foreach ($fields as $fieldname => $properties) { // get field name if (!empty($properties['vname'])) { $displayname = str_replace(":", "", translate($properties['vname'], $this->bean->module_dir)); } else { $displayname = str_replace(":", "", translate($properties['name'], $this->bean->module_dir)); } // see if this is required $req_mark = ""; $req_class = ""; if (array_key_exists($fieldname, $this->bean->get_import_required_fields())) { $req_mark = ' ' . $app_strings['LBL_REQUIRED_SYMBOL']; $req_class = ' class="required" '; } // see if we have a match $selected = ''; if (strtolower($fieldname) == strtolower($field_name) && !in_array($fieldname, $mappedFields) && !in_array($fieldname, $ignored_fields)) { $selected = ' selected="selected" '; $defaultField = $fieldname; $mappedFields[] = $fieldname; } // get field type information $fieldtype = ''; if (isset($properties['type']) && isset($mod_strings['LBL_IMPORT_FIELDDEF_' . strtoupper($properties['type'])])) { $fieldtype = ' [' . $mod_strings['LBL_IMPORT_FIELDDEF_' . strtoupper($properties['type'])] . '] '; } if (isset($properties['comment'])) { $fieldtype .= ' - ' . $properties['comment']; } $options[$displayname . $fieldname] = '<option value="' . $fieldname . '" title="' . $displayname . $fieldtype . '"' . $selected . $req_class . '>' . $displayname . $req_mark . '</option>\\n'; } // get default field value $defaultFieldHTML = ''; if (!empty($defaultField)) { $defaultFieldHTML = getControl($_REQUEST['import_module'], $defaultField, $fields[$defaultField], $default_value); } // Bug 27046 - Sort the column name picker alphabetically ksort($options); $columns[] = array('field_choices' => implode('', $options), 'default_field' => $defaultFieldHTML, 'show_remove' => true); $ret_field_count++; } } $this->ss->assign("COLUMNCOUNT", $ret_field_count); $this->ss->assign("rows", $columns); // get list of valid date/time formats $timeFormat = $current_user->getUserDateTimePreferences(); $timeOptions = get_select_options_with_id($sugar_config['time_formats'], $timeFormat['time']); $dateOptions = get_select_options_with_id($sugar_config['date_formats'], $timeFormat['date']); $this->ss->assign('TIMEOPTIONS', $timeOptions); $this->ss->assign('DATEOPTIONS', $dateOptions); $this->ss->assign('datetimeformat', $GLOBALS['timedate']->get_cal_date_time_format()); // get list of valid timezones $userTZ = $current_user->getPreference('timezone'); if (empty($userTZ)) { $userTZ = TimeDate::userTimezone(); } $this->ss->assign('TIMEZONE_CURRENT', $userTZ); $this->ss->assign('TIMEZONEOPTIONS', TimeDate::getTimezoneList()); // get currency preference require_once 'modules/Currencies/ListCurrency.php'; $currency = new ListCurrency(); $cur_id = $locale->getPrecedentPreference('currency', $current_user); if ($cur_id) { $selectCurrency = $currency->getSelectOptions($cur_id); $this->ss->assign("CURRENCY", $selectCurrency); } else { $selectCurrency = $currency->getSelectOptions(); $this->ss->assign("CURRENCY", $selectCurrency); } $currenciesVars = ""; $i = 0; foreach ($locale->currencies as $id => $arrVal) { $currenciesVars .= "currencies[{$i}] = '{$arrVal['symbol']}';\n"; $i++; } $currencySymbolsJs = <<<eoq var currencies = new Object; {$currenciesVars} function setSymbolValue(id) { document.getElementById('symbol').value = currencies[id]; } eoq; $this->ss->assign('currencySymbolJs', $currencySymbolsJs); // fill significant digits dropdown $significantDigits = $locale->getPrecedentPreference('default_currency_significant_digits', $current_user); $sigDigits = ''; for ($i = 0; $i <= 6; $i++) { if ($significantDigits == $i) { $sigDigits .= '<option value="' . $i . '" selected="true">' . $i . '</option>'; } else { $sigDigits .= '<option value="' . $i . '">' . $i . '</option>'; } } $this->ss->assign('sigDigits', $sigDigits); $num_grp_sep = $current_user->getPreference('num_grp_sep'); $dec_sep = $current_user->getPreference('dec_sep'); $this->ss->assign("NUM_GRP_SEP", empty($num_grp_sep) ? $sugar_config['default_number_grouping_seperator'] : $num_grp_sep); $this->ss->assign("DEC_SEP", empty($dec_sep) ? $sugar_config['default_decimal_seperator'] : $dec_sep); $this->ss->assign('getNumberJs', $locale->getNumberJs()); // Name display format $this->ss->assign('default_locale_name_format', $locale->getLocaleFormatMacro($current_user)); $this->ss->assign('getNameJs', $locale->getNameJs()); // Charset $charsetOptions = get_select_options_with_id($locale->getCharsetSelect(), $charset_for_import); //wdong, bug 25927, here we should use the charset testing results from above. $this->ss->assign('CHARSETOPTIONS', $charsetOptions); // handle building index selector global $dictionary, $current_language; require_once "include/templates/TemplateGroupChooser.php"; $chooser_array = array(); $chooser_array[0] = array(); $idc = new ImportDuplicateCheck($this->bean); $chooser_array[1] = $idc->getDuplicateCheckIndexes(); $chooser = new TemplateGroupChooser(); $chooser->args['id'] = 'selected_indices'; $chooser->args['values_array'] = $chooser_array; $chooser->args['left_name'] = 'choose_index'; $chooser->args['right_name'] = 'ignore_index'; $chooser->args['left_label'] = $mod_strings['LBL_INDEX_USED']; $chooser->args['right_label'] = $mod_strings['LBL_INDEX_NOT_USED']; $this->ss->assign("TAB_CHOOSER", $chooser->display()); // show notes if ($this->bean instanceof Person) { $module_key = "LBL_CONTACTS_NOTE_"; } elseif ($this->bean instanceof Company) { $module_key = "LBL_ACCOUNTS_NOTE_"; } else { $module_key = "LBL_" . strtoupper($_REQUEST['import_module']) . "_NOTE_"; } $notetext = ''; for ($i = 1; isset($mod_strings[$module_key . $i]); $i++) { $notetext .= '<li>' . $mod_strings[$module_key . $i] . '</li>'; } $this->ss->assign("NOTETEXT", $notetext); $this->ss->assign("HAS_HEADER", $has_header ? 'on' : 'off'); // get list of required fields $required = array(); foreach (array_keys($this->bean->get_import_required_fields()) as $name) { $properties = $this->bean->getFieldDefinition($name); if (!empty($properties['vname'])) { $required[$name] = str_replace(":", "", translate($properties['vname'], $this->bean->module_dir)); } else { $required[$name] = str_replace(":", "", translate($properties['name'], $this->bean->module_dir)); } } // include anything needed for quicksearch to work require_once "include/TemplateHandler/TemplateHandler.php"; $quicksearch_js = TemplateHandler::createQuickSearchCode($fields, $fields, 'importstep3'); $this->ss->assign("JAVASCRIPT", $quicksearch_js . "\n" . $this->_getJS($required)); $this->ss->assign('required_fields', implode(', ', $required)); $this->ss->display('modules/Import/tpls/step3.tpl'); }
/** * display the form */ public function display() { global $mod_strings, $app_list_strings, $app_strings, $current_user, $import_bean_map; global $import_mod_strings; $this->ss->assign("MODULE_TITLE", get_module_title($mod_strings['LBL_MODULE_NAME'], $mod_strings['LBL_MODULE_NAME'] . " " . $mod_strings['LBL_STEP_2_TITLE'], true)); $this->ss->assign("MOD", $mod_strings); $this->ss->assign("APP", $app_strings); $this->ss->assign("IMP", $import_mod_strings); $this->ss->assign("TYPE", !empty($_REQUEST['type']) ? $_REQUEST['type'] : "import"); $this->ss->assign("CUSTOM_DELIMITER", !empty($_REQUEST['custom_delimiter']) ? $_REQUEST['custom_delimiter'] : ","); $this->ss->assign("CUSTOM_ENCLOSURE", htmlentities(!empty($_REQUEST['custom_enclosure']) && $_REQUEST['custom_enclosure'] != 'other' ? $_REQUEST['custom_enclosure'] : (!empty($_REQUEST['custom_enclosure_other']) ? $_REQUEST['custom_enclosure_other'] : ""))); $this->ss->assign("IMPORT_MODULE", $_REQUEST['import_module']); $this->ss->assign("HEADER", $app_strings['LBL_IMPORT'] . " " . $mod_strings['LBL_MODULE_NAME']); $this->ss->assign("JAVASCRIPT", $this->_getJS()); // load bean $focus = loadImportBean($_REQUEST['import_module']); if (!$focus) { showImportError($mod_strings['LBL_ERROR_IMPORTS_NOT_SET_UP'], $_REQUEST['import_module']); return; } // special for importing from Outlook if ($_REQUEST['source'] == "outlook") { $this->ss->assign("SOURCE", $_REQUEST['source']); $this->ss->assign("SOURCE_NAME", "Outlook "); $this->ss->assign("HAS_HEADER_CHECKED", " CHECKED"); } elseif (strncasecmp("custom:", $_REQUEST['source'], 7) == 0) { $id = substr($_REQUEST['source'], 7); $import_map_seed = new ImportMap(); $import_map_seed->retrieve($id, false); $this->ss->assign("SOURCE_ID", $import_map_seed->id); $this->ss->assign("SOURCE_NAME", $import_map_seed->name); $this->ss->assign("SOURCE", $import_map_seed->source); if (isset($import_map_seed->delimiter)) { $this->ss->assign("CUSTOM_DELIMITER", $import_map_seed->delimiter); } if (isset($import_map_seed->enclosure)) { $this->ss->assign("CUSTOM_ENCLOSURE", htmlentities($import_map_seed->enclosure)); } if ($import_map_seed->has_header) { $this->ss->assign("HAS_HEADER_CHECKED", " CHECKED"); } } else { $classname = 'ImportMap' . ucfirst($_REQUEST['source']); require "modules/Import/{$classname}.php"; $import_map_seed = new $classname(); if (isset($import_map_seed->delimiter)) { $this->ss->assign("CUSTOM_DELIMITER", $import_map_seed->delimiter); } if (isset($import_map_seed->enclosure)) { $this->ss->assign("CUSTOM_ENCLOSURE", htmlentities($import_map_seed->enclosure)); } if ($import_map_seed->has_header) { $this->ss->assign("HAS_HEADER_CHECKED", " CHECKED"); } $this->ss->assign("SOURCE", $_REQUEST['source']); } // add instructions for anything other than custom_delimited if ($_REQUEST['source'] != 'other') { $instructions = array(); $lang_key = ''; switch ($_REQUEST['source']) { case "act": $lang_key = "ACT"; break; case "outlook": $lang_key = "OUTLOOK"; break; case "salesforce": $lang_key = "SF"; break; case "tab": $lang_key = "TAB"; break; case "jigsaw": $lang_key = "JIGSAW"; break; case "csv": $lang_key = "CUSTOM"; break; } if ($lang_key != '') { for ($i = 1; isset($mod_strings["LBL_{$lang_key}_NUM_{$i}"]); $i++) { $instructions[] = array("STEP_NUM" => $mod_strings["LBL_NUM_{$i}"], "INSTRUCTION_STEP" => $mod_strings["LBL_{$lang_key}_NUM_{$i}"]); } $this->ss->assign("INSTRUCTIONS_TITLE", $mod_strings["LBL_IMPORT_{$lang_key}_TITLE"]); $this->ss->assign("instructions", $instructions); } } $this->ss->display('modules/Import/tpls/step2.tpl'); }
$xtpl->assign("MODULE", $_REQUEST['module']); // see if the source starts with 'custom' // if so, pull off the id, load that map, and get the name if ($_REQUEST['source'] == "outlook") { $xtpl->assign("SOURCE", $_REQUEST['source']); $xtpl->assign("SOURCE_NAME", "Outlook "); $xtpl->assign("HAS_HEADER_CHECKED", " CHECKED"); } else { if ($_REQUEST['source'] == "act") { $xtpl->assign("SOURCE", $_REQUEST['source']); $xtpl->assign("SOURCE_NAME", "ACT! "); $xtpl->assign("HAS_HEADER_CHECKED", " CHECKED"); } else { if (strncasecmp("custom:", $_REQUEST['source'], 7) == 0) { $id = substr($_REQUEST['source'], 7); $import_map_seed = new ImportMap(); $import_map_seed->retrieve($id, false); $xtpl->assign("SOURCE_ID", $import_map_seed->id); $xtpl->assign("SOURCE_NAME", $import_map_seed->name); $xtpl->assign("SOURCE", $import_map_seed->source); if ($import_map_seed->has_header) { $xtpl->assign("HAS_HEADER_CHECKED", " CHECKED"); } } else { $xtpl->assign("HAS_HEADER_CHECKED", " CHECKED"); $xtpl->assign("SOURCE", $_REQUEST['source']); } } } $xtpl->assign("JAVASCRIPT", get_validate_upload_js()); $lang_key = '';
/** * display the form */ public function display() { global $mod_strings, $app_list_strings, $app_strings, $current_user; global $sugar_config; $this->ss->assign("MODULE_TITLE", get_module_title($mod_strings['LBL_MODULE_NAME'], $mod_strings['LBL_MODULE_NAME'] . " " . $mod_strings['LBL_STEP_1_TITLE'], true)); $this->ss->assign("MOD", $mod_strings); $this->ss->assign("APP", $app_strings); $this->ss->assign("DELETE_INLINE_PNG", SugarThemeRegistry::current()->getImage('delete_inline', 'align="absmiddle" alt="' . $app_strings['LNK_DELETE'] . '" border="0"')); $this->ss->assign("PUBLISH_INLINE_PNG", SugarThemeRegistry::current()->getImage('publish_inline', 'align="absmiddle" alt="' . $mod_strings['LBL_PUBLISH'] . '" border="0"')); $this->ss->assign("UNPUBLISH_INLINE_PNG", SugarThemeRegistry::current()->getImage('unpublish_inline', 'align="absmiddle" alt="' . $mod_strings['LBL_UNPUBLISH'] . '" border="0"')); $this->ss->assign("IMPORT_MODULE", $_REQUEST['import_module']); $this->ss->assign("JAVASCRIPT", $this->_getJS()); // handle publishing and deleting import maps if (isset($_REQUEST['delete_map_id'])) { $import_map = new ImportMap(); $import_map->mark_deleted($_REQUEST['delete_map_id']); } if (isset($_REQUEST['publish'])) { $import_map = new ImportMap(); $result = 0; $import_map = $import_map->retrieve($_REQUEST['import_map_id'], false); if ($_REQUEST['publish'] == 'yes') { $result = $import_map->mark_published($current_user->id, true); if (!$result) { $this->ss->assign("ERROR", $mod_strings['LBL_ERROR_UNABLE_TO_PUBLISH']); } } elseif ($_REQUEST['publish'] == 'no') { // if you don't own this importmap, you do now! // unless you have a map by the same name $result = $import_map->mark_published($current_user->id, false); if (!$result) { $this->ss->assign("ERROR", $mod_strings['LBL_ERROR_UNABLE_TO_UNPUBLISH']); } } } // load bean $focus = loadImportBean($_REQUEST['import_module']); if (!$focus) { showImportError($mod_strings['LBL_ERROR_IMPORTS_NOT_SET_UP'], $_REQUEST['import_module']); return; } // trigger showing other software packages $this->ss->assign("show_salesforce", false); $this->ss->assign("show_outlook", false); $this->ss->assign("show_act", false); $this->ss->assign("show_jigsaw", false); switch ($_REQUEST['import_module']) { case "Prospects": break; case "Accounts": $this->ss->assign("show_salesforce", true); $this->ss->assign("show_act", true); $this->ss->assign("show_jigsaw", true); break; case "Contacts": $this->ss->assign("show_salesforce", true); $this->ss->assign("show_outlook", true); $this->ss->assign("show_act", true); break; default: $this->ss->assign("show_salesforce", true); break; } // get user defined import maps $this->ss->assign('is_admin', is_admin($current_user)); $import_map_seed = new ImportMap(); $custom_imports_arr = $import_map_seed->retrieve_all_by_string_fields(array('assigned_user_id' => $current_user->id, 'is_published' => 'no', 'module' => $_REQUEST['import_module'])); if (count($custom_imports_arr)) { $custom = array(); foreach ($custom_imports_arr as $import) { $custom[] = array("IMPORT_NAME" => $import->name, "IMPORT_ID" => $import->id); } $this->ss->assign('custom_imports', $custom); } // get globally defined import maps $published_imports_arr = $import_map_seed->retrieve_all_by_string_fields(array('is_published' => 'yes', 'module' => $_REQUEST['import_module'])); if (count($published_imports_arr)) { $published = array(); foreach ($published_imports_arr as $import) { $published[] = array("IMPORT_NAME" => $import->name, "IMPORT_ID" => $import->id); } $this->ss->assign('published_imports', $published); } $this->ss->display('modules/Import/tpls/step1.tpl'); }
/** * @see SugarView::display() */ public function display() { global $sugar_config; // Increase the max_execution_time since this step can take awhile ini_set("max_execution_time", max($sugar_config['import_max_execution_time'], 3600)); // stop the tracker TrackerManager::getInstance()->pause(); // use our own error handler set_error_handler('handleImportErrors', E_ALL); global $mod_strings, $app_strings, $current_user, $import_bean_map; global $app_list_strings, $timedate; $update_only = isset($_REQUEST['import_type']) && $_REQUEST['import_type'] == 'update'; $firstrow = unserialize(base64_decode($_REQUEST['firstrow'])); // All the Look Up Caches are initialized here $enum_lookup_cache = array(); // Let's try and load the import bean $focus = loadImportBean($_REQUEST['import_module']); if (!$focus) { trigger_error($mod_strings['LBL_ERROR_IMPORTS_NOT_SET_UP'], E_USER_ERROR); } // setup the importable fields array. $importable_fields = $focus->get_importable_fields(); // loop through all request variables $importColumns = array(); foreach ($_REQUEST as $name => $value) { // only look for var names that start with "fieldNum" if (strncasecmp($name, "colnum_", 7) != 0) { continue; } // pull out the column position for this field name $pos = substr($name, 7); if (isset($importable_fields[$value])) { // now mark that we've seen this field $importColumns[$pos] = $value; } } // set the default locale settings $ifs = new ImportFieldSanitize(); $ifs->dateformat = $_REQUEST['importlocale_dateformat']; $ifs->timeformat = $_REQUEST['importlocale_timeformat']; $ifs->timezone = $_REQUEST['importlocale_timezone']; $currency = new Currency(); $currency->retrieve($_REQUEST['importlocale_currency']); $ifs->currency_symbol = $currency->symbol; $ifs->default_currency_significant_digits = $_REQUEST['importlocale_default_currency_significant_digits']; $ifs->num_grp_sep = $_REQUEST['importlocale_num_grp_sep']; $ifs->dec_sep = $_REQUEST['importlocale_dec_sep']; $ifs->default_locale_name_format = $_REQUEST['importlocale_default_locale_name_format']; // Check to be sure we are getting an import file that is in the right place if (realpath(dirname($_REQUEST['tmp_file']) . '/') != realpath($sugar_config['upload_dir'])) { trigger_error($mod_strings['LBL_CANNOT_OPEN'], E_USER_ERROR); } // Open the import file $importFile = new ImportFile($_REQUEST['tmp_file'], $_REQUEST['custom_delimiter'], html_entity_decode($_REQUEST['custom_enclosure'], ENT_QUOTES)); if (!$importFile->fileExists()) { trigger_error($mod_strings['LBL_CANNOT_OPEN'], E_USER_ERROR); } $fieldDefs = $focus->getFieldDefinitions(); unset($focus); while ($row = $importFile->getNextRow()) { $focus = loadImportBean($_REQUEST['import_module']); $focus->unPopulateDefaultValues(); $focus->save_from_post = false; $focus->team_id = null; $ifs->createdBeans = array(); $do_save = true; for ($fieldNum = 0; $fieldNum < $_REQUEST['columncount']; $fieldNum++) { // loop if this column isn't set if (!isset($importColumns[$fieldNum])) { continue; } // get this field's properties $field = $importColumns[$fieldNum]; $fieldDef = $focus->getFieldDefinition($field); $fieldTranslated = translate(isset($fieldDef['vname']) ? $fieldDef['vname'] : $fieldDef['name'], $_REQUEST['module']) . " (" . $fieldDef['name'] . ")"; // Bug 37241 - Don't re-import over a field we already set during the importing of another field if (!empty($focus->{$field})) { continue; } //DETERMINE WHETHER OR NOT $fieldDef['name'] IS DATE_MODIFIED AND SET A VAR, USE DOWN BELOW // translate strings global $locale; if (empty($locale)) { $locale = new Localization(); } if (isset($row[$fieldNum])) { $rowValue = $locale->translateCharset(strip_tags(trim($row[$fieldNum])), $_REQUEST['importlocale_charset'], $sugar_config['default_charset']); } else { $rowValue = ''; } // If there is an default value then use it instead if (!empty($_REQUEST[$field])) { if (is_array($_REQUEST[$field])) { $defaultRowValue = encodeMultienumValue($_REQUEST[$field]); } else { $defaultRowValue = $_REQUEST[$field]; } // translate default values to the date/time format for the import file if ($fieldDef['type'] == 'date' && $ifs->dateformat != $timedate->get_date_format()) { $defaultRowValue = $timedate->swap_formats($defaultRowValue, $ifs->dateformat, $timedate->get_date_format()); } if ($fieldDef['type'] == 'time' && $ifs->timeformat != $timedate->get_time_format()) { $defaultRowValue = $timedate->swap_formats($defaultRowValue, $ifs->timeformat, $timedate->get_time_format()); } if (($fieldDef['type'] == 'datetime' || $fieldDef['type'] == 'datetimecombo') && $ifs->dateformat . ' ' . $ifs->timeformat != $timedate->get_date_time_format()) { $defaultRowValue = $timedate->swap_formats($defaultRowValue, $ifs->dateformat . ' ' . $ifs->timeformat, $timedate->get_date_time_format()); } if (in_array($fieldDef['type'], array('currency', 'float', 'int', 'num')) && $ifs->num_grp_sep != $current_user->getPreference('num_grp_sep')) { $defaultRowValue = str_replace($current_user->getPreference('num_grp_sep'), $ifs->num_grp_sep, $defaultRowValue); } if (in_array($fieldDef['type'], array('currency', 'float')) && $ifs->dec_sep != $current_user->getPreference('dec_sep')) { $defaultRowValue = str_replace($current_user->getPreference('dec_sep'), $ifs->dec_sep, $defaultRowValue); } $currency->retrieve('-99'); $user_currency_symbol = $currency->symbol; if ($fieldDef['type'] == 'currency' && $ifs->currency_symbol != $user_currency_symbol) { $defaultRowValue = str_replace($user_currency_symbol, $ifs->currency_symbol, $defaultRowValue); } if (empty($rowValue)) { $rowValue = $defaultRowValue; unset($defaultRowValue); } } // Bug 22705 - Don't update the First Name or Last Name value if Full Name is set if (in_array($field, array('first_name', 'last_name')) && !empty($focus->full_name)) { continue; } // loop if this value has not been set if (!isset($rowValue)) { continue; } // If the field is required and blank then error out if (array_key_exists($field, $focus->get_import_required_fields()) && empty($rowValue) && $rowValue != '0') { $importFile->writeError($mod_strings['LBL_REQUIRED_VALUE'], $fieldTranslated, 'NULL'); $do_save = false; } // Handle the special case "Sync to Outlook" if ($focus->object_name == "Contacts" && $field == 'sync_contact') { $bad_names = array(); $returnValue = $ifs->synctooutlook($rowValue, $fieldDef, $bad_names); // try the default value on fail if (!$returnValue && !empty($defaultRowValue)) { $returnValue = $ifs->synctooutlook($defaultRowValue, $fieldDef, $bad_names); } if (!$returnValue) { $importFile->writeError($mod_strings['LBL_ERROR_SYNC_USERS'], $fieldTranslated, explode(",", $bad_names)); $do_save = 0; } } // Handle email1 and email2 fields ( these don't have the type of email ) if ($field == 'email1' || $field == 'email2') { $returnValue = $ifs->email($rowValue, $fieldDef); // try the default value on fail if (!$returnValue && !empty($defaultRowValue)) { $returnValue = $ifs->email($defaultRowValue, $fieldDef); } if ($returnValue === FALSE) { $do_save = 0; $importFile->writeError($mod_strings['LBL_ERROR_INVALID_EMAIL'], $fieldTranslated, $rowValue); } else { $rowValue = $returnValue; // check for current opt_out and invalid email settings for this email address // if we find any, set them now $emailres = $focus->db->query("SELECT opt_out, invalid_email FROM email_addresses \n WHERE email_address = '" . $focus->db->quote($rowValue) . "'"); if ($emailrow = $focus->db->fetchByAssoc($emailres)) { $focus->email_opt_out = $emailrow['opt_out']; $focus->invalid_email = $emailrow['invalid_email']; } } } // Handle splitting Full Name into First and Last Name parts if ($field == 'full_name' && !empty($rowValue)) { $ifs->fullname($rowValue, $fieldDef, $focus); } // to maintain 451 compatiblity if (!isset($fieldDef['module']) && $fieldDef['type'] == 'relate') { $fieldDef['module'] = ucfirst($fieldDef['table']); } if (isset($fieldDef['custom_type']) && !empty($fieldDef['custom_type'])) { $fieldDef['type'] = $fieldDef['custom_type']; } // If the field is empty then there is no need to check the data if (!empty($rowValue)) { switch ($fieldDef['type']) { case 'enum': case 'multienum': if (isset($fieldDef['type']) && $fieldDef['type'] == "multienum") { $returnValue = $ifs->multienum($rowValue, $fieldDef); } else { $returnValue = $ifs->enum($rowValue, $fieldDef); } // try the default value on fail if (!$returnValue && !empty($defaultRowValue)) { if (isset($fieldDef['type']) && $fieldDef['type'] == "multienum") { $returnValue = $ifs->multienum($defaultRowValue, $fieldDef); } else { $returnValue = $ifs->enum($defaultRowValue, $fieldDef); } } if ($returnValue === FALSE) { $importFile->writeError($mod_strings['LBL_ERROR_NOT_IN_ENUM'] . implode(",", $app_list_strings[$fieldDef['options']]), $fieldTranslated, $rowValue); $do_save = 0; } else { $rowValue = $returnValue; } break; case 'relate': case 'parent': $returnValue = $ifs->relate($rowValue, $fieldDef, $focus, empty($defaultRowValue)); if (!$returnValue && !empty($defaultRowValue)) { $returnValue = $ifs->relate($defaultRowValue, $fieldDef, $focus); } // Bug 33623 - Set the id value found from the above method call as an importColumn if ($returnValue !== false) { $importColumns[] = $fieldDef['id_name']; } break; case 'teamset': $returnValue = $ifs->teamset($rowValue, $fieldDef, $focus); $importColumns[] = 'team_set_id'; $importColumns[] = 'team_id'; break; case 'fullname': break; default: if (method_exists('ImportFieldSanitize', $fieldDef['type'])) { $fieldtype = $fieldDef['type']; $returnValue = $ifs->{$fieldtype}($rowValue, $fieldDef); // try the default value on fail if (!$returnValue && !empty($defaultRowValue)) { $returnValue = $ifs->{$fieldtype}($defaultRowValue, $fieldDef); } if (!$returnValue) { $do_save = 0; $importFile->writeError($mod_strings['LBL_ERROR_INVALID_' . strtoupper($fieldDef['type'])], $fieldTranslated, $rowValue); } else { $rowValue = $returnValue; } } } } $focus->{$field} = $rowValue; unset($defaultRowValue); } // Now try to validate flex relate fields if (isset($focus->field_defs['parent_name']) && isset($focus->parent_name) && $focus->field_defs['parent_name']['type'] == 'parent') { // populate values from the picker widget if the import file doesn't have them $parent_idField = $focus->field_defs['parent_name']['id_name']; if (empty($focus->{$parent_idField}) && !empty($_REQUEST[$parent_idField])) { $focus->{$parent_idField} = $_REQUEST[$parent_idField]; } $parent_typeField = $focus->field_defs['parent_name']['type_name']; if (empty($focus->{$parent_typeField}) && !empty($_REQUEST[$parent_typeField])) { $focus->{$parent_typeField} = $_REQUEST[$parent_typeField]; } // now validate it $returnValue = $ifs->parent($focus->parent_name, $focus->field_defs['parent_name'], $focus, empty($_REQUEST['parent_name'])); if (!$returnValue && !empty($_REQUEST['parent_name'])) { $returnValue = $ifs->parent($_REQUEST['parent_name'], $focus->field_defs['parent_name'], $focus); } } // check to see that the indexes being entered are unique. if (isset($_REQUEST['display_tabs_def']) && $_REQUEST['display_tabs_def'] != "") { $idc = new ImportDuplicateCheck($focus); if ($idc->isADuplicateRecord(explode('&', $_REQUEST['display_tabs_def']))) { $importFile->markRowAsDuplicate(); $this->_undoCreatedBeans($ifs->createdBeans); continue; } } // if the id was specified $newRecord = true; if (!empty($focus->id)) { $focus->id = $this->_convertId($focus->id); // check if it already exists $query = "SELECT * FROM {$focus->table_name} WHERE id='" . $focus->db->quote($focus->id) . "'"; $result = $focus->db->query($query) or sugar_die("Error selecting sugarbean: "); $dbrow = $focus->db->fetchByAssoc($result); if (isset($dbrow['id']) && $dbrow['id'] != -1) { // if it exists but was deleted, just remove it if (isset($dbrow['deleted']) && $dbrow['deleted'] == 1 && $update_only == false) { $query2 = "DELETE FROM {$focus->table_name} WHERE id='" . $focus->db->quote($focus->id) . "'"; $result2 = $focus->db->query($query2) or sugar_die($mod_strings['LBL_ERROR_DELETING_RECORD'] . " " . $focus->id); if ($focus->hasCustomFields()) { $query3 = "DELETE FROM {$focus->table_name}_cstm WHERE id_c='" . $focus->db->quote($focus->id) . "'"; $result2 = $focus->db->query($query3); } $focus->new_with_id = true; } else { if (!$update_only) { $do_save = 0; $importFile->writeError($mod_strings['LBL_ID_EXISTS_ALREADY'], 'ID', $focus->id); $this->_undoCreatedBeans($ifs->createdBeans); continue; } $existing_focus = loadImportBean($_REQUEST['import_module']); $newRecord = false; if (!$existing_focus->retrieve($dbrow['id']) instanceof SugarBean) { $do_save = 0; $importFile->writeError($mod_strings['LBL_RECORD_CANNOT_BE_UPDATED'], 'ID', $focus->id); $this->_undoCreatedBeans($ifs->createdBeans); continue; } else { $newData = $focus->toArray(); foreach ($newData as $focus_key => $focus_value) { if (in_array($focus_key, $importColumns)) { $existing_focus->{$focus_key} = $focus_value; } } $focus = $existing_focus; } unset($existing_focus); } } else { $focus->new_with_id = true; } } if ($do_save) { // Populate in any default values to the bean $focus->populateDefaultValues(); if (!isset($focus->assigned_user_id) || $focus->assigned_user_id == '' && $newRecord) { $focus->assigned_user_id = $current_user->id; } /* * Bug 34854: Added all conditions besides the empty check on date modified. Currently, if * we do an update to a record, it doesn't update the date_modified value. * Hack note: I'm doing a to_display and back to_db on the fetched row to make sure that any truncating that happens * when $focus->date_modified goes to_display and back to_db also happens on the fetched db value. Otherwise, * in some cases we truncate the seconds on one and not the other, and the comparison fails when it should pass */ if (!empty($focus->new_with_id) && !empty($focus->date_modified) || empty($focus->new_with_id) && $timedate->to_db($focus->date_modified) != $timedate->to_db($timedate->to_display_date_time($focus->fetched_row['date_modified']))) { $focus->update_date_modified = false; } $focus->optimistic_lock = false; if ($focus->object_name == "Contacts" && isset($focus->sync_contact)) { //copy the potential sync list to another varible $list_of_users = $focus->sync_contact; //and set it to false for the save $focus->sync_contact = false; } else { if ($focus->object_name == "User" && !empty($current_user) && $focus->is_admin && !is_admin($current_user) && is_admin_for_module($current_user, 'Users')) { sugar_die($GLOBALS['mod_strings']['ERR_IMPORT_SYSTEM_ADMININSTRATOR']); } } //bug# 40260 setting it true as the module in focus is involved in an import $focus->in_import = true; // call any logic needed for the module preSave $focus->beforeImportSave(); $focus->save(false); // call any logic needed for the module postSave $focus->afterImportSave(); if ($focus->object_name == "Contacts" && isset($list_of_users)) { $focus->process_sync_to_outlook($list_of_users); } // Update the created/updated counter $importFile->markRowAsImported($newRecord); // Add ID to User's Last Import records if ($newRecord) { ImportFile::writeRowToLastImport($_REQUEST['import_module'], $focus->object_name == 'Case' ? 'aCase' : $focus->object_name, $focus->id); } } else { $this->_undoCreatedBeans($ifs->createdBeans); } } // save mapping if requested if (isset($_REQUEST['save_map_as']) && $_REQUEST['save_map_as'] != '') { $mapping_file = new ImportMap(); if (isset($_REQUEST['has_header']) && $_REQUEST['has_header'] == 'on') { $header_to_field = array(); foreach ($importColumns as $pos => $field_name) { if (isset($firstrow[$pos]) && isset($field_name)) { $header_to_field[$firstrow[$pos]] = $field_name; } } $mapping_file->setMapping($header_to_field); } else { $mapping_file->setMapping($importColumns); } // save default fields $defaultValues = array(); for ($i = 0; $i < $_REQUEST['columncount']; $i++) { if (isset($importColumns[$i]) && !empty($_REQUEST[$importColumns[$i]])) { $field = $importColumns[$i]; $fieldDef = $focus->getFieldDefinition($field); if (!empty($fieldDef['custom_type']) && $fieldDef['custom_type'] == 'teamset') { require_once 'include/SugarFields/Fields/Teamset/SugarFieldTeamset.php'; $sugar_field = new SugarFieldTeamset('Teamset'); $teams = $sugar_field->getTeamsFromRequest($field); if (isset($_REQUEST['primary_team_name_collection'])) { $primary_index = $_REQUEST['primary_team_name_collection']; } //If primary_index was selected, ensure that the first Array entry is the primary team if (isset($primary_index)) { $count = 0; $new_teams = array(); foreach ($teams as $id => $name) { if ($primary_index == $count++) { $new_teams[$id] = $name; unset($teams[$id]); break; } } foreach ($teams as $id => $name) { $new_teams[$id] = $name; } $teams = $new_teams; } //if $json = getJSONobj(); $defaultValues[$field] = $json->encode($teams); } else { $defaultValues[$field] = $_REQUEST[$importColumns[$i]]; } } } $mapping_file->setDefaultValues($defaultValues); $result = $mapping_file->save($current_user->id, $_REQUEST['save_map_as'], $_REQUEST['import_module'], $_REQUEST['source'], isset($_REQUEST['has_header']) && $_REQUEST['has_header'] == 'on', $_REQUEST['custom_delimiter'], html_entity_decode($_REQUEST['custom_enclosure'], ENT_QUOTES)); } $importFile->writeStatus(); }
function retrieve_all_by_string_fields($fields_array) { $where_clause = $this->get_where($fields_array); $query = "SELECT * FROM {$this->table_name} {$where_clause}"; $GLOBALS['log']->debug("Retrieve {$this->object_name}: " . $query); $result = $this->db->query($query, true, " Error: "); $obj_arr = array(); while ($row = $this->db->fetchByAssoc($result, -1, FALSE)) { $focus = new ImportMap(); foreach ($this->column_fields as $field) { if (isset($row[$field])) { $focus->{$field} = $row[$field]; } } $focus->fill_in_additional_detail_fields(); array_push($obj_arr, $focus); } return $obj_arr; }
public function testMarkUnpublishedNameConflict() { $this->_addMapping(); $this->_importMap->mark_published($GLOBALS['current_user']->id, true); $id = $this->_importMap->id; $GLOBALS['current_user'] = SugarTestUserUtilities::createAnonymousUser(); $this->_importMap = new ImportMap(); $this->_addMapping(); $importMapRetrieve = new ImportMap(); $importMapRetrieve->retrieve($id, false); $this->assertFalse($this->_importMap->mark_published($GLOBALS['current_user']->id, false)); $query = "SELECT * FROM import_maps \n WHERE id = '{$id}'"; $result = $GLOBALS['db']->query($query); $row = $GLOBALS['db']->fetchByAssoc($result); $this->assertEquals($row['is_published'], 'yes'); }
private function getImportMap($importSource) { if (strncasecmp("custom:", $importSource, 7) == 0) { $id = substr($importSource, 7); $import_map_seed = new ImportMap(); $import_map_seed->retrieve($id, false); $this->ss->assign("SOURCE_ID", $import_map_seed->id); $this->ss->assign("SOURCE_NAME", $import_map_seed->name); $this->ss->assign("SOURCE", $import_map_seed->source); } else { $classname = 'ImportMap' . ucfirst($importSource); if (file_exists("modules/Import/maps/{$classname}.php")) { require_once "modules/Import/maps/{$classname}.php"; } elseif (file_exists("custom/modules/Import/maps/{$classname}.php")) { require_once "custom/modules/Import/maps/{$classname}.php"; } else { require_once "custom/modules/Import/maps/ImportMapOther.php"; $classname = 'ImportMapOther'; $importSource = 'other'; } if (class_exists($classname)) { $import_map_seed = new $classname(); $this->ss->assign("SOURCE", $importSource); } } return $import_map_seed; }
/** * @see SugarView::display() */ public function display() { global $mod_strings, $app_strings, $current_user; global $sugar_config; $selectedData = $this->_retrieveParams(); $this->ss->assign("MODULE_TITLE", $this->getModuleTitle()); $this->ss->assign("DELETE_INLINE_PNG", SugarThemeRegistry::current()->getImage('delete_inline', 'align="absmiddle" alt="' . $app_strings['LNK_DELETE'] . '" border="0"')); $this->ss->assign("PUBLISH_INLINE_PNG", SugarThemeRegistry::current()->getImage('publish_inline', 'align="absmiddle" alt="' . $mod_strings['LBL_PUBLISH'] . '" border="0"')); $this->ss->assign("UNPUBLISH_INLINE_PNG", SugarThemeRegistry::current()->getImage('unpublish_inline', 'align="absmiddle" alt="' . $mod_strings['LBL_UNPUBLISH'] . '" border="0"')); $this->ss->assign("IMPORT_MODULE", $_REQUEST['import_module']); $this->ss->assign("JAVASCRIPT", $this->_getJS(isset($selectedData->source) ? $selectedData->source : false)); // handle publishing and deleting import maps if (isset($_REQUEST['delete_map_id'])) { $import_map = new ImportMap(); $import_map->mark_deleted($_REQUEST['delete_map_id']); } if (isset($_REQUEST['publish'])) { $import_map = new ImportMap(); $result = 0; $import_map = $import_map->retrieve($_REQUEST['import_map_id'], false); if ($_REQUEST['publish'] == 'yes') { $result = $import_map->mark_published($current_user->id, true); if (!$result) { $this->ss->assign("ERROR", $mod_strings['LBL_ERROR_UNABLE_TO_PUBLISH']); } } elseif ($_REQUEST['publish'] == 'no') { // if you don't own this importmap, you do now! // unless you have a map by the same name $result = $import_map->mark_published($current_user->id, false); if (!$result) { $this->ss->assign("ERROR", $mod_strings['LBL_ERROR_UNABLE_TO_UNPUBLISH']); } } } // trigger showing other software packages $this->ss->assign("show_salesforce", false); $this->ss->assign("show_outlook", false); $this->ss->assign("show_act", false); switch ($_REQUEST['import_module']) { case "Prospects": break; case "Accounts": $this->ss->assign("show_salesforce", true); $this->ss->assign("show_act", true); break; case "Contacts": $this->ss->assign("show_salesforce", true); $this->ss->assign("show_outlook", true); $this->ss->assign("show_act", true); break; default: $this->ss->assign("show_salesforce", true); break; } // show any custom mappings if (sugar_is_dir('custom/modules/Import') && ($dir = opendir('custom/modules/Import'))) { while (($file = readdir($dir)) !== false) { if (sugar_is_file("custom/modules/Import/{$file}") && strpos($file, ".php") !== false) { require_once "custom/modules/Import/{$file}"; $classname = str_replace('.php', '', $file); $mappingClass = new $classname(); $custom_mappings[] = $mappingClass->name; } } } // get user defined import maps $this->ss->assign('is_admin', is_admin($current_user)); $import_map_seed = new ImportMap(); $custom_imports_arr = $import_map_seed->retrieve_all_by_string_fields(array('assigned_user_id' => $current_user->id, 'is_published' => 'no', 'module' => $_REQUEST['import_module'])); if (count($custom_imports_arr)) { $custom = array(); foreach ($custom_imports_arr as $import) { $custom[] = array("IMPORT_NAME" => $import->name, "IMPORT_ID" => $import->id); } $this->ss->assign('custom_imports', $custom); } // get globally defined import maps $published_imports_arr = $import_map_seed->retrieve_all_by_string_fields(array('is_published' => 'yes', 'module' => $_REQUEST['import_module'])); if (count($published_imports_arr)) { $published = array(); foreach ($published_imports_arr as $import) { $published[] = array("IMPORT_NAME" => $import->name, "IMPORT_ID" => $import->id); } $this->ss->assign('published_imports', $published); } $this->ss->display('modules/Import/tpls/step1.tpl'); }
if ($_REQUEST['module'] == 'Accounts') { $xtpl->parse("main.show_salesforce"); $xtpl->parse("main.show_act"); } else { if ($_REQUEST['module'] == 'Prospects') { // does not show salesforce } else { $xtpl->parse("main.show_salesforce"); } } } if (is_admin($current_user)) { // $xtpl->parse("main.create_global_map"); } $query_arr = array('assigned_user_id' => $current_user->id, 'is_published' => 'no', 'module' => $_REQUEST['module']); $import_map_seed = new ImportMap(); $custom_imports_arr = $import_map_seed->retrieve_all_by_string_fields($query_arr); if (count($custom_imports_arr)) { foreach ($custom_imports_arr as $import) { $xtpl->assign("IMPORT_NAME", $import->name); $xtpl->assign("IMPORT_ID", $import->id); if (is_admin($current_user)) { $xtpl->parse("main.saved.saved_elem.is_admin"); } $xtpl->parse("main.saved.saved_elem"); } $xtpl->parse("main.saved"); } $query_arr = array('is_published' => 'yes', 'module' => $_REQUEST['module']); $published_imports_arr = $import_map_seed->retrieve_all_by_string_fields($query_arr); if (count($published_imports_arr)) {
function action_mapping() { global $mod_strings, $current_user; $results = array('message' => ''); // handle publishing and deleting import maps if (isset($_REQUEST['delete_map_id'])) { $import_map = new ImportMap(); $import_map->mark_deleted($_REQUEST['delete_map_id']); } if (isset($_REQUEST['publish'])) { $import_map = new ImportMap(); $import_map = $import_map->retrieve($_REQUEST['import_map_id'], false); if ($_REQUEST['publish'] == 'yes') { $result = $import_map->mark_published($current_user->id, true); if (!$result) { $results['message'] = $mod_strings['LBL_ERROR_UNABLE_TO_PUBLISH']; } } elseif ($_REQUEST['publish'] == 'no') { // if you don't own this importmap, you do now, unless you have a map by the same name $result = $import_map->mark_published($current_user->id, false); if (!$result) { $results['message'] = $mod_strings['LBL_ERROR_UNABLE_TO_UNPUBLISH']; } } } echo json_encode($results); sugar_cleanup(TRUE); }
/** * @see SugarView::display() */ public function display() { global $mod_strings, $app_strings, $current_user, $sugar_config, $app_list_strings, $locale; $this->ss->assign("IMPORT_MODULE", $_REQUEST['import_module']); $has_header = isset($_REQUEST['has_header']) ? 1 : 0; $sugar_config['import_max_records_per_file'] = empty($sugar_config['import_max_records_per_file']) ? 1000 : $sugar_config['import_max_records_per_file']; $this->ss->assign("CURRENT_STEP", $this->currentStep); // attempt to lookup a preexisting field map // use the custom one if specfied to do so in step 1 $mapping_file = new ImportMap(); $field_map = $mapping_file->set_get_import_wizard_fields(); $default_values = array(); $ignored_fields = array(); if (!empty($_REQUEST['source_id'])) { $GLOBALS['log']->fatal("Loading import map properties."); $mapping_file = new ImportMap(); $mapping_file->retrieve($_REQUEST['source_id'], false); $_REQUEST['source'] = $mapping_file->source; $has_header = $mapping_file->has_header; if (isset($mapping_file->delimiter)) { $_REQUEST['custom_delimiter'] = $mapping_file->delimiter; } if (isset($mapping_file->enclosure)) { $_REQUEST['custom_enclosure'] = htmlentities($mapping_file->enclosure); } $field_map = $mapping_file->getMapping(); //print_r($field_map);die(); $default_values = $mapping_file->getDefaultValues(); $this->ss->assign("MAPNAME", $mapping_file->name); $this->ss->assign("CHECKMAP", 'checked="checked" value="on"'); } else { $classname = $this->getMappingClassName(ucfirst($_REQUEST['source'])); //Set the $_REQUEST['source'] to be 'other' for ImportMapOther special case if ($classname == 'ImportMapOther') { $_REQUEST['source'] = 'other'; } if (class_exists($classname)) { $mapping_file = new $classname(); $ignored_fields = $mapping_file->getIgnoredFields($_REQUEST['import_module']); $field_map2 = $mapping_file->getMapping($_REQUEST['import_module']); $field_map = array_merge($field_map, $field_map2); } } $delimiter = $this->getRequestDelimiter(); $this->ss->assign("CUSTOM_DELIMITER", $delimiter); $this->ss->assign("CUSTOM_ENCLOSURE", !empty($_REQUEST['custom_enclosure']) ? $_REQUEST['custom_enclosure'] : ""); //populate import locale values from import mapping if available, these values will be used througout the rest of the code path $uploadFileName = $_REQUEST['file_name']; // Now parse the file and look for errors $importFile = new ImportFile($uploadFileName, $delimiter, html_entity_decode($_REQUEST['custom_enclosure'], ENT_QUOTES), FALSE); if (!$importFile->fileExists()) { $this->_showImportError($mod_strings['LBL_CANNOT_OPEN'], $_REQUEST['import_module'], 'Step2'); return; } $charset = $importFile->autoDetectCharacterSet(); // retrieve first 3 rows $rows = array(); //Keep track of the largest row count found. $maxFieldCount = 0; for ($i = 0; $i < 3; $i++) { $rows[] = $importFile->getNextRow(); $maxFieldCount = $importFile->getFieldCount() > $maxFieldCount ? $importFile->getFieldCount() : $maxFieldCount; } $ret_field_count = $maxFieldCount; // Bug 14689 - Parse the first data row to make sure it has non-empty data in it $isempty = true; if ($rows[(int) $has_header] != false) { foreach ($rows[(int) $has_header] as $value) { if (strlen(trim($value)) > 0) { $isempty = false; break; } } } if ($isempty || $rows[(int) $has_header] == false) { $this->_showImportError($mod_strings['LBL_NO_LINES'], $_REQUEST['import_module'], 'Step2'); return; } // save first row to send to step 4 $this->ss->assign("FIRSTROW", base64_encode(serialize($rows[0]))); // Now build template $this->ss->assign("TMP_FILE", $uploadFileName); $this->ss->assign("SOURCE", $_REQUEST['source']); $this->ss->assign("TYPE", $_REQUEST['type']); $this->ss->assign("DELETE_INLINE_PNG", SugarThemeRegistry::current()->getImage('basic_search', 'align="absmiddle" alt="' . $app_strings['LNK_DELETE'] . '" border="0"')); $this->ss->assign("PUBLISH_INLINE_PNG", SugarThemeRegistry::current()->getImage('advanced_search', 'align="absmiddle" alt="' . $mod_strings['LBL_PUBLISH'] . '" border="0"')); $this->instruction = 'LBL_SELECT_MAPPING_INSTRUCTION'; $this->ss->assign('INSTRUCTION', $this->getInstruction()); $this->ss->assign("MODULE_TITLE", $this->getModuleTitle(false)); $this->ss->assign("STEP4_TITLE", strip_tags(str_replace("\n", "", getClassicModuleTitle($mod_strings['LBL_MODULE_NAME'], array($mod_strings['LBL_MODULE_NAME'], $mod_strings['LBL_STEP_4_TITLE']), false)))); $this->ss->assign("HEADER", $app_strings['LBL_IMPORT'] . " " . $mod_strings['LBL_MODULE_NAME']); // we export it as email_address, but import as email1 $field_map['email_address'] = 'email1'; // build each row; row count is determined by the the number of fields in the import file $columns = array(); $mappedFields = array(); // this should be populated if the request comes from a 'Back' button click $importColumns = $this->getImportColumns(); $column_sel_from_req = false; if (!empty($importColumns)) { $column_sel_from_req = true; } for ($field_count = 0; $field_count < $ret_field_count; $field_count++) { // See if we have any field map matches $defaultValue = ""; // Bug 31260 - If the data rows have more columns than the header row, then just add a new header column if (!isset($rows[0][$field_count])) { $rows[0][$field_count] = ''; } // See if we can match the import row to a field in the list of fields to import $firstrow_name = trim(str_replace(":", "", $rows[0][$field_count])); if ($has_header && isset($field_map[$firstrow_name])) { $defaultValue = $field_map[$firstrow_name]; } elseif (isset($field_map[$field_count])) { $defaultValue = $field_map[$field_count]; } elseif (empty($_REQUEST['source_id'])) { $defaultValue = trim($rows[0][$field_count]); } // build string of options $fields = $this->bean->get_importable_fields(); $options = array(); $defaultField = ''; global $current_language; $moduleStrings = return_module_language($current_language, $this->bean->module_dir); foreach ($fields as $fieldname => $properties) { // get field name if (!empty($moduleStrings['LBL_EXPORT_' . strtoupper($fieldname)])) { $displayname = str_replace(":", "", $moduleStrings['LBL_EXPORT_' . strtoupper($fieldname)]); } else { if (!empty($properties['vname'])) { $displayname = str_replace(":", "", translate($properties['vname'], $this->bean->module_dir)); } else { $displayname = str_replace(":", "", translate($properties['name'], $this->bean->module_dir)); } } // see if this is required $req_mark = ""; $req_class = ""; if (array_key_exists($fieldname, $this->bean->get_import_required_fields())) { $req_mark = ' ' . $app_strings['LBL_REQUIRED_SYMBOL']; $req_class = ' class="required" '; } // see if we have a match $selected = ''; if ($column_sel_from_req && isset($importColumns[$field_count])) { if ($fieldname == $importColumns[$field_count]) { $selected = ' selected="selected" '; $defaultField = $fieldname; $mappedFields[] = $fieldname; } } else { if (!empty($defaultValue) && !in_array($fieldname, $mappedFields) && !in_array($fieldname, $ignored_fields)) { if (strtolower($fieldname) == strtolower($defaultValue) || strtolower($fieldname) == str_replace(" ", "_", strtolower($defaultValue)) || strtolower($displayname) == strtolower($defaultValue) || strtolower($displayname) == str_replace(" ", "_", strtolower($defaultValue))) { $selected = ' selected="selected" '; $defaultField = $fieldname; $mappedFields[] = $fieldname; } } } // get field type information $fieldtype = ''; if (isset($properties['type']) && isset($mod_strings['LBL_IMPORT_FIELDDEF_' . strtoupper($properties['type'])])) { $fieldtype = ' [' . $mod_strings['LBL_IMPORT_FIELDDEF_' . strtoupper($properties['type'])] . '] '; } if (isset($properties['comment'])) { $fieldtype .= ' - ' . $properties['comment']; } $options[$displayname . $fieldname] = '<option value="' . $fieldname . '" title="' . $displayname . htmlentities($fieldtype) . '"' . $selected . $req_class . '>' . $displayname . $req_mark . '</option>\\n'; } // get default field value $defaultFieldHTML = ''; if (!empty($defaultField)) { $defaultFieldHTML = getControl($_REQUEST['import_module'], $defaultField, $fields[$defaultField], isset($default_values[$defaultField]) ? $default_values[$defaultField] : ''); } if (isset($default_values[$defaultField])) { unset($default_values[$defaultField]); } // Bug 27046 - Sort the column name picker alphabetically ksort($options); // to be displayed in UTF-8 format if (!empty($charset) && $charset != 'UTF-8') { if (isset($rows[1][$field_count])) { $rows[1][$field_count] = $locale->translateCharset($rows[1][$field_count], $charset); } } $cellOneData = isset($rows[0][$field_count]) ? $rows[0][$field_count] : ''; $cellTwoData = isset($rows[1][$field_count]) ? $rows[1][$field_count] : ''; $cellThreeData = isset($rows[2][$field_count]) ? $rows[2][$field_count] : ''; $columns[] = array('field_choices' => implode('', $options), 'default_field' => $defaultFieldHTML, 'cell1' => strip_tags($cellOneData), 'cell2' => strip_tags($cellTwoData), 'cell3' => strip_tags($cellThreeData), 'show_remove' => false); } // add in extra defaulted fields if they are in the mapping record if (count($default_values) > 0) { foreach ($default_values as $field_name => $default_value) { // build string of options $fields = $this->bean->get_importable_fields(); $options = array(); $defaultField = ''; foreach ($fields as $fieldname => $properties) { // get field name if (!empty($properties['vname'])) { $displayname = str_replace(":", "", translate($properties['vname'], $this->bean->module_dir)); } else { $displayname = str_replace(":", "", translate($properties['name'], $this->bean->module_dir)); } // see if this is required $req_mark = ""; $req_class = ""; if (array_key_exists($fieldname, $this->bean->get_import_required_fields())) { $req_mark = ' ' . $app_strings['LBL_REQUIRED_SYMBOL']; $req_class = ' class="required" '; } // see if we have a match $selected = ''; if (strtolower($fieldname) == strtolower($field_name) && !in_array($fieldname, $mappedFields) && !in_array($fieldname, $ignored_fields)) { $selected = ' selected="selected" '; $defaultField = $fieldname; $mappedFields[] = $fieldname; } // get field type information $fieldtype = ''; if (isset($properties['type']) && isset($mod_strings['LBL_IMPORT_FIELDDEF_' . strtoupper($properties['type'])])) { $fieldtype = ' [' . $mod_strings['LBL_IMPORT_FIELDDEF_' . strtoupper($properties['type'])] . '] '; } if (isset($properties['comment'])) { $fieldtype .= ' - ' . $properties['comment']; } $options[$displayname . $fieldname] = '<option value="' . $fieldname . '" title="' . $displayname . $fieldtype . '"' . $selected . $req_class . '>' . $displayname . $req_mark . '</option>\\n'; } // get default field value $defaultFieldHTML = ''; if (!empty($defaultField)) { $defaultFieldHTML = getControl($_REQUEST['import_module'], $defaultField, $fields[$defaultField], $default_value); } // Bug 27046 - Sort the column name picker alphabetically ksort($options); $columns[] = array('field_choices' => implode('', $options), 'default_field' => $defaultFieldHTML, 'show_remove' => true); $ret_field_count++; } } $this->ss->assign("COLUMNCOUNT", $ret_field_count); $this->ss->assign("rows", $columns); $this->ss->assign('datetimeformat', $GLOBALS['timedate']->get_cal_date_time_format()); // handle building index selector global $dictionary, $current_language; // show notes if ($this->bean instanceof Person) { $module_key = "LBL_CONTACTS_NOTE_"; } elseif ($this->bean instanceof Company) { $module_key = "LBL_ACCOUNTS_NOTE_"; } else { $module_key = "LBL_" . strtoupper($_REQUEST['import_module']) . "_NOTE_"; } $notetext = ''; for ($i = 1; isset($mod_strings[$module_key . $i]); $i++) { $notetext .= '<li>' . $mod_strings[$module_key . $i] . '</li>'; } $this->ss->assign("NOTETEXT", $notetext); $this->ss->assign("HAS_HEADER", $has_header ? 'on' : 'off'); // get list of required fields $required = array(); foreach (array_keys($this->bean->get_import_required_fields()) as $name) { $properties = $this->bean->getFieldDefinition($name); if (!empty($properties['vname'])) { $required[$name] = str_replace(":", "", translate($properties['vname'], $this->bean->module_dir)); } else { $required[$name] = str_replace(":", "", translate($properties['name'], $this->bean->module_dir)); } } // include anything needed for quicksearch to work require_once "include/TemplateHandler/TemplateHandler.php"; // Bug #46879 : createQuickSearchCode() function in IBM RTC call function getQuickSearchDefaults() to get instance and then getQSDLookup() function // if we call this function as static it replaces context and use ImportViewStep3 as $this in getQSDLookup() $template_handler = new TemplateHandler(); $quicksearch_js = $template_handler->createQuickSearchCode($fields, $fields, 'importstep3'); $this->ss->assign("QS_JS", $quicksearch_js); $this->ss->assign("JAVASCRIPT", $this->_getJS($required)); $this->ss->assign('required_fields', implode(', ', $required)); $this->ss->assign('CSS', $this->_getCSS()); $content = $this->ss->fetch($this->getCustomFilePathIfExists('modules/Import/tpls/step3.tpl')); $this->ss->assign("CONTENT", $content); $this->ss->display($this->getCustomFilePathIfExists('modules/Import/tpls/wizardWrapper.tpl')); }
protected function saveMappingFile() { global $current_user; $firstrow = unserialize(base64_decode($_REQUEST['firstrow'])); $mappingValsArr = $this->importColumns; $mapping_file = new ImportMap(); if (isset($_REQUEST['has_header']) && $_REQUEST['has_header'] == 'on') { $header_to_field = array(); foreach ($this->importColumns as $pos => $field_name) { if (isset($firstrow[$pos]) && isset($field_name)) { $header_to_field[$firstrow[$pos]] = $field_name; } } $mappingValsArr = $header_to_field; } //get array of values to save for duplicate and locale settings $advMapping = $this->retrieveAdvancedMapping(); //merge with mappingVals array if (!empty($advMapping) && is_array($advMapping)) { $mappingValsArr = $advMapping + $mappingValsArr; } //set mapping $mapping_file->setMapping($mappingValsArr); // save default fields $defaultValues = array(); for ($i = 0; $i < $_REQUEST['columncount']; $i++) { if (isset($this->importColumns[$i]) && !empty($_REQUEST[$this->importColumns[$i]])) { $field = $this->importColumns[$i]; $fieldDef = $this->bean->getFieldDefinition($field); if (!empty($fieldDef['custom_type']) && $fieldDef['custom_type'] == 'teamset') { require_once 'include/SugarFields/Fields/Teamset/SugarFieldTeamset.php'; $sugar_field = new SugarFieldTeamset('Teamset'); $teams = $sugar_field->getTeamsFromRequest($field); if (isset($_REQUEST['primary_team_name_collection'])) { $primary_index = $_REQUEST['primary_team_name_collection']; } //If primary_index was selected, ensure that the first Array entry is the primary team if (isset($primary_index)) { $count = 0; $new_teams = array(); foreach ($teams as $id => $name) { if ($primary_index == $count++) { $new_teams[$id] = $name; unset($teams[$id]); break; } } foreach ($teams as $id => $name) { $new_teams[$id] = $name; } $teams = $new_teams; } //if $json = getJSONobj(); $defaultValues[$field] = $json->encode($teams); } else { $defaultValues[$field] = $_REQUEST[$this->importColumns[$i]]; } } } $mapping_file->setDefaultValues($defaultValues); $result = $mapping_file->save($current_user->id, $_REQUEST['save_map_as'], $_REQUEST['import_module'], $_REQUEST['source'], isset($_REQUEST['has_header']) && $_REQUEST['has_header'] == 'on', $_REQUEST['custom_delimiter'], html_entity_decode($_REQUEST['custom_enclosure'], ENT_QUOTES)); }
$secondrow[$ind] = to_html($val); } } if (isset($thirdrow)) { //Asha: Fix for ticket #4432 foreach ($thirdrow as $ind => $val) { if (strlen($val) > 30) { $thirdrow[$ind] = substr(to_html($val), 0, 30) . " .........."; } else { $thirdrow[$ind] = to_html($val); } } } } $field_map = $outlook_contacts_field_map; $mapping_file = new ImportMap(); $saved_map_lists = $mapping_file->getSavedMappingsList($_REQUEST['return_module']); $map_list_combo = '<select class="small" name="source" id="saved_source" disabled onchange="getImportSavedMap(this)">'; $map_list_combo .= '<OPTION value="-1" selected>--Select--</OPTION>'; if (is_array($saved_map_lists)) { foreach ($saved_map_lists as $mapid => $mapname) { $map_list_combo .= '<OPTION value=' . $mapid . '>' . $mapname . '</OPTION>'; } } $map_list_combo .= '</select>'; //This link is Delete link for the selected mapping $map_list_combo .= " <span id='delete_mapping' style='visibility:hidden;'><a href='javascript:; deleteMapping();'>Del</a></span>"; $smarty->assign("SAVED_MAP_LISTS", $map_list_combo); if (count($mapping_arr) > 0) { $field_map =& $mapping_arr; } else {
/** function used to publish or unpublish the mapping * @param int $user_id - user id who is publishing the map * @param string $flag - yes or no * @return value - if flag is yes then update the db and return 1 otherwise return -1 */ function mark_published($user_id, $flag) { $other_map = new ImportMap(); if ($flag == 'yes') { // if you are trying to publish your map // but there's another published map // by the same name $query_arr = array('name' => $this->name, 'is_published' => 'yes'); } else { // if you are trying to unpublish a map // but you own an unpublished map by the same name $query_arr = array('name' => $this->name, 'assigned_user_id' => $user_id, 'is_published' => 'no'); } $other_map->retrieve_by_string_fields($query_arr, false); if (isset($other_map->id)) { //.. don't do it! return -1; } $query = "UPDATE {$this->table_name} set is_published='{$flag}', assigned_user_id='{$user_id}' where id='" . $this->id . "'"; $this->db->query($query, true, "Error marking import map published: "); return 1; }
/** * Similar to retrieve_by_string_fields, but returns multiple objects instead of just one. * * @param array $fields_array * @return array $obj_arr */ public function retrieve_all_by_string_fields($fields_array) { $query = "SELECT *\n FROM {$this->table_name}\n " . $this->get_where($fields_array); $result = $this->db->query($query, true, " Error: "); $obj_arr = array(); while ($row = $this->db->fetchByAssoc($result, -1, FALSE)) { $focus = new ImportMap(); foreach ($this->column_fields as $field) { if (isset($row[$field])) { $focus->{$field} = $row[$field]; } } $focus->fill_in_additional_detail_fields(); $obj_arr[] = $focus; } return $obj_arr; }
$bean = $import_bean_map[$_REQUEST['module']]; require_once "modules/Import/{$bean}.php"; $focus = new $bean(); } else { echo "Imports aren't set up for this module type\n"; exit; } //setup the importable fields array. $importable_fields = array(); $translated_column_fields = array(); get_importable_fields($focus, $importable_fields, $translated_column_fields); $firstrow = $rows[0]; $field_map = $outlook_contacts_field_map; $mapping_arr = array(); if (!empty($_REQUEST['source_id'])) { $mapping_file = new ImportMap(); $mapping_file->retrieve($_REQUEST['source_id'], false); $mapping_content = $mapping_file->content; $_REQUEST['source'] = $mapping_file->source; if (isset($mapping_content) && $mapping_content != "") { $pairs = split("&", $mapping_content); foreach ($pairs as $pair) { list($name, $value) = split("=", $pair); $mapping_arr["{$name}"] = $value; } } } //$xtpl->assign("SOURCE_NAME", $source_to_name[$_REQUEST['source']] ); if (count($mapping_arr) > 0) { $field_map = $mapping_arr; } else {