[Module]
Name=App::Office::Contacts
Changelog.Creator=Module::Metadata::Changes V 2.05
Changelog.Parser=Config::IniFiles V 2.82

[V 2.04]
Date=2014-02-06T14:06:00
Comments= <<EOT
- 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.
EOT

[V 2.03]
Date=2014-01-23T10:36:00
Comments= <<EOT
- 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/Library.pm 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.
EOT

[V 2.02]
Date=2013-11-13T15:11:00
Comments= <<EOT
- 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 web.page.css to homepage.css.
- Rename web.page.tx to homepage.tx.
- Rename whole_page.tx to standalone.tx.
- Add an output_file option to scripts/export.as.csv.pl.
This patch includes using Text::CSV::Encoding to set the output I/O layer to utf-8.
- Add scripts/export.as.html.pl.
EOT

[V 2.01]
Date=2013-06-12T12:40:00
Comments= <<EOT
- Update the POD regarding editing and copying the config file share/.htapp.office.contacts.conf,
now that the re-written Makefile.PL does not install it for you.
EOT

[V 2.00]
Date=2013-06-12T09:25:00
Comments= <<EOT
- 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 Contacts.pm.
- 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 https://metacpan.org/module/CPAN::Meta::Spec#license.
- 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/.htapp.office.contacts.conf
rather than shipping lib/.htapp.office.contacts.conf.
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 populate.tables.pl, 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/pod2html4all.pl.
EOT

[V 1.17]
Date=2011-06-15T08:15:00
Comments= <<EOT
- 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.
EOT

[V 1.16]
Date=2010-11-16T15:47:00
Comments= <<EOT
- 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
Text::Xslate.
- Add scripts/copy.config.pl 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/copy.config.pl.
EOT

[V 1.15]
Date=2010-09-22T10:00:00
Comments= <<EOT
- 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.
EOT

[V 1.14]
Date=2010-06-25T11:15:00
Comments=- Change all JSON::XS->new->encode(...) to JSON::XS->new->utf8->encode(...).

[V 1.13]
Date=2010-06-24T14:38:00
Comments= <<EOT
- Fix syntax error.
- Use 'select count(*) as count' rather than just 'select count(*)' to avoid
differences between Postgres and SQLite.
EOT

[V 1.12]
Date=2010-06-23T13:29:00
Comments= <<EOT
- Fix logic error in Create.pm.report_all_tables(). 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/schema.sh. I use dbigraph.pl from GraphViz::DBI,
modified to use GraphViz::DBI::General (which subclasses GraphViz::DBI).
EOT

[V 1.11]
Date=2010-06-03T17:23:00
Comments= <<EOT
- 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.
EOT

[V 1.10]
Date=2010-05-19T11:11:00
Comments= <<EOT
- 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).
EOT

[V 1.09]
Date=2010-04-20T08:38:00
Comments= <<EOT
- Comment out the processing which checks for CSRF, since I encountered
a case where it did not work.
EOT

[V 1.08]
Date=2010-04-16T08:52:00
Comments= <<EOT
- 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.
EOT

[V 1.07]
Date=2010-04-07T08:51:00
Comments= <<EOT
- 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:
http://cpansearch.perl.org/src/DWHEELER/Test-Pod-1.42/Changes
- Update pre-reqs from Test::More V 0 to Test::Simple 0.94.
EOT

[V 1.06]
Date=2010-03-29T14:53:00
Comments= <<EOT
- 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.
EOT

[V 1.05]
Date=2010-03-02T09:28:00
Comments= <<EOT
- 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.
o http://www.freedom-to-tinker.com/blog/wzeller/popular-websites-vulnerable-cross-site-request-forgery-attacks
- 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 drop.tables.pl and create.tables.pl, 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 Contacts.pm from info to debug.
EOT

[V 1.04]
Date=2010-02-21T12:54:14
Comments= <<EOT
- 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.
EOT

[V 1.03]
Date=2010-02-05T17:27:00
Comments= <<EOT
- 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.
EOT

[V 1.02]
Date=2010-01-29T09:52:00
Comments= <<EOT
- 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.
EOT

[V 1.01]
Date=2010-01-07T15:39:00
Comments=- Add MANIFEST and MYMETA.yml

[V 1.00]
Date=2009-12-31T10:48:00
Comments= <<EOT
- 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
EOT

[V 0.99]
Date=2008-03-06T11:30:45
Comments=- Original version.
