[prev in list] [next in list] [prev in thread] [next in thread]
List: horde-dev
Subject: [dev] [framework-patch] csv export: Outlook friendly
From: Francois Marier <francois () nit ! ca>
Date: 2004-07-30 22:15:57
Message-ID: 20040730221557.GO5061 () cthulhu
[Download RAW message or body]
Here's a patch to make Horde CSV files importable into MS Outlook.
It does 3 things:
- rename the fields so that Outlook will match them
- double quotes ( e.g. "Bob "big guy" Jones" => "Bob ""big guy"" Jones" )
- use \r\n as the EOL
All of the above are necessary to have Outlook compatibility.
Now, I also modified the import function so that the doubled quotes
are replaced by single ones and that the field names are restored to
ones that Horde can match automatically.
I have made sure that we can still import CSV files that were exported
using a previous version of Horde. There are only two issues that
this change brings with respect to importing new CSVs inside an older
Horde:
1- older versions will not match the fields automatically
2- older versions will import the doubled quotes
Francois
["csv_outlook_friendly.patch" (text/plain)]
diff -rpuN -X ../ignorelist ../build/framework/Data/Data/csv.php framework/Data/Data/csv.php
--- ../build/framework/Data/Data/csv.php Fri Apr 16 13:20:03 2004
+++ framework/Data/Data/csv.php Fri Jul 30 18:00:25 2004
@@ -62,6 +62,29 @@ class Horde_Data_csv extends Horde_Data
$data = array();
+ if ($header) {
+ $import_mapping = array(
+ 'firstname' => 'first_name',
+ 'middlename' => 'middle_name',
+ 'lastname' => 'last_name',
+ 'e-mail' => 'email',
+ 'homeaddress' => 'homeAddress',
+ 'businessaddress' => 'workAddress',
+ 'homephone' => 'homePhone',
+ 'businessphone' => 'workPhone',
+ 'mobilephone' => 'cellPhone',
+ 'businessfax' => 'fax',
+ 'jobtitle' => 'title',
+ 'company' => 'company',
+ 'notes' => 'notes',
+ 'name' => 'name',
+ 'internetfreebusy' => 'freebusyUrl',
+ 'nickname' => 'alias',
+ 'pgpPublicKey' => 'pgpPublicKey',
+ 'smimePublicKey' => 'smimePublicKey',
+ );
+ }
+
/* File_CSV is present. */
if (class_exists('File_CSV')) {
/* File_CSV is a bit picky at what parameter it
@@ -93,7 +116,12 @@ class Horde_Data_csv extends Horde_Data
} else {
$newline = array();
for ($i = 0; $i < count($head); $i++) {
- $newline[$head[$i]] = empty($line[$i]) ? '' : $line[$i];
+ if (isset($import_mapping[$head[$i]])) {
+ $head[$i] = $import_mapping[$head[$i]];
+ }
+ $cell = $line[$i];
+ $cell = preg_replace("/\"\"/", "\"", $cell);
+ $newline[$head[$i]] = empty($cell) ? '' : $cell;
}
$data[] = $newline;
}
@@ -122,7 +150,12 @@ class Horde_Data_csv extends Horde_Data
} else {
$newline = array();
for ($i = 0; $i < count($head); $i++) {
- $newline[$head[$i]] = empty($line[$i]) ? '' : $line[$i];
+ if (isset($import_mapping[$head[$i]])) {
+ $head[$i] = $import_mapping[$head[$i]];
+ }
+ $cell = $line[$i];
+ $cell = preg_replace("/\"/", "\"\"", $cell);
+ $newline[$head[$i]] = empty($cell) ? '' : $cell;
}
$data[] = $newline;
}
@@ -153,15 +186,37 @@ class Horde_Data_csv extends Horde_Data
}
$export = '';
+ $eol = "\r\n";
if ($header) {
+ $export_mapping = array(
+ 'first_name' => 'firstname',
+ 'middle_name' => 'middlename',
+ 'last_name' => 'lastname',
+ 'email' => 'e-mail',
+ 'homeAddress' => 'homeaddress',
+ 'workAddress' => 'businessaddress',
+ 'homePhone' => 'homephone',
+ 'workPhone' => 'businessphone',
+ 'cellPhone' => 'mobilephone',
+ 'fax' => 'businessfax',
+ 'title' => 'jobtitle',
+ 'company' => 'company',
+ 'notes' => 'notes',
+ 'name' => 'name',
+ 'freebusyUrl' => 'internetfreebusy',
+ 'alias' => 'nickname',
+ 'pgpPublicKey' => 'pgpPublicKey',
+ 'smimePublicKey' => 'smimePublicKey',
+ );
+
$head = current($data);
foreach (array_keys($head) as $key) {
if (!empty($key)) {
- $export .= '"' . $key . '"';
+ $export .= '"' . $export_mapping[$key] . '"';
}
$export .= ',';
}
- $export = substr($export, 0, -1) . "\n";
+ $export = substr($export, 0, -1) . $eol;
}
foreach ($data as $row) {
@@ -171,7 +226,7 @@ class Horde_Data_csv extends Horde_Data
}
$export .= ',';
}
- $export = substr($export, 0, -1) . "\n";
+ $export = substr($export, 0, -1) . $eol;
}
return $export;
--
Horde developers mailing list - Join the hunt: http://horde.org/bounties/
Frequently Asked Questions: http://horde.org/faq/
To unsubscribe, mail: dev-unsubscribe@lists.horde.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic