From 6f018a5b8953d6bc9836bb847845c72cb9540ddf Mon Sep 17 00:00:00 2001 From: root Date: Wed, 31 Oct 2018 00:44:13 +0100 Subject: [PATCH] fixed some issues with Fritzbox phone book XML file format; not yet activating UTF8 uploads; it works but because UTF8 support in Perl is poor there might be some broken UTF8 characters displayed after string was cut --- bin/egw2fbox.pl | 84 +++++++----- docs/CHANGELOG | 3 + docs/README | 274 ++++++++++++++++++++++--------------- docs/html/egw2fbox.html | 5 +- docs/man/egw2fbox.1 | 27 ++-- docs/markdown/CHANGELOG.md | 3 + docs/markdown/README.md | 3 + 7 files changed, 243 insertions(+), 156 deletions(-) diff --git a/bin/egw2fbox.pl b/bin/egw2fbox.pl index 6154c79..1f5c31f 100755 --- a/bin/egw2fbox.pl +++ b/bin/egw2fbox.pl @@ -111,11 +111,14 @@ =head1 COPYRIGHT AND LICENSE =cut # What is my current version number? # For compatibility reasons use 0.01.02 instead of 0.1.2 -BEGIN { $VERSION = "0.08.04"; } +BEGIN { $VERSION = "0.08.05"; } =pod =head1 HISTORY - + + 0.08.05 2018-10-31 Kai Ellinger + Fixed file format issues in FritzBox phone book XML file + 0.08.04 2017-08-06 Kai Ellinger Added user name support to bin/fritzuploader.pl @@ -318,6 +321,7 @@ =head2 Required Perl modules =cut ##### END: perl module requirements ##### # see http://perldoc.perl.org/perlmodlib.html for what is provided via perlmodlib +use 5.012; # changes UTF-8 behavior use warnings; # installed by default via perlmodlib use strict; # installed by default via perlmodlib @@ -329,7 +333,6 @@ =head2 Required Perl modules use Encode; # installed by default via perlmodlib use Storable; # installed by default via perlmodlib - #### global variables ## config my $o_verbose; @@ -347,8 +350,10 @@ =head2 Required Perl modules # Maybe the code page setting changes based on Fritz Box language settings # and must vary for characters other than germany special characters. # This variable can be used to specify the code page used at the exported XML. -my $FboxAsciiCodeTable = "iso-8859-1"; # - +my $FboxAsciiCodeTable = "iso-8859-1"; +#my $FboxAsciiCodeTable = "utf-8"; +# need some unique counter for FBOX upload +my $FboxGlobalUniqueIdCounter = 20000; #### function section @@ -829,17 +834,11 @@ sub fbox_write_xml_contact { my $output_name; if( !defined($contact_name) ) { $contact_name = ''; } - - # convert output name to character encoding as defined in $FboxAsciiCodeTable - # only contact name and contact name's suffix can contain special chars - Encode::from_to($contact_name, "utf8", $FboxAsciiCodeTable); - Encode::from_to($contact_name_suffix, "utf8", $FboxAsciiCodeTable); # reformat name according to max length and suffix if ($contact_name_suffix) { $name_length = min($cfg->{FBOX_TOTAL_NAME_LENGTH},$FboxMaxLenghtForName) - 1 - length($contact_name_suffix); $output_name = substr($contact_name,0,$name_length); - $output_name =~ s/\s+$//; $output_name = $output_name . " " . $contact_name_suffix; } else { $name_length = min($cfg->{FBOX_TOTAL_NAME_LENGTH},$FboxMaxLenghtForName); @@ -847,23 +846,50 @@ sub fbox_write_xml_contact { $output_name =~ s/\s+$//; } + # convert output name to character encoding as defined in $FboxAsciiCodeTable + # only contact name and contact name's suffix can contain special chars + Encode::from_to($output_name, "utf8", $FboxAsciiCodeTable); + # FIXME - How do I detect a broken UTF8 charachter at the end of the string? + $output_name =~ s/\?$//; # causing parsing problems on FritzBox; most likely UTF-8 charachters that are cut in between + $output_name =~ s/\&$//; # causing XML problems + + # calculate number of phone numbers to write to XML file and skip if none + my $number_of_phones = $#{$numbers_array_ref}; + $number_of_phones++; + if ($number_of_phones <= 0) { + return; + } + + # print the top XML wrap for the contact's entry - print $FRITZXML "\n0\n$output_name\n"; - print $FRITZXML "\n"; + print $FRITZXML "0$output_name\n"; + print $FRITZXML ""; + + my $phoneNrId = -1; foreach my $numbers_entry_ref (@$numbers_array_ref) { # not defined values causing runtime errors $o_verbose && verbose ("fbox_write_xml_contact() type: ". ($numbers_entry_ref->{'type'} || "") . " , number: ". ($numbers_entry_ref->{'nr'}|| "") ); if ($$numbers_entry_ref{'nr'}) { - print $FRITZXML "" . + $phoneNrId++; + print $FRITZXML "" . fbox_reformatTelNr($$numbers_entry_ref{'nr'}) . - "\n"; + ""; } } - + # print the bottom XML wrap for the contact's entry print $FRITZXML "\n"; - print $FRITZXML "$now_timestamp"; + print $FRITZXML "$now_timestamp" . ${FboxGlobalUniqueIdCounter}++ . "\n"; + + # Example of new XML format + # + # + #0my test08121123450179123456708912345678154093302911259 + # } ##### START: function documentation ##### @@ -925,6 +951,15 @@ sub fbox_gen_fritz_xml { # make file descriptor for XML output file global my $FRITZXML; + # Example of new XML format + # + # + #0my test08121123450179123456708912345678154093302911259 + # + # open file open ($FRITZXML, '>', $cfg->{FBOX_OUTPUT_XML_FILE}) or die "could not open file! $!"; print $FRITZXML < EOF - # data should look like this: - # - # 0 - # - # test user - # - # - # 08911111 - # 08911112 - # 08911113 - # - # - # - # 1298300800 - # ## start iterate diff --git a/docs/CHANGELOG b/docs/CHANGELOG index 6e71de2..d197800 100644 --- a/docs/CHANGELOG +++ b/docs/CHANGELOG @@ -2,6 +2,9 @@ Name: egw2fbox.pl History: + 0.08.05 2018-10-31 Kai Ellinger + Fixed file format issues in FritzBox phone book XML file + 0.08.04 2017-08-06 Kai Ellinger Added user name support to bin/fritzuploader.pl diff --git a/docs/README b/docs/README index a8a7278..0f53283 100644 --- a/docs/README +++ b/docs/README @@ -1,71 +1,88 @@ NAME + egw2fbox.pl DESCRIPTION + The purpose of this script is to run on a server and provide an automated way of sharing eGroupware hosted phone numbers and e-mail addresses with clients not supporting any other server based synchronization. The phone numbers and e-mail addresses are read from the eGroupware - database table *contacts* and exports in the native format of each + database table contacts and exports in the native format of each clients. Because the supported clients have very limited address book capabilities, this is a one-way communication only. Hence, client side - changes are not reported back to eGroupware and the client address books - should be configured to be readonly as much as possible. + changes are not reported back to eGroupware and the client address + books should be configured to be readonly as much as possible. - egw2fbox.pl has functionality called *lazy update* that can be - configured per each client RoundCube, MUTT and FritzBox that only writes - to the clients if data inside the eGroupware database was changed. This + egw2fbox.pl has functionality called lazy update that can be configured + per each client RoundCube, MUTT and FritzBox that only writes to the + clients if data inside the eGroupware database was changed. This reduces CPU time but - more important - also reduces the need for uploading data to clients where continuous writing would have disadvantages. For example the FritzBox address book that stores the addresses in flash memory. Because flash memory has a limited write cycles, it is better to update the address book only if there had been - changes. egw2fbox.pl can be safely used together with cronjob.sh because - it avoids unnecessary write cycles as much as possible. + changes. egw2fbox.pl can be safely used together with cronjob.sh + because it avoids unnecessary write cycles as much as possible. Currently supported clients are: phone numbers: - - Fritz Box router address book + + - Fritz Box router address book e-mail addresses: - - Round Cube web mailer including personal and global address book - - MUTT command line mail client + - Round Cube web mailer including personal and global address book + + - MUTT command line mail client For uploading the created XML address book to a Fritz Box a small perl script called FritzUploader from Jan-Piet Mens is used. SYNOPSIS - `egw2fbox.pl [--verbose] [-v] [--config filename.ini] [-c filename.ini] - [--version] [--help] [-h] [-?] [--man] [--changelog]' + + egw2fbox.pl [--verbose] [-v] [--config filename.ini] [-c filename.ini] + [--version] [--help] [-h] [-?] [--man] [--changelog] OPTIONS + Runtime: - --verbose -v Logs to STDOUT while executing the script. + --verbose -v + + Logs to STDOUT while executing the script. --config filename.ini -c filename.ini - File name containing all configuration. - See sections CONFIG FILE and TUTORIALS for further - information. + File name containing all configuration. + + See sections CONFIG FILE and TUTORIALS for further information. Documentation: - --version Prints the version numbers. + --version - --help -h -? Print a brief help message. + Prints the version numbers. - --man Prints the complete manual page. + --help -h -? - --changelog Prints the change log. + Print a brief help message. + + --man + + Prints the complete manual page. + + --changelog + + Prints the change log. COPYRIGHT AND LICENSE + Copyright 2011-2014 by Christian Anton , Kai Ellinger @@ -76,36 +93,40 @@ COPYRIGHT AND LICENSE 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. + 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. HISTORY + + 0.08.05 2018-10-31 Kai Ellinger + Fixed file format issues in FritzBox phone book XML file + 0.08.04 2017-08-06 Kai Ellinger Added user name support to bin/fritzuploader.pl - + 0.08.03 2014-02-28 Christian Anton , Kai Ellinger Moving code to github, adding README.md - + 0.08.02 2013-10-03 Kai Ellinger Fixed bin/fritzuploader.pl in order to work with new Fritzbox firmware versions See: https://github.com/jpmens/fritzuploader/issues/1 - + 0.08.01 2011-05-05 Kai Ellinger Documentation: - Finished API docs - Creating 'bin/create_docs.sh' and related files under 'docs' directory - Creating minor versions of INSTALL and CONFIG FILE sections - + 0.08.00 2011-04-05 Kai Ellinger Documentation: - Started implementing the documentation via perlpod - Implemented command line options: [--version] [--help] [-h] [-?] [--man] [--changelog] - + 0.07.01 2011-03-30 Kai Ellinger Round Cube DB: - Fixed bug that not set value for 'email', 'name', 'firstname' or 'surname' @@ -114,32 +135,32 @@ HISTORY - Checking $userId, $changed and $sth as well - Don't let the whole script fail if $userId or $sth is NULL. Only roll back the Round Cube DB transaction! - + 0.07.00 2011-03-29 Kai Ellinger - Lazy Update implemented - Implemented dedicated EGW user lists FBOX_EGW_ADDRBOOK_OWNERS, RCUBE_EGW_ADDRBOOK_OWNERS, MUTT_EGW_ADDRBOOK_OWNERS in addition to already existing global EGW user list EGW_ADDRBOOK_OWNERS - + 0.06.00 2011-03-28 Kai Ellinger RoundCube: - It turned out that the current state of the implementation already supports global address books in Round Cube. Successfully tested! - You need to install the Round Cube plug in 'globaladdressbook' first. Download: http://trac.roundcube.net/wiki/Plugin_Repository - + Cronjob.sh: - Moving hard coded variables from cronjob.sh to egw2fbox.conf: * CRON_FBOX_XML_HASH, CRON_FBOX_UPLOAD_SCRIPT - Added comment awareness of config file parser in cronjob.sh - + Update clients only if EGW contacts changed for defined EGW user: - Preparation of egw2fbox.conf for lazy update feature: * EGW_LAZY_UPDATE_TIME_STAMP_FILE, FBOX_LAZY_UPDATE, RCUBE_LAZY_UPDATE, MUTT_LAZY_UPDATE - + Allow defining a different EGW user list for each client: - Preparation of egw2fbox.conf for defining different EGW address book owners per each client * FBOX_EGW_ADDRBOOK_OWNERS, RCUBE_EGW_ADDRBOOK_OWNERS, MUTT_EGW_ADDRBOOK_OWNERS - + 0.05.04 2011-03-28 Kai Ellinger - Removing need for $egw_address_data being an global variable to be able to sync different user / group address books for different clients @@ -147,20 +168,20 @@ HISTORY - Caching EGW addresses to avoid DB access - egw_read_db() now retuning last modified time stamp to stop writing data to external client if not modified since last run, if MAIN calling export routine supports this - + 0.05.03 2011-03-10 Kai Ellinger - implemented SQL part of round cube address book sync but still check field size before inserting into DB needs tbd - + 0.05.02 2011-03-08 Kai Ellinger - started implementing round cube address book sync because I feel it is urgent ;-) did not touch any SQL code, need to update all TO DOs with inserting SQL code - remove need for $FRITZXML being a global variable - + 0.05.01 2011-03-04 Christian Anton - tidy up code to fulfill Perl::Critic tests at "gentle" severity: http://www.perlcritic.org/ - + 0.05.00 2011-03-04 Christian Anton , Kai Ellinger - data is requested from DB in UTF8 and explicitly converted in desired encoding inside of fbox_write_xml_contact function @@ -170,7 +191,7 @@ HISTORY database field tel_work instead of tel_home - extended fbox_reformatTelNr to support local phone number annotation to work around inability of FritzBox to rewrite phone number for incoming calls - + 0.04.00 2011-03-02 Kai Ellinger - added support for mutt address book including an example file showing how to configure ~/.muttrc to support a local address book and a global @@ -179,7 +200,7 @@ HISTORY this feature is more interesting for round cube integration where we have a time stamp field in the round cube database - added some comments - + 0.03.00 2011-02-26 Kai Ellinger - Verbose function: * only prints if data was provided @@ -215,15 +236,16 @@ HISTORY - All EGW functions have now prefix 'egw_', all Fritz Box functions prefix 'fbox_' and all Round Cube functions 'rcube_' to prepare the source for adding the round cube sync. - + 0.02.00 2011-02-25 Christian Anton implementing XML-write as an extra function and implementing COMPACT_MODE which omits creating two contact entries for contacts which have only up to three numbers - + 0.01.00 2011-02-24 Kai Ellinger , Christian Anton Initial version of this script, ready for world domination ;-) INSTALLATION + - A current version of PERL is needed. egw2fbox.pl requires module DBI and DBD::Mysql. fritzuploader.pl requires module XML::Simple and URI::Encode. All other modules needed to run the script are part of the @@ -234,41 +256,48 @@ INSTALLATION - Copy file etc/egw2fbox.conf.default to etc/egw2fbox.conf and update values according to your needs - - Test in verbose mode: `/path/to/egw2fbox/bin/cronjob.sh -v -c - /path/to/egw2fbox/etc/egw2fbox.conf' + - Test in verbose mode: /path/to/egw2fbox/bin/cronjob.sh -v -c + /path/to/egw2fbox/etc/egw2fbox.conf - Add to your crontab: - `*/20 * * * * /path/to/egw2fbox/bin/cronjob.sh -c - /path/to/egw2fbox/etc/egw2fbox.conf' + */20 * * * * /path/to/egw2fbox/bin/cronjob.sh -c + /path/to/egw2fbox/etc/egw2fbox.conf CONFIG FILE + This section may later describes the structure of the INI file used by this script. Until now, see the comments in egw2fbox.conf.default. - * File egw2fbox.pl uses command line option `-config - /path/to/fileName.ini', default is egw2fbox.conf. + * File egw2fbox.pl uses command line option -config + /path/to/fileName.ini, default is egw2fbox.conf. - * File cronjob.sh uses command line option `-c /path/to/fileName.ini', - no default value. + * File cronjob.sh uses command line option -c /path/to/fileName.ini, no + default value. * File fritzuploader.pl searches for the value of environment variable FRITZUPLOADERCFG, default is fritzuploader.conf. - eGoupware section + eGoupware section + Configuration settings related to the eGroupware database - FritzBox section + FritzBox section + Configuration settings related to the Fritz Box - Round Cube section + Round Cube section + Configuration settings related to the Round Cube database - MUTT section + MUTT section + Configuration settings related to MUTT API - Required Perl modules + + Required Perl modules + Most Perl modules used by this program are part of the standard perl library perlmodlib http://perldoc.perl.org/perlmodlib.html and are installed by default. @@ -276,7 +305,8 @@ API The only modules that might not be available by default are to access the MySQL database and are named DBI and DBD::Mysql. - Function check_args () + Function check_args () + This function is checking command line options and printing help messages if requested. @@ -284,7 +314,8 @@ API OUT: Returns nothing - Function parse_config () + Function parse_config () + This function is parsing the config file given by command line option '-c filename.ini'. @@ -292,21 +323,23 @@ API OUT: Returns nothing - Function verbose (STRING message) + Function verbose (STRING message) + Printing out verbose messages if verbose mode is enabled. IN: Takes the message to print out OUT: Returns nothing - Function sort_user_id_list (STRING user_id_list) + Function sort_user_id_list (STRING user_id_list) + This function is called by function find_EGW_user (STRING user_id_list) to sort the user list it looked up before. This is needed to avoid unnecessary database accesses even the config parameters EGW_ADDRBOOK_OWNERS, FBOX_EGW_ADDRBOOK_OWNERS, - RCUBE_EGW_ADDRBOOK_OWNERS and MUTT_EGW_ADDRBOOK_OWNERS list the user ids - in different order and with different wide spaces. + RCUBE_EGW_ADDRBOOK_OWNERS and MUTT_EGW_ADDRBOOK_OWNERS list the user + ids in different order and with different wide spaces. The default Perl sort algorithm is used even if it is not a numeric algorithm. But this is not needed anyway. @@ -315,20 +348,23 @@ API OUT: Returns a sorted user id list string - Function find_EGW_user (STRING config_parameter) + Function find_EGW_user (STRING config_parameter) + This function returns a sorted user id list string that is either - defined by the global configuration parameter EGW_ADDRBOOK_OWNERS or one - of the parameters FBOX_EGW_ADDRBOOK_OWNERS, RCUBE_EGW_ADDRBOOK_OWNERS - and MUTT_EGW_ADDRBOOK_OWNERS to overwrite the global parameter. + defined by the global configuration parameter EGW_ADDRBOOK_OWNERS or + one of the parameters FBOX_EGW_ADDRBOOK_OWNERS, + RCUBE_EGW_ADDRBOOK_OWNERS and MUTT_EGW_ADDRBOOK_OWNERS to overwrite the + global parameter. IN: Config parameter name FBOX_EGW_ADDRBOOK_OWNERS, RCUBE_EGW_ADDRBOOK_OWNERS or MUTT_EGW_ADDRBOOK_OWNERS OUT: Returns a sorted user id list string - Function egw_read_db (STRING user_id_list) - Connects to eGroupware database and looks up address book values for the - given user id list including time stamp of last change. + Function egw_read_db (STRING user_id_list) + + Connects to eGroupware database and looks up address book values for + the given user id list including time stamp of last change. IN: User id list to lookup @@ -338,7 +374,8 @@ API - the time stamp when this list was modified the last time - Function fbox_reformatTelNr (STRING phone_number) + Function fbox_reformatTelNr (STRING phone_number) + This is a helper function called by function fbox_write_xml_contact format the phone number in a way that the Fritz Box can resolve it. How the phone number is formatted exactly is defined in the fritz box @@ -348,25 +385,27 @@ API phone numbers with the same country code or with the same area code get the leading numbers removed if configured. - This is needed because the Fritz Box can not recognize that phone number - 00498912345678 is the same as 08912345678 calling from the same country - is the same as 12345678 calling from the same city. But the right phone - number syntax is very important to get the names resolved for incoming - calls as well as to replace the phone numbers with the names in the - phone call protocols maintain that can either be viewed via web console - or mail. Same is true for the incoming mail box calls that can be - forwarded via e-mail as well. + This is needed because the Fritz Box can not recognize that phone + number 00498912345678 is the same as 08912345678 calling from the same + country is the same as 12345678 calling from the same city. But the + right phone number syntax is very important to get the names resolved + for incoming calls as well as to replace the phone numbers with the + names in the phone call protocols maintain that can either be viewed + via web console or mail. Same is true for the incoming mail box calls + that can be forwarded via e-mail as well. IN: Phone number in any format it can exist in eGrouware OUT: Phone number formatted in a way that the Fritz Box can resolve incoming calls correctly - Function fbox_write_xml_contact (HANDLE xml_file, STRING contact_name, STRING contact_name_suffix, ARRAY REF phone_numbers, NUMBER timestamp) - This is a function called by function fbox_gen_fritz_xml for each single - contact that needs to be written to the XML file. The contact name is - formatted to fit into the restrictions of the Fritz Box and the phones - connected to it. + Function fbox_write_xml_contact (HANDLE xml_file, STRING contact_name, + STRING contact_name_suffix, ARRAY REF phone_numbers, NUMBER timestamp) + + This is a function called by function fbox_gen_fritz_xml for each + single contact that needs to be written to the XML file. The contact + name is formatted to fit into the restrictions of the Fritz Box and the + phones connected to it. IN: @@ -382,13 +421,16 @@ API OUT: Nothing - Function fbox_count_contacts_numbers (HASH REF egw_address_data, STRING key_to_search) - This is a function called by function fbox_gen_fritz_xml for each single - contact found in the eGroupware address book to know how many phone - numbers this contact has. If there are no phone numbers, this contact - must not imported to the Fritz Box. If there are more than 3 phone - numbers, the contact must be split into a business contact and a private - contact because the Fritz Box can only hold 3 phone numbers per contact. + Function fbox_count_contacts_numbers (HASH REF egw_address_data, STRING + key_to_search) + + This is a function called by function fbox_gen_fritz_xml for each + single contact found in the eGroupware address book to know how many + phone numbers this contact has. If there are no phone numbers, this + contact must not imported to the Fritz Box. If there are more than 3 + phone numbers, the contact must be split into a business contact and a + private contact because the Fritz Box can only hold 3 phone numbers per + contact. IN: @@ -398,24 +440,29 @@ API OUT: NUMBER count of found phone numbers - Function fbox_gen_fritz_xml (HASH REF egw_address_data) + Function fbox_gen_fritz_xml (HASH REF egw_address_data) + This function creates the XML file to upload to the Fritz Box. IN: HASH REF the address list OUT: Nothing - Function rcube_update_address_book (HASH REF egw_address_data) - This function the Round Cube database with names and e-mail addresses of - the EGW address book by deleting the whole contacts table for the - configured user and inserting each contact again. If there is any error, - the whole DB transaction is rolled back. + Function rcube_update_address_book (HASH REF egw_address_data) + + This function the Round Cube database with names and e-mail addresses + of the EGW address book by deleting the whole contacts table for the + configured user and inserting each contact again. If there is any + error, the whole DB transaction is rolled back. IN: HASH REF the address list OUT: Nothing - Function rcube_insert_mail_address (HANDLE sql_statement_handle, STRING email, STRING name, STRING first_name, STRING family_name, NUMBER timestamp) + Function rcube_insert_mail_address (HANDLE sql_statement_handle, STRING + email, STRING name, STRING first_name, STRING family_name, NUMBER + timestamp) + Helper function called by function rcube_update_address_book. Executes an INSERT statement per each e-mail address. @@ -436,46 +483,55 @@ API OUT: Nothing - Function mutt_update_address_book (HASH REF egw_address_data) + Function mutt_update_address_book (HASH REF egw_address_data) + This function creates a TXT file to be used as MUTT address book. IN: HASH REF the address list OUT: Nothing - MAIN + MAIN + Function check_args () and parse_config () are called to load the - configuration before reading the EGW database and creating address books - for FritzBox, Round Cube and MUTT function creates a TXT file to be used - as MUTT address book. + configuration before reading the EGW database and creating address + books for FritzBox, Round Cube and MUTT function creates a TXT file to + be used as MUTT address book. TUTORIALS - This is a set of small tutorials for synchronizing the supported clients - with eGroupware. - Connecting to the database. + This is a set of small tutorials for synchronizing the supported + clients with eGroupware. + + Connecting to the database. + TBD - Setting up the FritzBox address book + Setting up the FritzBox address book + TBD - Setting up the Round Cube address book + Setting up the Round Cube address book + TBD - Setting up the MUTT address book + Setting up the MUTT address book + TBD AUTHORS + Christian Anton (@fibbs) Kai Ellinger SEE ALSO + - Fritz Box router product family from AVM http://www.avm.de/en/Produkte/FRITZBox/index.html - - FritzUploader to upload XML address books to a Fritz Box from Jan-Piet - Mens https://github.com/jpmens/fritzuploader + - FritzUploader to upload XML address books to a Fritz Box from + Jan-Piet Mens https://github.com/jpmens/fritzuploader - Round Cube Web based mail client http://roundcube.net diff --git a/docs/html/egw2fbox.html b/docs/html/egw2fbox.html index 46e9975..ceaecbe 100644 --- a/docs/html/egw2fbox.html +++ b/docs/html/egw2fbox.html @@ -162,7 +162,10 @@

COPYRIGHT AND LICENSE

HISTORY

-
 0.08.04 2017-08-06 Kai Ellinger <coding@blicke.de>
+
 0.08.05 2018-10-31 Kai Ellinger <coding@blicke.de>
+      Fixed file format issues in FritzBox phone book XML file
+        
+ 0.08.04 2017-08-06 Kai Ellinger <coding@blicke.de>
       Added user name support to bin/fritzuploader.pl
 
  0.08.03 2014-02-28 Christian Anton <mail@christiananton.de>, Kai Ellinger <coding@blicke.de>
diff --git a/docs/man/egw2fbox.1 b/docs/man/egw2fbox.1
index ab176c7..380efe9 100644
--- a/docs/man/egw2fbox.1
+++ b/docs/man/egw2fbox.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+.\" Automatically generated by Pod::Man 4.07 (Pod::Simple 3.32)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -46,7 +46,7 @@
 .ie \n(.g .ds Aq \(aq
 .el       .ds Aq '
 .\"
-.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" If the F register is >0, we'll generate index entries on stderr for
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
@@ -54,20 +54,16 @@
 .\" Avoid warning from groff about undefined register 'F'.
 .de IX
 ..
-.nr rF 0
-.if \n(.g .if rF .nr rF 1
-.if (\n(rF:(\n(.g==0)) \{
-.    if \nF \{
-.        de IX
-.        tm Index:\\$1\t\\n%\t"\\$2"
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
 ..
-.        if !\nF==2 \{
-.            nr % 0
-.            nr F 2
-.        \}
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
 .    \}
 .\}
-.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -133,7 +129,7 @@
 .\" ========================================================================
 .\"
 .IX Title "EGW2FBOX 1"
-.TH EGW2FBOX 1 "2017-08-06" "perl v5.20.2" "User Contributed Perl Documentation"
+.TH EGW2FBOX 1 "2018-10-30" "perl v5.24.1" "User Contributed Perl Documentation"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -221,6 +217,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 .SH "HISTORY"
 .IX Header "HISTORY"
 .Vb 2
+\& 0.08.05 2018\-10\-31 Kai Ellinger 
+\&      Fixed file format issues in FritzBox phone book XML file
+\&        
 \& 0.08.04 2017\-08\-06 Kai Ellinger 
 \&      Added user name support to bin/fritzuploader.pl
 \&
diff --git a/docs/markdown/CHANGELOG.md b/docs/markdown/CHANGELOG.md
index fa5e911..b3392fe 100644
--- a/docs/markdown/CHANGELOG.md
+++ b/docs/markdown/CHANGELOG.md
@@ -4,6 +4,9 @@ egw2fbox.pl
 
 # HISTORY
 
+    0.08.05 2018-10-31 Kai Ellinger 
+         Fixed file format issues in FritzBox phone book XML file
+           
     0.08.04 2017-08-06 Kai Ellinger 
          Added user name support to bin/fritzuploader.pl
 
diff --git a/docs/markdown/README.md b/docs/markdown/README.md
index 07bf847..aca2d8d 100644
--- a/docs/markdown/README.md
+++ b/docs/markdown/README.md
@@ -94,6 +94,9 @@ MA 02110-1301, USA.
 
 # HISTORY
 
+    0.08.05 2018-10-31 Kai Ellinger 
+         Fixed file format issues in FritzBox phone book XML file
+           
     0.08.04 2017-08-06 Kai Ellinger 
          Added user name support to bin/fritzuploader.pl