Portal Changelog

Version 0.01 - 11/09/2000 - 10:00
  - Created core module files.
0.07 - 06/01/2001
  - Migrated to have index.cgi be in /{site_dir}/cgi-bin instead of just in
    /{site_dir}
  - Working on mod_perl issues and Help engine crashing issues.
0.08 - 06/13/2001 - 16:00
  - Updated all onMouseOver events to be IE5 and Mozilla friendly.
  - Added title="" to all <a> tags.
  - Made all un{}'ed variables be {}'ed.
  - Working on mod_perl issues.
0.0.09 - 06/30/2001
  - Changed version to be major.db.code
  - Moving main configuration settings to /etc/pcx_portal/...
  - Making setup script to modify config file in /etc/pcx_portal/config.pm
  - Cleaning up all instances of Portal::Data::Config to add validation code.
  - Made name of built tarball be pcx_portal for clarification purposes.
  - Built rpm distro and created project on SourceForge.
0.1.00 - 07/18/2001
  - Updating database to support replication, company_tb changes, user rights
    and preferences.
  - Started cleaning up the HTML being generated and used phrases as much as
    possible so that all content is generated in the language of the user.
    Errors may still be only in English.
  - Added logging code to Auth and Application modules.
0.1.01 - 07/31/2001
  - Finished the Branding of the Portal support.  Started implementing the
    Dynamic content on Desktop by Application support.  Made the company info
    also include the Company Code on the Desktop.
  - Updated Portal documentation.
  - Continuing to implement the Replication support (Auth, Application modules
    done).
  - Further updates to logging code in Application and Auth modules.
  - Fixed Who->deleteWhoEntry where it wasn't actually removing the session that
    had expired but just the who_tb table entry.  It now removes the session
    and any application sessions that were created by it and are now orphaned.
  - Added create_company.pl script to allow more companies to be created.
0.1.02 - 08/01/2001
  - Creating the User Rights and Preferences data Objects Modules.
  - Adding the methods to the Auth module to work with User Rights and
    Preferences.
  - Made the setup.pl script make sure the new non editable items in version 0.2
    of the config file make it into a config file we are upgrading from 0.1.
  - Started a user rights test script (rights_test.pl).
  - Made sure that all pages being generated that have the JavaScript Error
    handler in them have the email address set. (Help and Login didn't)
  - Fixed the over zealous deletion of session info by Who->deleteWhoEntry when
    the Portal is going to log you out.  It is now optional to delete all the
    session info (since the Portal will have already gotten rid of them by the
    time deleteWhoEntry is called).
  - Updated the cron job to use the new removeSession option so that it's new
    behaviour is still done.
  - Moved all support scripts (that need to be used after the Portal is
    installed) into the scripts directory and updated install.pl to look for
    them there.
0.1.03 - 08/03/2001
  - Updated getListOfCompanies in the Auth Module to handle the parent / child
    relationship that companies now have.  You can select a list of companies
    that have a certain parent_id value (-1 = parent, X > -1 = child).
  - The Desktop now looks for the application icon in portal/images/App/...
  - Added the helpDefined value to the Config.pm config file.
  - Moving the bulk of the install.pl and appinstall.pl scripts into the portal
    library directory and make them take (via command line arguments) the values
    that the application is wanting to use to actually do the work for them.
    These scripts will be called from a wrapper script that the application
    provides so that we have consistent installation code but also allowing the
    application creator to do extra work in their case if needed.
  - Updated the version of the config file to 0.3.
0.1.04 - 08/28/2001
  - Added missing use statements for the UserRightObject and
    UserPreferenceObject Objects in Auth.pm.
  - Fixed the check for app in createUserRight.
  - Fleshed out assignUserRight, deleteUserRight, deleteAllUserRights,
    updateUserRight, assignAllUserRights, unassignAllUserRights,
    getUserPreferenceInfo, isUserRightAssigned methods.
  - Added isAppAssignedToCompany and isAppAssignedToUser methods in the
    Application.pm module.
  - Modified Auth.pm to allow the billingDB to be optional and only check for it
    when calling a Billing related method.  The next major change needs to be
    to add validity checks against the current user to make sure they can
    create, edit, delete user/company/billing info and not just allow anyone to
    get at the info like it currently allows.
  - Updated index.cgi to pass in an authObj which should have the correct
    session info in it based upon where it was called from.  This way I don't
    have to keep instantiating authObj's everywhere.
  - Fixed the rpm .spec file to point install.pl to the rpm build tree instead
    of looking in the real perl tree.
  - Updated the config file version to 0.4.  cookieDebug is now configurable.
  - Added session validation code to index.cgi.
  - Updated to use DBIWrapper 0.15 which helps fix some error messages coming
    out of XIWA (ledger.cgi).
  - Updated isValid checking code to be simpler and cleaner.
  - Added TODO file to the distro.
0.1.05 - 11/01/2001
  - Updated Help.pm to display an Overview for a Menu.  If defining a sub menu
    of help items, just add an _overview_ entry and that will be displayed at
    the top of the list before all menu items for that sub menu.
  - Fixed the handling of Other webRoot locations in setup.pl when editing data.
  - Added the passThrough support.  If you specify the appToRun and appToRunArgs
    values and the app is assigned to you and the appToRunArgs has command and
    state values then a window will be opened and the desired URL run to launch
    the app and try to make it do whatever you want.
  - Added Browser Capability detection code.  The results are stored in the
    portalSession in a browserCap hash.  See the documentation for more details.
  - Started working on Dynamic Content on the Desktop support.  Implementation
    has been reworked and will not be done till 0.2.xx since database changes
    must be made.
  - Made the Desktop use the BrowserCapabilities check to determine which
    JavaScript Error handler to output.
  - Made the setupDB.pl script in /usr/lib/pcx_portal which will help the user
    get the portal and billing databases created for the Portal.
0.2.00 - 03/15/2002
  - Fixing up the SQL statements so that they work in PostgreSQL 7.2.
  - Adding XML Config file modules and converting to using config files named
    after the Portal module (Portal Config.pm => Portal.xml, etc.)
  - The cookieDomain can now be a host name or a domain.
  - Added webUser/webGroup config variables so directories and files can be set
    by us to be owned by the webserver instead of relying on the user to do it.
  - Updated the database files with the changes that needed to be made.
  - Made the sql update files which will update a database at version 1 to 2.
  - Moved the database sql create/upgrade files into the webRoot/install/Portal
    directory so that there is an easier location to find files and so in the
    future we might be able to provide a web-based database upgrade path.
  - Made a top level install.sh script to help automate the install process.
    This script can not be included in the MANIFEST file as the make install
    step bombs while trying to cat it to install?
  - All cron scripts should now be placed in /usr/lib/pcx_portal/cron/APP/X
    where APP = Portal or the name of the Portal app (ex. Accounting) and X is
    hourly, daily, weekly, or monthly.  The install_app.pl script will create
    symlinks from the script into the /etc/cron.daily, etc. folders.  This way
    the user can stop a cron job from running but still have the script
    available for later.
  - Updated the Copyright info and changed our name from
    PC & Web Xperience, Inc. to just Xperience, Inc.
  - Added the app_lock_tb to the database definition so we can keep track of
    apps that are locked out for all users, specified users or all users of a
    specified company.  The only user let in to that app is the administrator
    that locked the app.
  - Added the Lock App methods to the Application module to allow the admin
    users to lock Apps in the Portal.
  - Updated and implemented the Dynamic Content display code.  Added the
    ability to specify the preferences that define the Dynamic Content interface
    via the UserProperties app.
  - Updated install_app.pl to properly handle the cron job file installation
    code.  It is first tested by XIWA.
  - Added Methods module which will provide common methods to do consitent
    look and feel for all Portal Apps.  This provides a common menu creation
    method, colorScheme CSS creation support, JavaScript helper functions and
    URL creation for Portal or App urls.
  - Portal::Methods will now be passed into every app spawned in index.cgi as
    methods.  It is upto each app writer to make sure this is checked for in
    each module of their app as it is now the preferred way for URL's to be
    created, menus displayed, etc.  See the man page for Portal::Methods for
    a list of available methods.  See the latest Template App project for an
    example of how to use the new methods.
  - colorSchemes are now defined as xml documents in install/colorSchemes
    and will be installed into install/App/colorSchemes which is where the
    colorSchemeInstall.pl script will look for them.
  - developed the colorSchemeInstall.pl script to handle importing colorSchemes
    into the Portal.
  - Updated the Portal to use the Portal::Methods::portalDBSetup method for
    instantiating portal and billing database objects.
  - Added a map method to the Language module so that we can do some error
    handling when outputting language phrases.  Converted the Portal to use.
  - Implemented the displayMenu method and updated the Desktop and Help modules
    to use it.
  - Fixed the setupDB.pl script so it no longer blows out errors about the
    Portal Database when working with the Billing Database.
  - Fixed up the MySQL database structures.  Apparently index is a reserved
    word for them but not for PostgreSQL.  Also had to convert \012 to \n so the
    xml was properly being inserted.
  - Added some generic JavaScript modules (Date and Color Pickers) and started
    documenting how to use them in the Portal_JS_Scripts.html file that is in
    the docs directory in cvs.  This will be on the website.
0.2.01 - 03/12/2003
  - Fixing the expect scripts that allow me to dump, create and import databases
    in the system so that they run under apache.
  - Updated the configuration file and setup.pl scripts to ask the administrator
    for the database admin user/password so that install scripts can run stuff
    as postgres or root when needed.
  - Implement the Force Authentication if the user tries to access parts of the
    Portal when not logged in.
  - Added the dbCreate, dbDump, dbImport methods to the Methods module.
  - Making the Portal more OO by making Portal::Base, Portal::Args,
    Portal::AppArgs and Portal::AppStateArgs modules that all Portal
    modules/applications should derive from to have a consistent interface and
    error handling implementation.
0.2.02 - 06/11/2003
  - Renamed the AppArgs.pm -> App.pm and AppStateArgs.pm -> AppState.pm.
  - Added documentation defining what are reserved names in the Portal::
    namespace.
0.3.00 - 06/13/2003
  - Improving the error output such that setError() will now create and prefix
    all error strings it is passed with the callers function name and the
    '() - Error!\n<br>' phrase internationalized.
  - Adding postfixError() and prefixError() to allow you to add error strings
    to a current errorString at the beginning or end of the current error.
  - Added the resetError() method to reset the error condition.
  - Language phrase files are now named by the code of the language not the
    full name.  Ex:  English.pm -> en.pm
  - Improved the error display code in the Language Phrase files.
  - AUTOLOAD now outputs the caller trace when $self is not an object.
  - createBaseURL now outputs the AppName when type = 'App'.
  - Added support for a misc directory under the portal webspace.
  - Fixed some install bugs in the install.pl script in regards to the cut
    command and linking to the cron jobs forgot the /usr/lib/pcx_portal prefix.
  - Redid the colorScheme CSS definition to actually be real CSS and all I do
    is make sure they get output in the right order.
  - Added apache config files for Debian and RedHat which will make getting the
    Portal up and running under Apache much nicer.  They are in
    /etc/pcx_portal/apache and the rpm installer tries to add it to the RedHat
    config file automatically.
  - Created apache.pcxportal which is the apache config file that setups /portal
    to be under /usr/share/pcx_portal/portal which is where we want things
    installed to now.
  - fixed the pg_db_*.exp expect scripts so that they force a password prompt.
  - Started form_methods.js which will provide a set of global JavaScript
    functions that work with form items in a generic way.  They don't need to
    know which form they are working with, etc.
  - Added generatePickerCode() to the Methods.pm module to allow creating the
    necessary form items in a cleaner way for color and calendar pickers.
  - Added the getCurrentDate() method to Portal::Methods.
  - I now use Date::Manip and Time::Local to work with dates.  Added several
    other date methods to get dates, add offsets to dates, etc. which wrap
    around the Date::Manip, Time::Local and gmtime, localtime methods.
  - All dates in the Portal are now ISO.  The Portal DB is no longer setting
    the use US Date format when using PostgreSQL.
  - Removed all uses of /bin/date from the Portal itself.  Other Portal apps
    may still need to be worked on (XIWA in particular).
  - Improved the setupDB.pl script after JT bugged me and provided the
    beginnings of the enhancement code.  PostgreSQL support has been greatly
    enhanced so that checks are made and you are only informed of those things
    that need to be done.  The portal user is attempted to be created
    automatically and it's password set.  If this fails, then you will have to
    manually create still, but this is better.  MySQL support will come in the
    future.  (hint: patches welcome)  The pg_hba.conf file can be edited by the
    script, but it only supports localhost (127.0.0.1) connections.
  - Added the db_host fields to the app_tb, app_servers_tb and company_app_tb
    tables so that the applications can connect to their databases on different
    IP's than the web part is running on.  This causes the database version to
    change from 2 to 3.
  - Updated the appinstall.pl script so that it asks the user to specify the
    dbHost value when assigning the app to a company.  This way each company
    can have their databases on different servers than the app overall instead
    of the old way of assuming the database was on the same box as the app.
  - Implemented the user lockout feature to prevent an attacker from trying to
    brute force a username/password.
  - Moved the config_tb helpers to Portal::Methods and added the necessary
    helper methods for the User Lockout feature to Portal::Methods.
  - Added the ability to specify extra error details for missing and invalid
    entries.  See the Portal::Base manpage for more details.
  - urlBuilder now requires the baseUrl parameter so that I can return a
    complete url with the baseUrl?arguments all put together.
  - Massive work on Portal::App so that the derived Portal Apps don't have to
    do any of the session setup, database connections, etc.  The run() method
    is now provided by Portal::App and has been designed to make sure
    user permissions are checked as early as possible and the derived app still
    has the flexibility to do extra things before and after the specified
    state/command is sourced and run.  Xiwa is the only app currently using this
    ability, but other apps may/should be using it in the future.
  - Updated Portal::AppState to implement the States run() method and provide
    the closeApp code via processCloseAppEvent().
    Added setupCSS() method to handle creating an HTMLObject::Normal doc and
    getting the current colorScheme for the user and adding it to the $doc
    instance.  Added the call to includeCoreJSFiles() in setupCSS() also.
0.4.00 - 04/13/2004
  - Added the Human Readable file upload support in setup.pl (FR#93461).
  - Added support for the serverName and cookieDomain to be IP Addresses.
  - Converted the boolean true/false parameters to 1/0 and fixed up the database
    layer accordingly.
  - The generatePickerCode() method now calls the HTMLObject implementation.
  - Removed the javascript files from the distro that the HTMLObject is now
    providing and maintaining.
  - UserObject -> User.  new(parameters) -> populate(parameters)
    Began fleshing out the template, data and profile structures needed for
    creating, editing or viewing a users info.
  - Created the Portal::Forms::User module which provides the methods to view,
    edit, delete, create users and change their passwords in an admin or user
    mode.
  - Database change to allow the tz field to store 4 characters since there are
    several timezone entries with 4 characters. :(
  - Fixed the Help engines processing of <help></help> tags so that you no
    longer have to specify a _ to represent a space and a \_ to represent a _.
    Fixup your Help entries accordingly.  This affects the content=""
    attribute and the body of the <help></help> tag.  You can now do app="" to
    indicate the help link is to a topic in the current helpApp.  Multiple
    <help></help> links can be specified in a topic and they will all be
    processed.  The help content (between the <help></help> tags) can not
    contain html tags (for now).
  - The Help engine is now documented as to what are reserved topics, how
    the topic system works, etc.
  - Improved the layout of the Help window.  The topic hierachy is now
    displayed on the same line seperated by ' > '.  Links that go to another
    topic grouping are prefixed with a > to indicate this.  A summary of the
    topic group can now be displayed using the _summary_ topic entry.
  - Improved error handling in the Help system so it doesn't blow a Portal
    Error window unless absolutely necessary.  This will allow incomplete or
    invalid Help modules to still be semi-usable by the user and yet give
    feedback to the developer.
  - Added the state property to all AppState derived modules so the app
    can just reference $self->{state} instead of having to hardcode their
    name.  This will make code more portable between states and apps.
  - Changed appName => app in the App.pm module so we mimic our cgi arguments
    of app and state.
  - Added == and != operators to the User object.
  - Added initial SOAP::Lite support so user create/delete code can have the
    Portal and any assigned apps do setup/cleanup code without having to do
    a pop-up window for each app and do cgi requests, etc.
    The SOAP framework will be left in-place in hopes I can eventually get this
    to work in the future, but for now, user/company/app manipulation will be
    limited to a single machine.  This means that officially distributed Portal
    clusters are no longer supported (actually never really were) until the
    SOAP issue can be resolved.
  - Fixed the doLog() error detection and reporting code in the Auth and
    Application modules after the migration to doLog being in Methods.
  - Added the Portal::Forms::Apps module to provide the methods for seeing
    what apps are purchased by a Company, what apps are available, managing
    the app assignments to users, etc.
  - Added some more CSS entries to allow alternating rows in tables and to
    handle links in those rows.
  - Added getHandlerSub() helper in Portal::Methods to allow a consistent
    output API when displaying a select box of Users, AppServerObjects, etc.
  - The CompanyApplicationObject now has the populate() method and stores the
    forms that deal with CompanyApplicationObjects as used in the
    Portal::Forms::Apps module.
  - Added == and != operators to the CompanyApplicationObject object.
  - Added 'before' and 'after' acronyms to the displayMessageStr() method in
    regards to the break attribute.  They make more sense than above or below.
  - The UserApplicationObject has been converted to the new()/populate() split
    and edit/view forms have been started.  Added the comparison operators.
  - Removed the create_user.pl script from the distro as the functionality is
    now provided by the CompanyAdmin app.
  - Portal::Language now derives from Portal::LanguageBase as well as all the
    Portal::(App::)?Language::lang modules.  Portal::LanguageBase provides a
    consolidated error framework (without the reliance on the langObj) and
    the map() method.  Apps should now instantiate their langObj by using
    Portal::Language->new(lang => $lang, app => "AppName");
  - Created error() to replace both didErrorOccur() and setError().  It defaults
    to appending the error message so you don't have to use postfixError().
    Converted all didErrorOccur()/setError()/postfixError() calls to error().
  - Created the windowing API methods in the Portal::Session module which will
    make working with windows in the Portal easier.
  - Converted the ColorSchemes to be a single CSS style per entry.  The color:
    and background-color: attributes must be defined.  There is a perl script,
    convertColorSchemeXML.pl, which will convert the import XML files to make
    colorScheme development easier.  The colorSchemeInstall.pl script now
    properly removes the fgColor/bgColor entries, but will not preserve any
    derived colorSchemes when moving to the new format.
    When generating the css entries via the setupCSS() method, the Portals
    colorScheme entry will always be output and then if the application provided
    an override, then it will be output right after the Portals version.  This
    allows us to take full advantage of CSS and not require the application
    to keep upto-date in regards to any non-color related changes that the
    base colorScheme may have defined for entries they were overloading.
  - Added debconf support to allow the cronjob symlinks to be created/deleted
    per the users wishes.
  - Added set()/get() helper methods to Portal::Base so as to allow a standard
    accessor API instead of doing the psuedo hash way of $obj->{name}, you now
    do $obj->get("name") or $obj->set(name => value).
  - Added helper methods: add()/subtract()/mul()/div()/mod()/append() to allow 
    string and math manipulation similiar to +=, -=, *=, /=, %=, .= with the 
    data in the object via the set()/get() accessors.
  - Fleshed out menuing code and moved it into AppState and the prepDoc().
  - The commands hashes values for each command represents the langObj entry
    to use when generating the title for that commands document, via the
    prepDoc() method.  The generated title is an sprintf of the title phrase
    using the $self->appVersion and the specified command phrase as arguments.
  - The Desktop can now optionally not display application groups that do not
    have any apps assigned.  By default, this is now enabled.
  - The database version is now the combination of the major.database values
    and not just the database value in the Portal version.
    Ex: Portal 0.4.00 has a database version = '0.4' instead of 4.  The
    database upgrade code has been updated to handle going from the current
    version to any new version instead of forcing it to be the current + 1.
  - Upgraded the database version to 0.4 from 4 so we are ready for the 1.0
    release down the road.
  - config_tb changes, other than the db_version value, no longer require a
    database schema change as they are now handled by a post-install process
    that is less dependant on the database version.
    The updateDBSettings.pl script will process a DBSettings.xml file provided
    by the Portal or Portal App, and will create, update, or delete the config,
    event, rights or dynamic-content entries that the app has specified.
  - The User Preferences configuration api has been implemented and the
    CompanyAdmin app fully supports letting the user edit their preferences for
    any Portal apps that provide the Preferences object.
  - prepDoc() now uses the appConfigObj to determine what template to use as
    the default (since the application is supposed to define this in it's config
    now).
  - The menu generation code, now checks to make sure the Help entry should be
    a link, instead of always generating it as a link, which would break if the
    app doesn't have help defined.  Updated the Menu objects accordingly.
  - Added SideMenu-Location form options and validation structures to the
    Portal::Data::Variables object.
  - Added getOrCreateUserPreference() which will attempt to create the
    preference if it is not currently created for the user.  This requires the
    Default value to be defined in the config system.
  - Started updating all preference lookup and create loops to use the new
    getOrCreateUserPreference() method, which simplifies and eliminates bugs.
  - Changed dynamicContent_Config_Default -> dynamicContentConfig_Default in the
    database, via the DBSettings.xml config file so that the
    getOrCreateUserPreference() method can find the default value.
  - Implemented read/write session support to eliminate the I/O locking issue
    that comes from all sessions being opened in write mode and always setting
    changed = 0, which will force a write to the database.  Submitted patch
    to the Apache::Session maintainer, but have not yet heard back.  This has
    improved system performance when dealing with many Portal apps/windows open
    at the same time. :)  You also, no longer have to set the changed entry as
    opening the session in write mode automatically does this, since I kept
    forgetting to and was wondering why deep changes weren't being kept.
  - Converted all dbiw variable references in the Portal to be dbHandle.
  - Added support for templates in the Portal::Objects::Base to have #LANG=x#
    embedded in them and have the specified phrase mapped and replaced in the
    template so you don't have to do it manually.
  - Added langSubstitute() to Portal::Base so any derived modules can do their
    own #LANG=x# substitutions cleanly.
  - Added dataError() to Portal::Base so you can check for invalid, missing or
    unknown entries quicker than having to do:
    if ($self->numMissing() > 0 || $self->numInvalid() > 0), etc.
  - Changing the blank th style sheet entry to be th.header to resolve the
    issue JT is having in xiwa.


