summaryrefslogtreecommitdiff
path: root/bits/bbdb-ldif.el
diff options
context:
space:
mode:
Diffstat (limited to 'bits/bbdb-ldif.el')
-rw-r--r--bits/bbdb-ldif.el820
1 files changed, 0 insertions, 820 deletions
diff --git a/bits/bbdb-ldif.el b/bits/bbdb-ldif.el
deleted file mode 100644
index fd54ac7..0000000
--- a/bits/bbdb-ldif.el
+++ /dev/null
@@ -1,820 +0,0 @@
-;;; Copyright (C) 1998,2000 by Niels Elgaard Larsen <elgaard@diku.dk>
-
-;;; Revision 1.1 2006/02/04 15:35:15 joerg
-;;; Added
-;;;
-;;; Revision 1.1 2005/02/13 14:16:03 waider
-;;; * added new file, with minor abuse to make it work with current BBDB
-;;;
-;;; Revision 1.7 2000/03/15 14:16:44 elgaard
-;;; Fixed problem with concatenation of strings/integers
-;;; Changed mobiletelephonenumber to cellphone to follow Netscape :-(
-;;; Added support for pagerphone
-;;;
-;;; Revision 1.6 1998/09/08 12:35:27 elgaard
-;;; Works with xemacs, emacs, emacs-19.34, bbdb-2 and bbdb-1.51
-;;; Bugfixes
-;;;
-;; Rev 0.3
-;; Can export mail-alias'es and .mailrc aliases to Netscape Mailing List
-;;Bugfix.
-;;
-
-;; Rev. 0.2.1
-;; Compiles without MEL
-
-;; Rev. 0.2
-;; Notes work better now
-;; added 'bbdb-elided-export-ldif'
-;; Fixed base64 bug
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-;; Niels Elgaard Larsen, <URL:mailto:elgaard@diku.dk>
-;; July 18, 1998
-
-;; bbdb-import-ldif imports LDIF entries
-;; bbdb-to-ldif export bbdb to LDIF.
-
-;; Both functions are somewhat specialized for Netscape Communicator (and Mozilla)
-
-
-
-;;; Installation:
-
-;;; Put (add-hook 'bbdb-load-hook (function (lambda () (require 'bbdb-ldif))))
-;;; into your .emacs, or autoload it.
-
-
-;; If you use non-ASCII characters recode the output file from emacs:
-;; "recode ..UTF-8 output.ldif"
-;; and the input file from Netscape:
-;; "recode UTF-8.. i2.ldif "
-;;;;;; Does not work for base-64 encoded text.
-
-(require 'bbdb)
-
-;; WAIDER MOD FEB 2005
-;; deprecated functions. I should fix the code rather than do this, but.
-(defun bbdb-address-street1(addr)
- (nth 0 (bbdb-address-streets addr)))
-(defun bbdb-address-street2(addr)
- (nth 1 (bbdb-address-streets addr)))
-(defun bbdb-address-street3(addr)
- (nth 2 (bbdb-address-streets addr)))
-
-(if (locate-library "mel") (require 'mel)
- (message "We try without MEL (base64 operation), multiline fields will not work"
- )
- )
-
-(if (fboundp 'split-string) nil
- (defun split-string (string &optional pattern)
- "Return a list of substrings of STRING which are separated by PATTERN.
-If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"."
- (or pattern
- (setq pattern "[ \f\t\n\r\v]+"))
- ;; The FSF version of this function takes care not to cons in case
- ;; of infloop. Maybe we should synch?
- (let (parts (start 0))
- (while (string-match pattern string start)
- (setq parts (cons (substring string start (match-beginning 0)) parts)
- start (match-end 0)))
- (nreverse (cons (substring string start) parts))))
- )
-
-(if (fboundp 'caadr) nil (defun caadr (foo) (car (car (cdr foo)))))
-
-
-
-(defvar bbdb-ldif-nsnil "?" "Null name for Netscape")
-
-(defun tnsnil (st)
- (if (equal st bbdb-ldif-nsnil)
- nil
- st))
-
-(defvar bbdb-elided-export-ldif nil "Set this to a list of some
-of the symbols '(address phone net notes) to select those fields to be left
-out when exporting to LDIF format"
-)
-
-;(require 'bbdb-snarf)
-(require 'bbdb-com)
-
-
-(defvar bbdb-ldif-prefix "xbbdb")
-(defvar bbdb-ldif-prefixh "xhbbdb")
-
-;;;; From bbdb-snarf with bugfix:
-(defun bbdb-merge-internally-ldif (old-record new-record)
- "Merge two records. NEW-RECORDS wins over OLD in cases of ties."
- (if (and (null (bbdb-record-firstname new-record))
- (bbdb-record-firstname old-record))
- (bbdb-record-set-firstname new-record (bbdb-record-firstname old-record)))
- (if (and (null (bbdb-record-lastname new-record))
- (bbdb-record-lastname old-record))
- (bbdb-record-set-lastname new-record (bbdb-record-lastname old-record)))
- (if (and (null (bbdb-record-company new-record))
- (bbdb-record-company old-record))
- (bbdb-record-set-company new-record (bbdb-record-company old-record)))
- ;; nets
- (let ((old-nets (bbdb-record-net old-record))
- (new-nets (bbdb-record-net new-record)))
- (while old-nets
- (if (not (member (car old-nets) new-nets))
- (setq new-nets (append new-nets (list (car old-nets)))))
- (setq old-nets (cdr old-nets)))
- (bbdb-record-set-net new-record new-nets))
- ;; addrs
- (let ((old-addresses (bbdb-record-addresses old-record))
- (new-addresses (bbdb-record-addresses new-record)))
- (while old-addresses
- (if (not (member (car old-addresses) new-addresses))
- (setq new-addresses (append new-addresses (list (car old-addresses)))))
- (setq old-addresses (cdr old-addresses)))
- (bbdb-record-set-addresses new-record new-addresses))
- ;; phones
- (let ((old-phones (bbdb-record-phones old-record))
- (new-phones (bbdb-record-phones new-record)))
- (while old-phones
- (if (not (member (car old-phones) new-phones))
- (setq new-phones (append new-phones (list (car old-phones)))))
- (setq old-phones (cdr old-phones)))
- (bbdb-record-set-phones new-record new-phones))
- ;; notes
- (let ((old-notes (bbdb-ensure-list (bbdb-record-raw-notes old-record)))
- (new-notes (bbdb-ensure-list (bbdb-record-raw-notes new-record))))
- (while old-notes
- (if (not (member (car old-notes) new-notes))
- (setq new-notes (append new-notes (list (car old-notes)))))
- (setq old-notes (cdr old-notes)))
- (bbdb-record-set-raw-notes new-record new-notes))
- ;; return
- new-record)
-
-(defun bbdb-ensure-list (foo)
- (if (lisp foo) foo
- (list foo)
- )
- )
-
-(defun bbdb-zulu (date)
- (if (fboundp 'bbdb-time-convert)
- (bbdb-time-convert date "%Y%m%d%H%Mz")
- date ;; bbdb1.51 does not use it anyway.
- )
-)
-
-(defun bbdb-unzulu (date)
- (if (eq (length date) 13)
- (format "%s-%s-%s" (substring date 0 4) (substring date 4 6) (substring date 6 8))
- date)
-)
-(defun bbdb-ldif-indent (str)
- (if (> (length str) 70)
- (concat (substring str 0 65) "\n " (bbdb-ldif-indent (substring str 65)))
- str)
-)
-
-(defun addnote (nrec nname note)
- (bbdb-record-set-raw-notes
- nrec (cons (cons nname note) (bbdb-record-raw-notes nrec) )
- )
- )
-
-(defmacro alias-update ()
- (if (fboundp 'bbdb-define-all-aliases) (list 'bbdb-define-all-aliases))
-)
-
-(defmacro alias-setup ()
- (if (fboundp 'mail-aliases-setup) (list 'mail-aliases-setup))
-)
-
-(defmacro domailaliases ()
- (fboundp 'mail-aliases-setup)
-)
-
-
-(defmacro dodenote (st)
- (if (fboundp 'base64-decode-string)
- (list 'base64-decode-string st)
- "?"
- )
-)
-
-(defun addtonote (ton str)
- (cond
- ((and ton str) (concat ton "\n" str))
- (str (concat "--bbdb--\n" str))
- (ton)
- )
- )
-
-(defun setaddr (nrec afun val)
- (if (not (bbdb-record-addresses nrec))
- (let ((addr(make-vector bbdb-address-length "")))
- (bbdb-record-set-addresses nrec (list addr))
- (bbdb-address-set-location addr "address")
- )
- )
- (eval (list afun (car (bbdb-record-addresses nrec)) val))
- )
-
-
-(defun setphone (nrec iloc pno np)
- (let ((nov (bbdb-parse-phone-number pno))
- (pv (make-vector bbdb-phone-length ""))
- (ploc iloc)
- )
- (if (and np (equal (car np) (concat bbdb-ldif-prefixh "PhoneLoc")))
- (setq ploc (cdr np))
- )
-
- (if (and nov bbdb-north-american-phone-numbers-p)
- (progn
- (bbdb-phone-set-location pv ploc)
- (bbdb-phone-set-area pv (nth 0 nov))
- (bbdb-phone-set-exchange pv (nth 1 nov))
- (bbdb-phone-set-suffix pv (nth 2 nov))
- (bbdb-phone-set-extension pv (or (nth 3 nov) 0))
- )
- (setq pv (vector ploc pno))
- )
- (bbdb-record-set-phones nrec(append (bbdb-record-phones nrec)(list pv)))
- )
- )
-
-(defun bbdb-string-fetch (key mls)
- (let ((tmls (car mls)) res)
- (while (and (not res) (car tmls))
- (if (string-match (format "%s= *\\(.+\\)" key) (car tmls))
- (setq res (match-string 1 (car tmls))))
- (setq tmls (cdr tmls)))
- res
- )
- )
-
-(defun bbdb-ldif-get-phone (atts df)
- (if (and (cdr atts) (equal (concat bbdb-ldif-prefixh "phoneloc") (caadr atts)))
- (cdr (cadr atts))
- df)
-)
-
-(defun bbdb-import-ldif ()
- "import LDIF entries for current buffer
-Mailinglists \(groupOfNames\) are imported as entries in bbdb mail-alias fields."
- (interactive)
-; (message (concat (/(* 100 (point)) (point-max)) " pct\n"))
-;; (message (concat "\nnew rec at" (point)))
- (let ((reclist (split-string (buffer-substring 1 (point-max)) "\n[ \t\r]*\n"))
- (numr 0) maxr (opct 0) pct mailinglists (emptyrec (make-vector bbdb-record-length nil))
- )
- (setq maxr (length reclist))
- (mapcar
- (lambda (rec)
- (if (not (equal "" rec))
- (let (
- (atts (mapcar (lambda (at)
- (if (equal (string-to-char at) ?\ )
- (cons 'continuation (substring at 1))
- (let ( (cpos (string-match ":" at)))
- (if cpos
- (let ((cpos2 ( string-match "[^ \t]" at (1+ cpos))))
- (if cpos2
- (cons (substring at 0 cpos) (substring at cpos2))
- )
- )
- )
- )
- )
- )
- (split-string rec "[\n\r]+"))
- )
- )
- (setq pct (/ (* 100 numr) maxr))
- (if (/= opct pct)
- (progn
- (setq opct pct)
- (message (concat pct " pct"))
- )
- )
- (setq numr (1+ numr))
-
- (if (member '("objectclass" . "groupOfNames") atts)
- (let (mlcn lmlist)
- (while atts
- (if (car atts)
- (let ((attName (downcase (caar atts)))
- (attVal (cdar atts))
- )
- (while (and (cdr atts) (equal (caadr atts) 'continuation))
- (setq atts (cdr atts))
- (setq attVal (concat attVal (cdar atts)))
- )
- (if (equal (string-to-char attVal) ?:)
- (setq attVal (dodenote (substring attVal (string-match "[^: \t]" attVal)))))
-
- (cond
- ((or (equal attName "cn") (equal attName "commonname")) (setq mlcn attVal))
- ((equal attName "member")
- (setq lmlist (cons (bbdb-split attVal ",") lmlist))
- )
- )
- )
- )
- (setq atts (cdr atts))
- ) ; while
- (setq mailinglists (cons (cons mlcn lmlist) mailinglists))
- )
- (let (
- (new-record (make-vector bbdb-record-length nil)))
- (while atts
- (if (stringp (car-safe (car-safe atts)))
- (let (
- (attName (downcase (caar atts)))
- (attVal (cdar atts))
- (nextAtt (car-safe (cdr-safe atts)))
- )
-
- (while (and (cdr atts) (equal (caadr atts) 'continuation))
- (setq atts (cdr atts))
- (setq attVal (concat attVal (cdar atts)))
- )
- (if (equal (string-to-char attVal) ?:)
- (setq attVal
- (dodenote (substring attVal (string-match "[^: \t]" attVal))))
- )
- (cond
- ;((or (equal attName "cn") (equal attName "commonname")) hmm)
- ((or (equal attName "sn") (equal attName "surname")) (bbdb-record-set-lastname new-record attVal))
- ((equal attName "givenname") (bbdb-record-set-firstname new-record attVal))
- ((equal attName "o") (bbdb-record-set-company new-record attVal))
- ((equal attName "locality") (setaddr new-record 'bbdb-address-set-city attVal))
- ((equal attName "postalcode") (setaddr new-record 'bbdb-address-set-zip attVal))
- ((equal attName "st") (setaddr new-record 'bbdb-address-set-state attVal))
- ((equal attName (concat bbdb-ldif-prefixh "mainaddrloc"))
- (setaddr new-record 'bbdb-address-set-location attVal))
-
- ;; This is ugly. But is it the only way Netscape understands.
- ((equal attName "postofficebox") (setaddr new-record 'bbdb-address-set-street1 attVal))
- ((equal attName "streetaddress") (setaddr new-record 'bbdb-address-set-street2 attVal))
-
- ((equal attName "mail")
- (bbdb-record-set-net new-record (cons attVal (bbdb-record-net new-record))))
-
- ((equal attName "mailalternateaddress")
- (bbdb-record-set-net new-record (append (bbdb-record-net new-record)
- (list attVal)))
- )
-
- ((equal attName "postaladdress")
- (let (
- (alines (split-string (concat (bbdb-ldif-renl attVal) "\n")"[\n\r]"))
- (addr (make-vector bbdb-address-length "")))
- (if (and (string-match "^bbdb=" (nth 0 alines ))
- (> (length alines) 6))
- (progn
- (bbdb-address-set-location addr (substring (nth 0 alines) 5))
- (bbdb-address-set-street1 addr (nth 1 alines))
- (bbdb-address-set-street2 addr (nth 2 alines))
- (bbdb-address-set-street3 addr (nth 3 alines))
- (bbdb-address-set-zip addr (nth 4 alines))
- (bbdb-address-set-city addr (nth 5 alines))
- (bbdb-address-set-state addr (nth 6 alines))
- (bbdb-record-set-addresses
- new-record
- (append (bbdb-record-addresses new-record) (list addr))
- )
- )
- )
- )
- )
-
-
- ((equal attName "homephone")
- (setphone new-record (bbdb-ldif-get-phone atts "Private") attVal nextAtt) )
- ((equal attName "facsimiletelephonenumber")
- (setphone new-record (bbdb-ldif-get-phone atts "Fax") attVal nextAtt))
- ((equal attName "pagerphone")
- (setphone new-record (bbdb-ldif-get-phone atts "pagerphone") attVal nextAtt))
- ((equal attName "cellphone")
- (setphone new-record (bbdb-ldif-get-phone atts "cellphone") attVal nextAtt))
- ((equal attName "mobiletelephonenumber")
- (setphone new-record (bbdb-ldif-get-phone atts "cellphone") attVal nextAtt))
- ((equal attName "telephonenumber")
- (setphone new-record (bbdb-ldif-get-phone atts "Work") attVal nextAtt))
- ((equal attName "xmozillanickname") (bbdb-record-set-aka new-record (list attVal)))
- ((or (equal attName "description") (equal attName "multilinedescription"))
- (if (equal attName "multilinedescription")
- (setq attVal (bbdb-ldif-renl attVal)))
- (let ((thenote (substring attVal 0 (string-match "\n?--bbdb--\n" attVal))))
- (if (not (equal "" thenote))
- (addnote new-record 'notes thenote)
- )
- )
- )
-
- ((equal attName "createTimestamp")
- (addnote new-record 'creation-date (bbdb-unzulu attVal)))
- ((equal attName "modifyTimestamp")
- (addnote new-record 'timestamp (bbdb-unzulu attVal)))
- ((eq (string-match bbdb-ldif-prefix attName) 0)
- (let (
- (bbdb-ldif-note (make-symbol (substring attName (length bbdb-ldif-prefix)))))
- (bbdb-record-set-raw-notes new-record
- (cons (cons bbdb-ldif-note attVal)
- (bbdb-record-raw-notes new-record)))
- )
- )
- )
- )
- )
- (setq atts (cdr atts))
- )
- ; (print new-record)
- (if (not (equal new-record emptyrec))
- (progn
- (bbdb-record-set-cache new-record (make-vector bbdb-cache-length nil))
- (let ((old-record
-;; (and (bbdb-record-net new-record)
- (bbdb-search-simple (tnsnil (bbdb-record-name new-record))
- (car (bbdb-record-net new-record)))
-;; )
- )
- )
- (if old-record
- (progn
- (setq new-record (bbdb-merge-internally-ldif old-record new-record))
- (bbdb-delete-record-internal old-record)))
- ;; create new record
- (bbdb-invoke-hook 'bbdb-create-hook new-record)
- (bbdb-change-record new-record t)
- (bbdb-hash-record new-record)
- )
- )
- )
- )
- )
-
- )
- ) ; if
- ) ; lambda
- reclist
- )
- (mapcar
- (lambda (mlist)
- (let (
- (mlcn (car mlist)) (lmlist (cdr mlist)))
- (if mlcn
- (while lmlist
- (let (
- (mnet (bbdb-string-fetch"mail" lmlist))
- (mname (bbdb-string-fetch"cn" lmlist))
- (mcomp (bbdb-string-fetch"o" lmlist))
-;; (mou (bbdb-string-fetch"ou" lmlist))
- (therecs (bbdb-records))
- therec
- mal
- )
- (if mnet (setq therecs (bbdb-search therecs nil nil mnet nil)))
- (if mname (setq therecs (bbdb-search therecs mname nil nil nil )))
- (if mcomp (setq therecs (bbdb-search therecs nil mcomp nil nil nil )))
-
- (cond ((not therecs)
- (message (concat "Mailing list member not found: " mname " " mnet)))
- ((= (length therecs) 1)
- (setq therec (car therecs))
- (setq mal (assq 'mail-alias (bbdb-record-raw-notes therec)))
- (if (not mal)
- (progn
- (setq mal (cons 'mail-alias ""))
- (bbdb-record-set-raw-notes therec (cons mal (bbdb-record-raw-notes therec))))
- (bbdb-change-record therec nil)
- (bbdb-hash-record therec)
- )
- (if (not (member mlcn (split-string (cdr mal) "[, ]")))
- (setcdr mal (concat mlcn (if (> (length (cdr-safe mal)) 0) "," "") (cdr mal) )))
- )
- (t (message "Mailing List member not unique %s, %s" mname mnet))
- )
- )
- (setq lmlist (cdr lmlist))
- )
- ; (define-mail-alias cn lmlist)
- )
- )
- )
- mailinglists
- )
- )
-(message nil)
-)
-
-
-
-(defun rmspace (str)
- (apply 'concat (bbdb-split str "\n\r")))
-
-(defun bbdb-ldif-replace-string (str frs tos)
- (let ((start 0))
- (while (string-match frs str start)
- (setq str
- (concat (substring str 0 (match-beginning 0))
- tos
- (substring str (match-end 0))))
- (setq start (+ (length tos) (match-beginning 0))))
- )
-str
-)
-
-
-(defun bbase64-encode-string (st)
- (concat ":" (bbdb-ldif-indent (rmspace st))
- )
- )
-
-(defun bbdb-ldif-rmnl (str)
- (bbdb-ldif-replace-string (bbdb-ldif-replace-string str "\\$" "\\24") "\n" "$")
-)
-
-(defun bbdb-ldif-renl (str)
- (bbdb-ldif-replace-string (bbdb-ldif-replace-string str "\\$" "\n") "\\\\24" "$")
-)
-
-(defmacro donote (st)
- (if (fboundp 'base64-encode-string)
- (list 'bbase64-encode-string (list 'base64-encode-string st))
- (list 'bbdb-ldif-rmnl st)
- )
-)
-
-(defun base64IfMulti (st)
- (if (string-match "\n" st)
- (donote st)
- (concat " " (bbdb-ldif-indent st))
- )
-)
-
-(defun nsloc (pl) "Guess mapping from userdefined bbdb locations to NS Work/Home/Fax"
- (let (
- (pld (and pl (downcase pl)))
- (fc (and pl (not (equal pl "")) (string-to-char (downcase pl))))
- )
- (cond ( (not fc) "telephonenumber")
- ((or (= fc ?a) (= fc ?w)) "telephonenumber")
- ( (= fc ?h) "homephone")
-;; ( (= fc ?m) "mobileTelephoneNumber")
- ( (equal pld "private") "homephone")
- ( (= fc ?m) "cellphone")
- ( (and (= fc ?p) (> (length pld) 1) (= (aref pld 1) ?a)) "pagerphone")
- ( (equal pld "fax") "facsimiletelephonenumber")
- ( t "telephonenumber")
- )
- )
-)
-
-(defun tnil(tt)
- (if tt tt "?"))
-
-(defvar ldifbuffer "*LDIF*" "Name of buffer for LDIF output")
-
-(defun bbdb-to-ldif (visible-records) "Converts BBDB to LDIF format. Can be used to export bbdb to Netscape
-Communicator Address book.\\<bbdb-mode-map>
-If \"\\[bbdb-apply-next-command-to-all-records]\\[bbdb2ldif]\" is \
-used instead of simply \"\\[bbdb2ldif]\", then includes only the
-people currently in the *BBDB* buffer.
-The result is placed in a buffer name \"*LDIF*\"
-If MEL is installed Multiline notes/descriptions work with Netscape address book.
-Mail-aliases from mailrc file or bbdb mail-aliases fields are exported as mainglists
-\(GroupOfNames\)
-"
- (interactive (list
- (bbdb-do-all-records-p)
- )
- )
- (let* (
- (target (cons bbdb-define-all-aliases-field "."))
- (ldif-records
- (bbdb-search
- (if (not visible-records)
- (bbdb-records)
- (mapcar 'car bbdb-records)
- )
- nil nil nil target)
- )
- tmps
- record
- )
-
-
- (setq ldif-records
- (if (not visible-records)
- (bbdb-records)
- (mapcar 'car bbdb-records)
- )
- )
-
- (set-buffer (get-buffer-create ldifbuffer))
- (setq fill-column 1000)
- (erase-buffer)
-
- (while ldif-records
- (setq record (car ldif-records))
- (insert "\nxmozillausehtmlmail: FALSE\n")
- (let (
- (net (car (bbdb-record-net record)))
- (rnet (bbdb-record-net record))
- )
- (insert (format "dn: cn=%s" (tnil (bbdb-record-name record))))
- (if net
- (insert (format ",mail=%s" net))
- )
- (insert "\n")
-
- (setq tmps (bbdb-record-firstname record)) (insert "givenname: " (tnil tmps) "\n")
- (setq tmps (bbdb-record-lastname record)) (if tmps (insert "sn: " tmps "\n"))
- (insert "objectclass: top\nobjectclass: person\n")
- (setq tmps (bbdb-record-company record)) (if tmps (insert "o: " tmps "\n"))
- (setq tmps (bbdb-record-name record)) (if tmps (insert "cn: " tmps "\n"))
-
- (if net (insert "mail: " net "\n"))
- (while (cdr rnet)
- (insert "mailAlternateAddress: " (cadr rnet) "\n")
- (setq rnet (cdr rnet))
- )
- )
- (let (
- (phones (bbdb-record-phones record))
- (addrs (bbdb-record-addresses record))
- (aka (bbdb-record-aka record))
- (firstaddr t)
- tonote
- phone
- (elide nil)
- )
-
- (while phones
- (setq phone (car phones))
- (if (equal (nsloc (bbdb-phone-location phone))"cellphone")
- (setq tonote (addtonote tonote (concat "M:" (bbdb-phone-string phone) )))
- )
- (if (equal (nsloc (bbdb-phone-location phone))"pagerphone")
- (setq tonote (addtonote tonote (concat "P:" (bbdb-phone-string phone) )))
- )
- (insert (format "%s: " (nsloc (bbdb-phone-location phone))) (bbdb-phone-string phone) "\n")
- (insert bbdb-ldif-prefixh "PhoneLoc:" (bbdb-phone-location phone)"\n")
- (setq phones (cdr phones)))
-
- (let (addr tmps)
- (while addrs
- (setq addr (car addrs))
- (if firstaddr (progn
- (if (= 0 (length (setq tmps (bbdb-address-street1 addr)))) nil (insert "postOfficeBox: " tmps "\n"))
- (if (= 0 (length (setq tmps (bbdb-address-street2 addr)))) nil (insert "streetaddress: " tmps "\n"))
- (if (= 0 (length (setq tmps (bbdb-address-street3 addr)))) nil (insert "streetaddress: " tmps "\n" ))
-
- ; This does not work with Netscape
- ; (if (= 0 (length (setq tmps (bbdb-address-street1 addr)))) nil (insert "homePostalAddress:" tmps ))
- ; (if (= 0 (length (setq tmps (bbdb-address-street2 addr)))) nil (insert "$" tmps))
- ; (if (= 0 (length (setq tmps (bbdb-address-street3 addr)))) nil (insert "$" tmps ))
- ; (insert "\n")
-
- (insert "locality:" (bbdb-address-city addr) "\n")
- (setq tmps (bbdb-address-state addr))
- (if (and tmps (not (equal tmps ""))) (insert "st:" tmps "\n"))
- (if (bbdb-address-zip-string addr)
- (insert "postalcode:" (bbdb-address-zip-string addr) "\n"))
- (setq firstaddr nil)
- )
- (progn
- (setq tonote (addtonote tonote (concat (bbdb-address-street1 addr))))
- (setq tonote (addtonote tonote (concat (bbdb-address-street2 addr))))
- (setq tonote (addtonote tonote (concat (bbdb-address-street3 addr))))
- (setq tonote (addtonote tonote (concat (bbdb-address-zip-string addr) " " (bbdb-address-city addr) )))
- (insert (concat "postalAddress: "
- (base64IfMulti (concat "bbdb=" (bbdb-address-location addr) "\n"
- (bbdb-address-street1 addr) "\n"
- (bbdb-address-street2 addr) "\n"
- (bbdb-address-street3 addr) "\n"
- (bbdb-address-zip-string addr) "\n"
- (bbdb-address-city addr) "\n"
- (bbdb-address-state addr)
- )
- )
- "\n"
- )
- )
- )
- )
- (setq addrs (cdr addrs)))
- )
- (cond (aka
- (insert (format "%s: %s\n" "xmozillanickname"
- (mapconcat (function identity) aka ", ")))
- ))
- (let ((notes (bbdb-record-raw-notes record)))
- (if (stringp notes)
- (setq notes (list (cons 'notes notes))))
- (while notes
- (setq elide nil)
- (cond
- ((member (caar notes) bbdb-elided-export-ldif) (setq elide t))
- ((eq (car (car notes)) 'creation-date)
- (insert "createTimestamp: " (bbdb-zulu (cdar notes))"\n")
- (setq elide t)
- )
- ((eq (car (car notes)) 'timestamp)
- (setq elide t)
- (insert "modifyTimestamp: "(bbdb-zulu (cdar notes))"\n")
- )
- ((eq (car (car notes)) 'notes) (setq elide t))
- ((eq (car (car notes)) 'mail-alias) (setq elide t))
- (t
- ;; Netscape cannot display this. So we also put it in the notes field.
- (setq tonote (addtonote tonote (format "%s:%s" (caar notes) (cdar notes))))
- (insert (format "%s%s:" bbdb-ldif-prefix (car (car notes))))
- )
- )
- (if (eq (caar notes) 'notes)
- (if tonote
- (setq tonote (concat (cdar notes) "\n" tonote))
- (setq tonote (cdar notes)))
- (if (not elide)
- (insert (base64IfMulti (tnil (cdar notes))) "\n"))
- )
- (setq notes (cdr notes))
- )
- (if tonote
- (if (and (string-match "\n" tonote) (not (fboundp 'base64-encode-string)))
- (insert "multilineDescription:" (bbdb-ldif-rmnl tonote ) "\n")
- (insert "description:" (base64IfMulti tonote ) "\n")
- )
- )
- )
- (if (bbdb-record-addresses record)
- (insert bbdb-ldif-prefixh "mainAddrLoc:" (bbdb-address-location (car (bbdb-record-addresses record)))"\n")
- )
-
- )
- (setq ldif-records (cdr ldif-records))
- )
- )
- (if (and (not visible-records) (domailaliases))
- (progn
- (alias-update)
- (alias-setup)
- ;; (bbdb-define-all-aliases)
- (let ((mai 0) mae alist (malen (length mail-aliases)
- ))
- (while (< mai malen)
- (setq mae (aref mail-aliases mai) )
- (if (and mae (symbolp mae ))
- (progn
- (insert (format "\ndn: cn=%s\n" mae))
- (insert (format "cn: %s\n" mae))
- (insert "objectclass: top\n")
- (insert "objectclass: groupOfNames\n")
- (setq alist (symbol-value mae ))
- (if alist
- (mapcar
- (lambda (an)
- (let ((trec (bbdb-search-simple nil an))
- )
- (if trec
- (insert (format "member: cn=%s,mail=%s\n"
- (tnil (bbdb-record-name trec))
- (tnil (car (bbdb-record-net trec)))
- )
- )
- )
- )
- )
- (split-string alist ", ")
- )
- )
- )
- )
- (setq mai (1+ mai))
- )
- )
- )
- (alias-update)
- )
- (set-window-buffer (get-lru-window) ldifbuffer )
-)
-;;(add-hook 'bbdb-load-hook (lambda () (define-key bbdb-mode-map "L" 'bbdb-to-ldif)))
-(define-key bbdb-mode-map "L" 'bbdb-to-ldif)
-(provide 'bbdb-ldif)