Revision history for Elive

0.89    TBA
        [minor bug fixes and refactoring].
        - Moved _get_results() and _unpack_as_list() from Elive::DAO to
          Elive::Entity. These are a Command Toolkit specific kludge that
          aren't required by StandardV2 and shouldn't be required for
          any future adapters.
        - Elive::Connection::SDK - now dies outright unless given a login username.
        - bug fix to safety check on admin user update/delete. Check was being
          bypassed when role was updated

0.88    27th April 2001
        - elive_query: set STDOUT encoding to utf-8 (ELM default encoding).

0.87_2  15th April 2011
        - Elive::Entity::Meeting->buildJNLP - Now understands user objects
          when passed as parameters. See updated pod example.
        - Really removed Elive::script::elive_meeting::ViewMeeting this time
          (see release 0.83)

0.87_1  14th April 2011
        - Removed stray .depend file from distribution.

0.87    11th April 2011
        - Elive::Entity::MeetingParameters - corrected datatype for
          'videoWindow' to 'Int' (was 'Bool').
        - elive_raise_meeting - added options: -cost_center -user_notes
          -moderator_notes

0.86    15th March 2011
        - $preload = Elive::Entity::Preload->upload( 'filename' ) - now works
          as documented in Elive introductory example.

0.85    15th March 2011
        [Completing Elive::View::Session functionality. Phasing it in as the
         preferred high level class for meeting construction and setup.]
        - Added add_preload option to Elive::View::Session. Utilised in
          elive_query.
        - Elive pod doco. Changed introductory example to raise a meeting via
          Elive::View::Session. Also added preload upload to example.
        - Also took out 'see also' links to Elive::Entity::MeetingParameters,
          Elive::Entity::Meeting, Elive::Entity::ServerParameters,

0.84    11th March 2011
        - Elive::View::Session - added support for recurring meetings
        - elive_query - converted from Elive::Entity::Meeting and friends to
          Elive::View::Meeting
        - Elive::Struct reverted from Mouse find_attribute_by_name to
          get_attribute. Was misbehaving under Perl 5.8.x when invoked via
          DEMOLISH during object destruction.

0.83    3rd March 2011
        [This release introduces Elive::View::Session - a consolidation
         of Elive::Entity::Meeting, Elive::Entity::MeetingParameters,
         Elive::Entity::ServerParameters and Elive::Entity::ParticipantList.]
        - Initial construction of Elive::View::Session. Supporting tests
          are in t/32-soap-session.t.
        - Elive::Entity::ServerParameters - now handles update of seats.
        - Added entity class Elive::Entity::InvitedGuest
        - Extended Elive::Entity::ParticipantList to model invited guests.
        - Removed Elive::script::elive_meeting::ViewMeeting; supersueded
          by Elive::View::Session.
        - Added Elive::Util::next_quarter_hour() - mostly to support
          Elive::StandardV2 tests.
        - Phased out 'use base ...' in favour of 'use parent ...'

0.82    10th February 2011
        [I hadn't run t/26-soap-user.t and t/27-soap-group updates against a
         live SOAP servive for a while :-| found some compatibility problems
         between Elluminate 9.7 and 10.0.1.]

        - Elive::Entity::User; to mirror SDK changes. The password was
          previously handled seperately via the 'changePassword' command,
          but is now a required field in the initial insert. Also tidied
          up the update checks; introduced _safety_check() method for
          consistancy.

        - Elive::Entity::Group; update modifed to match change in SDK.
          -- The separator character for has changed from ';' to ','.
          -- Added new class Elive::Entity::Group::Members.
          -- Group name now passed to 'updateGroup' command.

        - extended t/26-soap-user.t and t/27-soap-group. These may be enabled
          by setting the following enviroment variables:
            -- ELIVE_TEST_USER_UPDATES
            -- ELIVE_TEST_GROUP_UPDATES
	  These tests can only be run on a non-LDAP server. See README for
	  details.

0.81    4th February 2011
        - Resolve aliases on entity insert and update. For example the
          following are now equivalent:

                Elive::Entity::Meeting->insert({privateMeeting => 1, ...}); # use real attribute name
                Elive::Entity::Meeting->insert({private => 1, ...}); # use alias name

0.80    28th January 2011
        - Elive::Entity::ParticipantList. Detect and catch the common
          scenario of attempting to add unknown users. Now croaks with a
          friendlier and easily caught error message:

              "unable to add 7 of 35 participants; rejected users: user1 user2 ..."

        - Eliminated remaining direct uses of Elive::Util::_freeze() function
          with Elive::DAO::->_freeze() for consistancy.

0.79    21st January 2011
        - bugfix to elive_query. Had silently broken 'select * ...' queries
          around 0.76. Added tests to t/40-script-elive-query.t.

0.78    8th December 2010
        - Removed bogus dependency on IO::Prompt. Causing unneccessary
          build problems on Windows.

0.77    8th December 2010
        - Added tests on setting big meeting participant lists. Bug fixed
          in pending Elluminate 10.0.2 release.
        - Downgraded  Term::Readline::Perl dependency from 'required' to
          'recommended'. alternatives include Term::Readline::TTYtter

0.76    10th November 2010
        work on elive_query:
        - added -adapter option. For impending integration with
          Elive::StandardV2. Added data_classes() method to Elive::DAO for
          discovery of entity classes.
        - IO::Interactive::is_interactive() dieing when executed from debian
          5 cron (error opening /dev/tty). Now evaled; assume non-interactive
          on eval error.

0.75    28th October 2010
        elive_query: Extended the range of data that can be selected for
        meetings. This includes data for meeting parameters and server
        parameters. Also now selectable are associated participants,
        recordings and preloads.

	    select name,participants,url from meeting where id = 1234567890123

        In particular, 'select ** from meeting' will retrieve all data from
        Meeting, MeetingParameters and ServerParameters. This involves 2
        secondary SOAP calls to retrieve associated data. Slow, but thorough.

0.74    18th October 2010

        Bug Fixes:
        - Elive::Entity::Preload - Make sure that the preload has an 'ownerId'
          defined. It seems to be required for preloads to function properly.

0.74_2  14th October 2010

        Support for LDAP groups in participant lists
        - Elive::Entity::ParticipantList has been significantly refactored.
          It now correctly interprets the 'type' property (introduced ~ ELM
          v3.0) and supports both 'user' and 'group' properties.
        - Group support also added to elive_raise_meeting - see pod

        Bug fixes:
        - Elive::Entity::Meeting: Added 'adapter' property. Interesting
          values include: 'default' & 'standardv2'.

        Other Enhancements:
        - General support for credentials embedded in urls, E.g:
          http://user@host.org/inst

0.74_1  7th October 2010

        Essential changes to implement Elive::StandardV2 - A new companion
        CPAN module that implements bindings to ELM Standard API Bridge V2.

        The classes in this distribution that referenced by ELive::API are
        Elive::Connection::API, Elive::Array, Elive::DAO and
        Elive::DAO::Singleton.

        - Elive::Entity now only contains ELM specialisations. The generic
          portion has been moved to create a new base class, Elive::DAO.
	- Added new mixin class Elive::DAO::Singleton
        - Add subclasses Elive::Connection::SDK & Elive::Connection::API
        - Elive::_check_for_errors moved to Elive::Connection
        - Elive known_adapter() && check_adapter() methods replaced by
          known_command() and check_command() methods in Elive::Connection::SDK
          and Elive::Connection::API

0.73    3rd September 2010
        - Added script tests to manifest
        - Checked against Elluminate 10.0.1 - passed!
        - Starting investigation into extending this module to also support the 
          Elluminate V2 API, via the SOAP endpoint: http://site-name.com/instance/v2/webservice.event.

0.72    13th August 2010

        - Elive::Entity::Group: added implicit casting of user objects in
          member lists. The follow now works as you would expect:

  	      my $bob = Elive::Entity::User->get_by_loginName('bob');

	      my $group = Elive::Entity::Group->insert({
		    name => 'Elluminati',
		    members => [111111, 222222, 'alice', $bob ],
	      });

        - Added script tests (elive_query, elive_raise_meeting,
          elive_lint_config).

        - Elive::Struct Provided method aliases for existing entity
          level aliases. For example $meeting->private is now equivalent
          to $meeting->privateMeeting.

0.71    21st June 2010
        - Fixed elive_query (loading of Elive::Connection) from last
          change. Added a test for this.

0.70    21st June 2010
        Support for Elluminate 9.7 => 10.0
        - New Preload properties: isProtected and isDataAvailable.
        - New Recording properties: sessionInstanceId, startDate and endDate
        - Accommodated some newly introduced bugs/changes:

          -- User get_by_loginName() is no longer case insensitive

          -- Preloaded whiteboard files lost extension during insert/update
             (introduction.wdb => introduction).

             Note: attempted insert/update of files with no extension will
             crash the SOAP request with the error message:

                  'String index out of range: -1'

              (have put in a ticket to Elluminate help desk).

0.69    11th June 2010

        - Raised SOAP::Lite dependency 0.69 => 0.712. This eliminates some
          encoding failures under old perls (5.8.8-) and slightly older
          versions of SOAP::Lite. Encoding/decoding of HTML entities now
          properly handled. Thanks SOAP::Lite maintainers!

        - Minor refactorings to Elive codebase in order to pass
          Test::Perl::Critic severity level 4 tests (00c-critic.t).

          -- Most commonly, Atomic parsing of subroutine arguments. E.g.
             what was:

	        sub disconnect {
                    my $class = shift;
                    my %opt = @_;
                    # ...
                }

             After refactoring becomes:

                sub disconnect {
                    my ($class, %opt) = @_;
                    # ....
                }

	Second most common refactoring was adding explicit final 'return'
        to subroutines. For gory details, see svn commit of rev 377.

0.68    2nd June 2010
        - Added new entity class: Elive::Entity::Report.
        - Bug fix: Entity data was being returned with encoded
          entities. HTML::Entities::decode_entities is now used.

0.67    28th May 2010
        - Added Elive::Entity::Recording::upload() method.

0.66    22nd May 2010

        - Moved check of property checks from Elive::Entity to
          Elive::Struct. Made it a moose /mouse BUILDARGS method.

        - Added 'type' field to participants method. Newly discovered
          due to above BUILDARGS check.

        - Recordings do not have to be associated with a Meeting. Made
          RecordingId optional.

        - Implicit casting of objects to ids. For example, you can now
          write:

             Elive::Entity::Meeting->new({facilitatorId => $user,
                # ...
             });

           Instead of:

             Elive::Entity::Meeting->new({facilitatorId => $user->userId,
                # ...
             });

0.65    17th May 2010
        - Hide participants in elive_query script - not a retrievable entity.
        - pod tweaks.

0.64    11th March 2010
        - Elive::Entity::Group changed GroupId from Int to Str. Can be
          non-numeric when groups are configured for LDAP.

0.63    7th March 2010
        - Fixed usage/error messages in Elive::Entity '_readback' method.
        - RestrictedMeeting flag appears inoperative in Elm 9.7. Added a
	  test in 22-entity-meeting.t to catch this in 9.8 onwards.
        - Added -restricted option to elive_raise_meeting. Will require
          the above Elm fix to become effective.

0.62    16th February 2010
        Changes to README doco re troubleshooting and meeting pod.

0.61    26th January 2010
        elive_raise_meeting support for Elluminate 9.7 release
        - Modified user search/validation filter for Elm 3.2 compatibility.
        - Added 'quit' command. Also 'describe'; alias for 'show'.

0.60    25th January 2010
        - Added -occurs option to elive_raise_meeting script
        - Further tweaks to README

0.59    23rd January 2010
        - Updated README file to reflect Elluminate 9.5+ configuration.
        - Took out Elive->collections method. Easily derivable and only
          used in testing.

0.58    14th January 2010
        Support for Elluminate 9.7 release:
        - Added new field 'dn' to Elive::Entity::Group - LDAP domain name.
        - Added Elive::Entity::Group::_thaw(). This was required to handle
          modified output from Group DAO. We now get a single result with
          all members separated by ';', instead of a list of individual
          members.
        - Fix in Elive::Entity::_thaw(). It was modifying parts of the input
          struct. Now makes a copy on entry via Storable::dclone.
        - added 27-soap-group.t - group specific tests.

0.57    5th January 2010
        - Altered tests to pass Mouse 0.40 constraints, '+002' is not
          considered a valid 'Int'(?). Transient Mouse bug?
        - Elive::Entity - Added a warning for attempted use of is_changed on
          none database objects.

0.56    4th January 2010
        - Objects are now automatically stringified on all SOAP calls.
            For example:
             Elive::Entity::Meeting->insert({
                    facilitatorId => $user->userId,
	            # ...
	      });

            Can now be written:
             Elive::Entity::Meeting->insert({
                    facilitatorId => $user,
                    # ...
             });

        - Improved mock testing coverage. Now able to run much of
	  the meeting and recording tests offline.
        - Pod/doco improvements. In particular, show a meeting insert
          in the introductory example.
        - Removed some unreachable code from elive_raise_meeting.