getPreference('export_delimiter'); $delimiter = empty($sugar_config['export_delimiter']) ? $delimiter : $sugar_config['export_delimiter']; $delimiter = empty($userDelimiter) ? $delimiter : $userDelimiter; return $delimiter; } /** * builds up a delimited string for export * @param string type the bean-type to export * @param array records an array of records if coming directly from a query * @return string delimited string for export */ function export($type, $records = null, $members = false) { global $beanList; global $beanFiles; global $current_user; global $app_strings; global $timedate; $contact_fields = array( "id"=>"Contact ID" ,"lead_source"=>"Lead Source" ,"date_entered"=>"Date Entered" ,"date_modified"=>"Date Modified" ,"first_name"=>"First Name" ,"last_name"=>"Last Name" ,"salutation"=>"Salutation" ,"birthdate"=>"Lead Source" ,"do_not_call"=>"Do Not Call" ,"email_opt_out"=>"Email Opt Out" ,"title"=>"Title" ,"department"=>"Department" ,"birthdate"=>"Birthdate" ,"do_not_call"=>"Do Not Call" ,"phone_home"=>"Phone (Home)" ,"phone_mobile"=>"Phone (Mobile)" ,"phone_work"=>"Phone (Work)" ,"phone_other"=>"Phone (Other)" ,"phone_fax"=>"Fax" ,"email1"=>"Email" ,"email2"=>"Email (Other)" ,"assistant"=>"Assistant" ,"assistant_phone"=>"Assistant Phone" ,"primary_address_street"=>"Primary Address Street" ,"primary_address_city"=>"Primary Address City" ,"primary_address_state"=>"Primary Address State" ,"primary_address_postalcode"=>"Primary Address Postalcode" ,"primary_address_country"=>"Primary Address Country" ,"alt_address_street"=>"Other Address Street" ,"alt_address_city"=>"Other Address City" ,"alt_address_state"=>"Other Address State" ,"alt_address_postalcode"=>"Other Address Postalcode" ,"alt_address_country"=>"Other Address Country" ,"description"=>"Description" ); $account_fields = array( "id"=>"Account ID", "name"=>"Account Name", "website"=>"Website", "industry"=>"Industry", "account_type"=>"Type", "ticker_symbol"=>"Ticker Symbol", "employees"=>"Employees", "ownership"=>"Ownership", "phone_office"=>"Phone", "phone_fax"=>"Fax", "phone_alternate"=>"Other Phone", "email1"=>"Email", "email2"=>"Other Email", "rating"=>"Rating", "sic_code"=>"SIC Code", "annual_revenue"=>"Annual Revenue", "billing_address_street"=>"Billing Address Street", "billing_address_city"=>"Billing Address City", "billing_address_state"=>"Billing Address State", "billing_address_postalcode"=>"Billing Address Postalcode", "billing_address_country"=>"Billing Address Country", "shipping_address_street"=>"Shipping Address Street", "shipping_address_city"=>"Shipping Address City", "shipping_address_state"=>"Shipping Address State", "shipping_address_postalcode"=>"Shipping Address Postalcode", "shipping_address_country"=>"Shipping Address Country", "description"=>"Description" ); $focus = 0; $content = ''; $bean = $beanList[$type]; require_once($beanFiles[$bean]); $focus = new $bean; $db = DBManagerFactory::getInstance(); if($records) { $records = explode(',', $records); $records = "'" . implode("','", $records) . "'"; $where = "{$focus->table_name}.id in ($records)"; } elseif (isset($_REQUEST['all']) ) { $where = ''; } else { if(!empty($_REQUEST['current_post'])) { $where = generateSearchWhere($type, $_REQUEST['current_post']); } else { $where = ''; } } $order_by = ""; if($focus->bean_implements('ACL')){ if(!ACLController::checkAccess($focus->module_dir, 'export', true)){ ACLController::displayNoAccess(); sugar_die(''); } if(ACLController::requireOwner($focus->module_dir, 'export')){ if(!empty($where)){ $where .= ' AND '; } $where .= $focus->getOwnerWhere($current_user->id); } } // Export entire list was broken because the where clause already has "where" in it // and when the query is built, it has a "where" as well, so the query was ill-formed. // Eliminating the "where" here so that the query can be constructed correctly. if($members == true){ $query = $focus->create_export_members_query($records); }else{ $beginWhere = substr(trim($where), 0, 5); if ($beginWhere == "where") $where = substr(trim($where), 5, strlen($where)); $query = $focus->create_export_query($order_by,$where); } $result = $db->query($query, true, $app_strings['ERR_EXPORT_TYPE'].$type.":
.".$query); $fields_array = $db->getFieldsArray($result,true); // setup the "header" line with quotation marks $header = implode("\"".getDelimiter()."\"", array_values($fields_array)); if($members){ $header = str_replace('"ea_deleted","ear_deleted","primary_address",','',$header); } $header = "\"" .$header; $header .= "\"\r\n"; $content .= $header; $pre_id = ''; while($val = $db->fetchByAssoc($result, -1, false)) { $new_arr = array(); if($members){ if($pre_id == $val['id']) continue; if($val['ea_deleted']==1 || $val['ear_deleted']==1){ $val['primary_email_address'] = ''; } unset($val['ea_deleted']); unset($val['ear_deleted']); unset($val['primary_address']); } $pre_id = $val['id']; foreach (array_values($val) as $key => $value) { //if our value is a datetime field, then apply the users locale if(isset($focus->field_name_map[$fields_array[$key]]['type']) && $focus->field_name_map[$fields_array[$key]]['type'] == 'datetime'){ $value = $timedate->to_display_date_time($value); } //kbrill Bug #16296 if(isset($focus->field_name_map[$fields_array[$key]]['type']) && $focus->field_name_map[$fields_array[$key]]['type'] == 'date'){ $value = $timedate->to_display_date($value, false); } array_push($new_arr, preg_replace("/\"/","\"\"", $value)); } $line = implode("\"".getDelimiter()."\"", $new_arr); $line = "\"" .$line; $line .= "\"\r\n"; $content .= $line; } return $content; } function generateSearchWhere($module, $query) {//this function is similar with function prepareSearchForm() in view.list.php $seed = loadBean($module); if(file_exists('modules/'.$module.'/SearchForm.html')){ if(file_exists('modules/' . $module . '/metadata/SearchFields.php')) { require_once('include/SearchForm/SearchForm.php'); $searchForm = new SearchForm($module, $seed); } elseif(!empty($_SESSION['export_where'])) { //bug 26026, sometimes some module doesn't have a metadata/SearchFields.php, the searchfrom is generated in the ListView.php. //So currently massupdate will not gernerate the where sql. It will use the sql stored in the SESSION. But this will cause bug 24722, and it cannot be avoided now. $where = $_SESSION['export_where']; $whereArr = explode (" ", trim($where)); if ($whereArr[0] == trim('where')) { $whereClean = array_shift($whereArr); } $where = implode(" ", $whereArr); return $where; } else { return; } } else{ require_once('include/SearchForm/SearchForm2.php'); if (file_exists('custom/modules/'.$module.'/metadata/searchdefs.php')) { require_once('custom/modules/'.$module.'/metadata/searchdefs.php'); } elseif (!empty($metafiles[$module]['searchdefs'])) { require_once($metafiles[$module]['searchdefs']); } elseif (file_exists('modules/'.$module.'/metadata/searchdefs.php')) { require_once('modules/'.$module.'/metadata/searchdefs.php'); } if(!empty($metafiles[$module]['searchfields'])) require_once($metafiles[$module]['searchfields']); elseif(file_exists('modules/'.$module.'/metadata/SearchFields.php')) require_once('modules/'.$module.'/metadata/SearchFields.php'); if(empty($searchdefs) || empty($searchFields)) { //for some modules, such as iframe, it has massupdate, but it doesn't have search function, the where sql should be empty. return; } $searchForm = new SearchForm($seed, $module); $searchForm->setup($searchdefs, $searchFields, 'include/SearchForm/tpls/SearchFormGeneric.tpl'); } $searchForm->populateFromArray(unserialize(base64_decode($query))); $where_clauses = $searchForm->generateSearchWhere(true, $module); if (count($where_clauses) > 0 )$where = '('. implode(' ) AND ( ', $where_clauses) . ')'; $GLOBALS['log']->info("Export Where Clause: {$where}"); return $where; } ?>