summaryrefslogtreecommitdiffstats
path: root/content/posts/phone-link-speed-dials-to horizon-integrator.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/posts/phone-link-speed-dials-to horizon-integrator.md')
-rw-r--r--content/posts/phone-link-speed-dials-to horizon-integrator.md83
1 files changed, 83 insertions, 0 deletions
diff --git a/content/posts/phone-link-speed-dials-to horizon-integrator.md b/content/posts/phone-link-speed-dials-to horizon-integrator.md
new file mode 100644
index 0000000..68a537a
--- /dev/null
+++ b/content/posts/phone-link-speed-dials-to horizon-integrator.md
@@ -0,0 +1,83 @@
+---
+title: "Migrating LG Phone-Link Contacts to Horizon Integrator"
+date: 2019-07-23T12:48:00
+tags: ["databases", "formats", "guides", "linux", "pbx", "servers", "windows", "work"]
+---
+
+If you've used LG's Phone-Link software for any reasonable period of time, you should have a large XML file in your `%appdata%\PHONE-LiNK` directory named `Recent.xml`.
+
+Make a copy of this and get it on a computer with a Linux environment. For this process, we're going to need `xmllint` from the `libxml2-utils` package and `xmlstarlet` from the `xmlstarlet` package.
+
+Once these are installed, verify your `Recent.xml` file is the expected unholy mess we've come to know and love via `less Recent.xml`. Once you've been sufficiently disheartened, close `less` by pressing `q`.
+
+From this, make a backup as that's always a good idea:
+```
+cp "Recent.xml" "backup-Recent.xml"
+```
+
+Now we're going to lint the file, merge the incoming and outgoing blocks, and build a CSV file:
+```
+xmllint "Recent.xml" --format --output "Recent.xml"
+sed -i 's/CalledContact/CallerContact/g' "Recent.xml"
+xmlstarlet sel -T -t -m /Recent/CallerContact -v "concat(Name,';',Contact,';',Tel,';;',Email,';',Company)" -n "Recent.xml" > "Recent.csv"
+```
+
+Now we have a messy CSV file with the information in it we wanted.
+
+We're going to sort this, remove unecessary entries (from places with no names) and fix up the delimiters (as Phone-Link will save Names as Contact, Company which breaks CSV files):
+```
+sort -b -u -o "Recent.csv" "Recent.csv"
+sed -i '/^(/d' "Recent.csv"
+sed -i 's/, / - /g' "Recent.csv"
+sed -i 's/;/,/g' "Recent.csv"
+```
+
+Last but not least, we're going to add our header row, again using `sed`:
+```
+sed -i '1 i\First Name,Last Name,Number,Extension,Email,Company' "Recent.csv"
+```
+
+Now you can start working your way through the inane and sometimes arcane Horizon Company Directory requirements, as detailed below:
+* No brackets
+* No @ symbols (except for email addresses)
+* No apostrophes
+* No ampersands
+* No slashes
+* No hashes
+* No periods
+* No hyphens
+* No spaces
+* 15 characters max
+* No empty fields (except for extension, and email)
+
+The way I go about this is to split the columns into separate files, apply the filters and then rebuild the file afterwards.
+
+So, let's get splitting:
+```
+for i in {1..6}; do cut -f"$i" -d\, "Recent.csv" > "column-$i.txt"; done
+```
+
+Here is where I manually split the *Name* field into *First Name* and *Last Name*. I did this manually as some names didn't nicely fit into the *A B* format.
+
+Now we've got our columns split, lets get processing those invalid characters. You'll need to process each file individually, as certain files need certain filters.
+```
+sed -i -e "s/#//g" file.txt # hash symbols
+sed -i -e "s/'//g" file.txt # apostrophes
+sed -i -e "s/@//g" file.txt # at symbols
+sed -i -e "s/\///g" file.txt # slashes
+sed -i -e "s/&//g" file.txt # ampersands
+sed -i -e "s/(//g" file.txt # open brackets
+sed -i -e "s/)//g" file.txt # close brackets
+sed -i -e "s/-//g" file.txt # hyphens
+sed -i -e "s/ //g" file.txt # spaces
+sed -i -e 's/\.//g' file.txt # periods
+sed -i -e 's/^$/x/' file.txt # replace blank lines
+sed -i -e "s/^\(.\{15\}\).*/\1/g" file.txt # snip columns to length
+```
+
+Once done, merge the files back together using paste, removing duplicates with uniq:
+```
+paste -d, column-{1..6}.txt | uniq > Recent-processed.csv
+```
+
+Now try to upload the resulting file, and manually fix any inevitable errors that will have cropped up like duplicate entries and trailing invalid characters. Above is the process I used for my dataset. \ No newline at end of file