Revision history for Perl extension App::Office::Contacts.

2.04  Thu Feb  6 14:06:00 2014
	- Add code for Pg and MySQL re utf8 in the DBI attributes.
		See App::Office::Contacts::Util::Logger. See lines 44 .. 57.
	- Default to mysql_enable_utf8 = 1 and pg_enable_utf8 = 0 in the config file. See lines 48 .. 52.
		I'm using pg_enable_utf8 = 0 in order to make my code work under DBD::Pg V 3.0.0.

2.03  Thu Jan 23 10:36:00 2014
	- Switch from bareword file handles to lexically-named file handles. This stops these types of msgs:
		Use of bareword filehandle in open at lib/App/Office/Contacts/Database/ line 74.
	- Not that I don't use the JS '$.uiBackCompat = false;', I had to re-write some of the JS to not use
		obsolete features of jQuery UI.

2.02  Thu Nov 13 15:11:00 2013
	- Replace decode/encode('utf8', $x) with decode/encode('utf-8', $x).
	- Remove:
		o use open      qw(:std :utf8);    # Undeclared streams in UTF-8.
		o use charnames qw(:full :short);  # Unneeded in v5.16.
		The problem with 'use open ...' is that it's global.
		The problem with 'use charnames ...' is that it simply wasn't used.
		If you need 'use open ...', put in your scripts.
	- Switch jQuery V 1.8.2 (inside DataTables V 1.9.4) to V 2.0.3 (standalone).
		Note: homepage.tx includes $.uiBackCompat = false;.
		DataTables V 1.9.4 is still used.
	- Switch jQuery UI V 1.9.2 to V 1.10.3.
	- Rename to homepage.css.
	- Rename to homepage.tx.
	- Rename whole_page.tx to standalone.tx.
	- Add an output_file option to scripts/
		This patch includes using Text::CSV::Encoding to set the output I/O layer to utf-8.
	- Add scripts/

2.01  Wed Jun 12 12:40:00 2013
	- Update the POD regarding editing and copying the config file share/,
		now that the re-written Makefile.PL does not install it for you.

2.00  Wed Jun 12 09:25:00 2013
	- Warning: Some database tables have changed structures.
	- Rename CHANGES to Changes as per CPAN::Changes::Spec.
	- I'm using Perl V 5.14.
	- Add explicit support for UTF8. See the FAQ in
	- Use Unicode::Collate for sorting.
	- Switch from CGI::Application to CGI::Snapp.
	- Switch from HTML::Template to Text::Xslate.
	- Switch from CGI::Session to Data::Session.
	- Switch from Log::Dispatch to Log::Handler.
	- Switch from Path::Class to Path::Tiny.
	- Switch from DBIx::Class to DBIx::Simple.
	- Switch from Moose to Moo.
	- Switch from YUI to jQuery.
	- Update pre-reqs. This includes making Test::Pod optional.
	- Update licence to artistic_2. See
	- Accept AutoCommit and RaiseError in the config file. If omitted, they both default to 1.
		Nevertheless, DBI's begin_work is used for transactions, where AutoCommit will be 0.
	- Restructure the hierarchy a bit. This basically means a object attributes have been shifted around.
		E.g.: The db object now 'hasa' session object. These changes should never be visible to the end user.
	- For users of MySQL, default to use engine=innodb.
	- Convert from Module::Build to Module::Install, so we can ship share/
		rather than shipping lib/
		This means using File::ShareDir to install and retrieve the config file, rather than File::HomeDir.
		That should solve problems Windows users have had re the config file's location.
	- Additions to the people table are:
		o facebook_id varchar(255)
		o twitter_id varchar(255)
	- The list of personal titles has been much expanded, and SMS is a new type of mobile phone.
	- Communication types now include Any and SMS only.
	- Change log table message type from varchar(255) to text.
	- Remove the singular column from the table_names table. It was never used.
	- Rename table from yes_nos to yes_noes.
	- Rename table from broadcasts to visibilities.
	- What used to be broadcast is now called visibility.
	- What used to be broadcast type '(Hidden)' is now called visibility type 'No-one'.
	- Adopt Lingua::ENG::Inflect to help with singular/plural issues.
	- Timestamps in database columns have changed (for MySQL and Postgres):
		o Old: timestamp timestamp (0) without timezone not null default current_timestamp
		o New: timestamp timestamp not null default localtimestamp
		This allows the code to use Time::Stamp.
		See App::Office::Contacts::Database::Organization and App::Office::Contacts::Database::People.
	- Add data/organizations.txt, containing just the org called '-'. Remove it from the fake data file
		data/fake.organizations.txt. This means it is inserted when you run, which is
		what should have been happening from the year dot.
	- Rename home_page column in organizations and people tables to homepage (as per Google's suggestion).
	- Add the TODO section to the docs.
	- Remove the table_names table. Now, the notes table uses entity_id rather than table_id, to point into
		either the organizations or people table, and entity_type rather than table_name_id, to specify
		which of those 2 tables the note refers to.
	- Remove data/edit_types.txt, which was not used.
	- Add scripts/

1.17  Wed Jun 15  8:15:00 2011
	- Patch Build.PL and Makefile.PL to reduce the version requirement of File::Copy from 2.18 to 2.14,
	  to make it easier for people to install without having to upgrade Perl to get the later version.
	  Thanx to Gabor Szabo for reporting this problem.
	- No other changes.

1.16  Tue Nov 16 15:47:00 2010
	- Switch from FindBin::Real to FindBin (which is in core).
	- Replace /usr/bin/perl with /usr/bin/env perl.
	- Replace common::sense with use strict and use warnings, to get uninit var warnings.
	- Move lib/App-Office-Contacts/lib/App/Office/Contacts/.htoffice.contacts.conf to config/.
	- Change default template path to /dev/shm/html/assets/templates/app/office/contacts.
	- Change name of default template path from tmpl_path to template_path, as part of adopting
	- Add scripts/ to copy .htoffice.contacts.conf to ~/.perl/App-Office-Contacts/.
	- Add missing pre-reqs to Build.PL and Makefile.PL.
	- Make Build.PL and Makefile.PL run scripts/

1.15  Wed Sep 22 10:00:00 2010
	- Replace sub script_name() with $self -> query -> url(-absolute => 1).
	- Shift some code into a new module, App::Office::CMS::View::Search. This means a view
	  now hasa search.
	- Chop subs generate_cookie(), generate_digest() and validate_post(). See V 1.09 below.

1.14  Fri Jun 25 11:15:00 2010
	- Change all JSON::XS->new->encode(...) to JSON::XS->new->utf8->encode(...).

1.13  Thu Jun 24 14:38:00 2010
	- Fix syntax error.
	- Use 'select count(*) as count' rather than just 'select count(*)' to avoid
	  differences between Postgres and SQLite.

1.12  Wed Jun 23 13:29:00 2010
	- Fix logic error in I was getting a list of
	  table names from a file in the distro, the same way I do when populating
	  tables at installation time. But, this file may not be available at run
	  time after installation.
	- No longer ship scripts/ I use from GraphViz::DBI,
	  modified to use GraphViz::DBI::General (which subclasses GraphViz::DBI).

1.11  Thu Jun  3 17:23:00 2010
	- Fix typos arising after I changed the name of the module
		from CGI::Office::* to App::Office::*. This patch was lost
		when I replaced Debian testing with lenny on my laptop.
	- Ship docs/html/contacts.faq.html, as previously documented.

1.10  Wed May 19 11:11:00 2010
	- Update comments re starman usage in contacts.psgi.
	- Chop mailing list stuff from support.
	- Update version numbers in Build.PL and Makefile.PL.
	- Ensure config code is only called once (App::Office::Contacts::Util::LogConfig).

1.09  Tue Apr 20  8:38:00 2010
	- Comment out the processing which checks for CSRF, since I encountered
		a case where it did not work.

1.08  Fri Apr 16  8:52:00 2010
	- Warning: The organizations and people tables have a new column: upper_name.
		This is due to a defect in SQLite, which does not allow function calls
		when defining an index. Hence the index on people(upper(name) ) has to be
		now written as people(upper_name). You can easily write a little program
		to use alter table, and then populate the new column.
		The search code uses the new column.
	- Change SQLite attribute from unicode to sqlite_unicode.
	- Change the default database driver from Postgres to SQLite,
		to make installation easier (by not requiring DBD::Pg).
		If using another database server, you'll need to edit the 2 lines
		in .htoffice.contacts.conf which refer to SQLite.
	- Fix Makefile.PL to use App::* not CGI::*.
		My apologies for this carelessness.
	- Rework cookies and POST validation, to allow Contacts, Donations and
		Import::vCards to run in parallel.

1.07  Wed Apr  7  8:51:00 2010
	- Update pre-reqs for Test::Pod to 1.41 to avoid Test::Pod's dithering
		about a POD construct I used: L<text|scheme:...>, which makes a test fail.
		See comments for V 1.40 and 1.41 at:
	- Update pre-reqs from Test::More V 0 to Test::Simple 0.94.

1.06  Mon Mar 29 14:53:00 2010
	- Create indexes on organizations and people tables, using upper(name),
		to speed up searching. The index names are:
		- organizations: opganizations_upper_name
		- people: people_upper_name.
	- Add parent to pre-reqs in Build.PL and Makefile.PL.

1.05  Tue Mar  2  9:28:00 2010
	- In cgiapp_prerun() protect against XSS and CSRF:
		o Only accept CGI params if the request method is 'POST'.
		o Ensure digest in session matches digest in cookie.
	- Change 'use base' to 'use parent'.
	- Remove form_action from config file. See sub script_name.
	- Replace references to FCGI with Plack. This includes no longer
		shipping FCGI-specific files nor patches to Apache's httpd.conf.
	- Ship httpd/cgi-bin/office/contacts.psgi.
	- Adopt Log::Dispatch::Configurator.
		See App::Office::Contacts::Util::LogConfig.
	- Replace Carp::croak with die, assuming calling code uses Try::Tiny.
	- Stop using Time::Elapsed (at table create/populate time).
	- Zap drop_and_create_all_tables() and run() from App::Office::Contacts::Util::Create.
	- In and, change the 'verbose+' option
		definition to 'verbose', since the '+' doesn't make sense.
	- Clean up what is real data and what is fake data.
	- Rename data/email_addresses.txt => data/fake.email_addresses.txt.
	- Rename data/email_people.txt => data/fake.email_people.txt.
	- Rename data/people.txt => data/fake.people.txt.
	- Rename data/phone_numbers.txt => data/fake.phone_numbers.txt.
	- Rename data/phone_people.txt => data/fake.phone_people.txt.
	- Rename data/organizations.txt => data/fake.organizations.txt.
	- Add comments to .htoffice.contacts.conf, while simplifying the
		discussion of the Javascript URL.
	- Change the default URL of the FAQ.
	- Use common::sense instead of strict and warnings.
	- Add unicode to .htoffice.contacts.conf - used by SQLite - and add
		corresponding code to BEGIN{} in App::Office::Contacts::Database,
		in case anyone wants to use DBD::SQLite.
	- Fix off-by-one error in report.js when indexing into
		document.report_form.report_id.options[report - 1].text.
	- Change some logging in from info to debug.

1.04  Sun Feb 21 12:54:14 2010
	- Remove text 'All rights reserved' (for Debian licensing).
	- Remove docs heads 'Required Modules' and 'Changes'.
	- Replace personal doc root with /var/www.
	- Use namespace::autoclean with Moose.

1.03  Fri Feb  5 17:27:00 2010
	- Remove personal use lib from CGI scripts.
	- Use smarter check for calendar div in Contacts.build_head_init,
		so cursor appears in search name box upon startup.

1.02  Fri Jan 29 09:52:00 2010
	- Change namespace from CGI::Office::* to App::Office::* after discussion with Matt Trout.
	- Add config item css_url.
	- Tell Module::Build to install .htoffice.contacts.conf.

1.01  Thu Jan  7 15:39:00 2010
	- Add MANIFEST and MYMETA.yml

1.00  Thu Dec 31 10:48:00 2009
	- Rename from Local::Contacts.
	- Remove Apache-specific code.
	- Split into N controllers, using CGI::Application::Dispatch.
	- Split into separate distros:
		o App::Office::Contacts
		o App::Office::Contacts::Donations
		o App::Office::Contacts::Export::StickyLabels
		o App::Office::Contacts::Import::vCards
		o App::Office::Contacts::Sites

0.99  Thu Mar 06 11:30:45 2008
	  - Original version.