This file documents the revision history for Perl extension OpusVL::AppKit.

2.29      2017-01-03 20:16:49+00:00 Europe/London

   * Added test to ensure we're not failing because of moose breakages

2.28      2017-01-03 12:55:05+00:00 Europe/London

   * Push version number back down to one that is on CPAN
   * Added missing dep

2.27      2017-01-03 12:30:15+00:00 Europe/London

   * Ensure we have a high enough version of our dependency

2.26      2016-12-23 11:21:05+00:00 Europe/London

   * Kill the sorting if we detect a button too
   * Quick hack to allow display of dates in London time zone
   * Added Jenkinsfile for testing
   * Ensure we test the release

2.25      2016-06-28 14:02:03+01:00 Europe/London

   * Split auth database into a new module, OpusVL::AppKit::Schema::AppKitAuthDB

2.24      2016-05-16 11:03:13+01:00 Europe/London

    * A new release to fix META.json
    * Fixed the landing documentation, at least

2.23      2016-05-13 10:41:58+01:00 Europe/London

    * Cache tests are now only run by request (because they only intermittently
    * Logs are no longer buffered. This is useful in `docker logs`
    * 403 page can now have a custom "access denied" message

2.22      2016-04-28 12:59:31+01:00 Europe/London

    * Allow link_button class to be applied to anything.
    * A <span class="hint"> draws a ? in a circle.
    * Allow annotations to be added beside the features on the roles.

2.21      2016-03-14 12:35:13+00:00 Europe/London

    * Removed default mail server from config since it won't make
      sense for most applications.

2.20      2016-03-07 09:28:28+00:00 Europe/London
    * Upped version number of dependency to ensure we don't
      end up with a broken version.

2.19      2016-03-03 14:15:30+00:00 Europe/London

    * Added missing dependency.

2.18      2016-02-26 16:07:09+00:00 Europe/London

    * Converted to Dist::Dilla.

    * Added support for new config parameter to allow the insertion of extra
      css files into the head section.  This is extra_css.
    * Allow HSTS header Strict-Transport-Security to be turned on with ssl_only config setting.

    * Ensured our applications continue to work with HTML::FormFu.  If you want to 
      ditch all it's classes set the 'no_formfu_classes' config setting and FormFu
      will stop adding all the extra classes onto all the html it renders.

    * Added installation_type configuration setting that will be inserted into
      the class of the body element on the application style apps.  This allows
      for differences in config to be targetted by CSS.  e.g. staging and live.
    * Added basic click jack protection by default.  Use no_clickjack_protection 
      config setting, or in the stash to disable.
    * Added extra javascript to the tab setup to highlight errors appearing
      in the tabs.

    * Fixed flash to stash config setting so it uses newer config setting - that 
      also prevents setting the secure cookies setting in the config from 
      causing the setting from being dropped.
    * Added an ajax ongoing indicator
    * Create a new session id when we login.
    * Updated the authentication to not trip over REST controllers.


    * Fixed minor alloy template problem with the global search.


    * Added a small change to the that checks for a customer using the Catalyst config file.
      This was needed for Eazy Collect to include the Notifications in the top navigation.


    * Switched to jQuery 1.7.1 - the motivation for doing this was the warnings
      Webkit has been producing, complaining that a feature the old version was using 
      is now deprecated.  More information is here,


    * Fixed a problem that caused the appkit to crash sometimes because the feature
      list got blown away from the cache.


    * Added appkit_js option to load external Javascript sources from the controller
            appkit_js => [qw( /static/js/main.js /static/js/jquery.tooltip.js )],


    * Added 'Description' attribute to actions. Use it to add a title attribute to the left-side menu links.
        sub action_name
            : Local
            : Args(0)
            : NavigationName('Blah')
            : Description('This will be the title')


* Implemented enabled/disabled user controls so that users are now disabled
  as suggested in the UI.
* Help urls added which creates links to an on-line help system (e.g. a CMS or Wiki) 
  based on the private_path of each page of your application.

    To enable it, add the following settings to your app's config file:

    help_link on
    help_link_separator "_"
    help_link_text Help
    help_link_target "_aquarius_help"


* Update Mega Menu (application style) to work on Firefox and corrected
  issue with menu option ordering at the same time.  This may require css
  overrides for the individual menus within your applications css.
  Extra classes have been added to the generated menu HTML to aid this.
* Fixed issue with CustomErrorHandler finding view to use unreliably.


* Added ability to use LDAP auth for authentication while still storing
  user information in the database.
  To integrate this with Catalyst you need to add the trait 
  OpusVL::AppKit::RolesFor::Model::LDAPAuth to your model and apply the role
  OpusVL::AppKit::RolesFor::Schema::LDAPAuth to your schema class.
  Read the perldoc for the modules for more information on configuration.
  The password changing facilities should obviously be turned off if you 
  are managing your passwords via LDAP.  The 'Features' on the auth roles
  have been split out to make this easy to do.  In the places where a form
  is still essential and the password field normally appears, the password
  field has been hidden.  This should avoid any confusion.


* Added autofilter of html for the xml templates used by Excel::Template::Plus
  by default to prevent issues with < and & in data.


* Renabled the table sorter for Linux.


* Fixed a goof in the role that pulls injects the DBIC objects into another


* Application style menu and css has been reorganised.
* Rolled out change to form directory since it appears to do bad things
  and isn't really used yet.


* Fixed portlets html so it doesn't get mangled by Template::Alloy
* Added add_breadcrumb and add_final_crumb methods to the controller role
  to simplify adding breadcrumbs to an application.
* Added yml files and .db files to the list of ignored extensions when serving
  static content to slightly mitigate the risk posed by bug 1014.  
* Added appkit form directory so forms from it's directory can be included in 
  other modules.  They can not be used directly as the form for an action, but 
  can be sucked in as part of an include.  That's down to the way the AppKitForm
  attribute works.


* Added a new role to allow the easy merging of the AppKitAuthDB into another schema.
* Switched view template engine from TT2 to Template::Alloy
  Note that this has slightly different syntax in places and doesn't like
  spaced after function names.  i.e. c.uri_for (action) won't work.
  See https://opusvl-intranet/wiki/index.php/Conversion_to_Alloy for information about 
  the differences.  The key thing you need to do is to unescape raw html content.  For
  instance [% form %] should be changed to [% form.render | none %] which will prevent
  the html being escaped.


* Integrated Excel view that makes use of Excel::Template::Plus.
* Added a method to the role for making plugins easier to setup.
  OpusVL::AppKit::RolesFor::Plugin->add_paths(__PACKAGE__).  This replaces
  the add_form_path method in the previous release.


* Added a new role for the plugin to allow the update of the HTML::FormFu config to 
  allow multiple paths to be used.  Call add_form_path to use it.

  If you want the forms from your AppKitX module to be included in the general forms
  search path for all modules add this into the main modules code where you do your 

    # at the top
    with 'OpusVL::AppKit::RolesFor::Plugin';

    # in after 'setup_components'
    $class->add_form_path(__PACKAGE__); # ''

  For an example of it in use look at OpusVL::AppKitX::ResultsetSearch

* Added hooks for the notification system in the application wrapper html.
* Added a standard 'delete.yml' template in the root folder for most of the
  delete forms where you just want a yes/no choice.


* Fixed an anoying bug where we duplicated menu items when doing grouped controllers in the intranet
  style menu.


* Auth no longer examines auto actions to allow for other forms of auth before our access
  control on the actions kicks in.
* not_found and access_denied actions now clear current_view stash setting to prevent
  issues if you get an access denied or not found bounce after setting that in the auto for
  something like a json view.
* Fixed the final private action that was broken by the new AppKitFeature attributes.


* Various bug fixes to the feature auth code added in 1.21.  
* Made regex for spotting 'end' actions less likely to catch legitimate actions like 'client_suspend'
  thereby excluding them from the regular auth procedures.


* Minor bug fix for bug introduced in 1.21.
* Tweaked release notes (this file) to mention dataset change.


* Fixed broken tests to make it install cleanly.  Note to self: run make test before rolling a release.


* IMPORTANT: This release has changed the appkit auth db so if you have it stored in Postgres you 
  will need to add a couple of tables and if you have your own DBIx::Class classes for the authdb
  you will need to regenerate them.

    CREATE TABLE "aclfeature" (
      "id" serial NOT NULL,
      "feature" text NOT NULL,
      PRIMARY KEY ("id")

    CREATE TABLE "aclfeature_role" (
      "aclfeature_id" integer NOT NULL,
      "role_id" integer NOT NULL,
      PRIMARY KEY ("aclfeature_id", "role_id")
    CREATE INDEX "aclfeature_role_idx_aclfeature_id" on "aclfeature_role" ("aclfeature_id");
    CREATE INDEX "aclfeature_role_idx_role_id" on "aclfeature_role" ("role_id");

    ALTER TABLE "aclfeature_role" ADD FOREIGN KEY ("aclfeature_id")

    ALTER TABLE "aclfeature_role" ADD FOREIGN KEY ("role_id")

  If you have your own DBIC class add this to the bottom of the Result::AclFeature class,

    __PACKAGE__->many_to_many( roles => 'aclfeature_roles', 'role');

* Added 2 level access permissions that allow the grouping of related actions into features to make
  role administration simpler.  To do this apply the AppKitFeature attribute.  Specify multiple features
  like this,

  sub action_name 
    : Local
    : AppKitFeature('Feature 1,Feature 2')

  Note that what you put here is what is displayed on the user interface.  Apply the feature to all 
  actions you need to execute as part of your feature, including the various auto actions.

  Note that you cannot specify multiple attributes against an action marked Private.  In order to 
  mark those actions with the attributes change the Private to Feature.  For a more detailed 
  explanation of this problem see bug 773 in bugzilla.

* Added method groups for the new application style menus.  Menus are divided into applications, 
  groups, then actions.  Applications are defined as they are now.  Groups are defined as a class
  attribute, appkit_method_group.  
* It is also possible to sort all the parts of the menu.  To sort the actions use the 
  :NavigationOrder(2) attribute.  To sort the groups use the appkit_method_group_order attribute on 
  the class.

  To sort the applicaitons use the appkit_app_order configuration setting.  This should be a list 
  of classes (using the injected names).  If you're unsure what to put add the key and put in a 
  bogus value and when your app is run it will complain and tell you what classes it is expecting.

    $config->{appkit_app_order} = [
        qw/TestApp::Controller::ExtensionA TestApp::Controller::ExtensionB TestApp::Controller::Test/

  If you have less classes mentioned than there are you will get a warning like this after catalyst has

    [warn] Application order is not completely set.  Update your appkit_app_order config setting
    [warn] Expecting these controllers to be specified TestApp::Controller::ExtensionB, TestApp::Controller::ExtensionA, TestApp::Controller::Test

* Moved permissions cache to a proper cache.  This prevents the issue where permissions were
  changed and other users on the server didn't see the changes. (Bug 224)


* Moved the date_short, date_long, time_short and time_long DateTime formatting functions
  to the controller (via OpusVL::AppKit::RolesFor::Controller::GUI) and update the macros
  to call those functions so that we have consistency.  You can now access those functions
  from both your controllers and your TT templates.
* Fixed the module version number reporting so if you do perl -MOpusVL::AppKit\ 9999 it will
  report the correct version number.


* Added a facility for managing which roles can manage other roles.  This allows users to 
  manage roles without needing to have them assigned.  See bug 235 for more details.
  Two new tables have been added to support this facility.  The need to be added to your
  appkit auth schema.

  CREATE TABLE roles_allowed 
      role integer not null references role(id) on delete cascade, 
      role_allowed integer not null references role(id) on delete cascade, 
      primary key (role, role_allowed)
  CREATE TABLE role_admin
      role_id integer not null references role(id) on delete cascade, 
      primary key(role_id)


* Changed submit button to say save on user roles saving.
* Added a not_found action for producing a 404 because default isn't terribly logical.


* Now allow portlets to not be displayed.  All they need to do is return a status of 404
  for their response.  i.e. $c->res->status(404);.  Be careful with calls to detach within
  the portlets because they may cause the whole process to break down.  The Portlet 
  construction is done by the index page 'visiting' each portlet as if it was a page and then
  constructing it's page from all of their responses.


* Added support for case insensitive logins


* Added human readable 404 and 403 pages.  Do a forward to /default and /access_denied to use them.
* Added a password reset feature.
* If a user is logged in and tries to access a page they aren't allowed to they will
  be shown 403 instead of a login screen so that it's clearer that they aren't
  allowed access.


The previous revisions changes are rolled up into this release for simplicity.

* Resized the images for the buttons so long buttons don't glitch.
* Disabled copy to clipboard function on tables in linux (because it didn't work).
* Tidy up <title> tag on pages using a combination of the template and javascript.
* Prevent users from being able to create a blank role.
* Wide applications menu should no longer visually glitch.
* A subtle application version number footer is now possible by turning on 
  the appkit_display_app_version parameter
* Added a facility to allow the AppKitForm attribute to be extended to allow 
  an attribute to be generated that doesn't call process on the form.
* Added a facility to poke in a bit of HTML content as 'before_content' before 
  the application_body div.
* Tweaked the JSON view to just expose the json stash key.
* Added a pager control.  Simply process, i.e,
  [% PROCESS pager = mypager %]
* Login process now redirects the user to the page they were trying to access before.
* Fixed a bug where the appkit menu on the left wouldn't display if there was only a 
  single element.
* Added a facility to allow the menu options from multiple controllers to be merged
  using by setting the appkit_shared_module property on the controllers to the same
* Added a facility to allow for pages to be available to users that aren't logged in.
  To do this create a role called PUBLIC.
* Improved the change password dialog so that it asks for your original password before
  allowing you to change your password.
* Added a simple XML view that makes use of XML::Simple.
* Added a stylesheet for printing that hides most of the chrome.
* Added missing dependencies to the makefile.
* Improved the test coverage.

0.01  2010-03-04 10:49:32
        - initial revision, generated by Catalyst