2.4 Release Notes

From web2Project.net
Jump to: navigation, search

Release Date: 17 August 2011

This time around, we have a significantly longer release cycle than normal. Within the core team, there were new jobs, conferences, at least one alien abduction, lots of projects, and some travel. Regardless, this is a solid release that includes some major accomplishments.

Downloading web2project

For the v2.4 Release, the only official distribution site is SourceForge.

All Installation instructions have been moved to the Installation page. They will no longer be included in the Release Notes.

Reporting Problems

If you have any problems or think you've found a bug, please visit our Support Forums. We have a great community and most are willing to help in exchange for a simple "thank you". Remember, politeness goes a long way.

If you've been unlucky enough to discover an actual bug, please add it to our our Issue Tracking System. Please be as specific as possible, it will help us reproduce and determine the cause of problems more quickly. Though before submitting, please search to see if someone has already submitted it. Who knows? It might already be fixed by the time you find it!

Finally, please remember to mark Feature Requests as requests and not bugs.

New Features

  • Added timezone configuration as an option at install time instead of as a post-install step;
  • 78 - Projects - Task dependencies not cascading
    • Previously an "Open/Known Issue":
      • The cascading dependencies are still not 100% but very close. Although long chains (A->B-C->D->E) work fine and tasks with multiple dependencies work fine, there are a limited number of scenarios where dependencies do not behave as expected.
      • One such scenario is when you have a Dynamic Task A with children chain (B->C-D->E) and Task F which is dependent on Task A. If B, C, D or E shift, they shift the rest of the chain as expected and the Dynamic Task (A) as expected but unfortunately F does not get updated.
  • 515 - Tasks - Detailed percent complete tracking
  • 862 - Tasks - Task duration and end date using server-side code

Fixes/Bugs Closed

  • Added an additional autoloader option to allow the Holidays module to work properly;
  • Added filtering to the iCal token to close a security issue;
  • Fixed an oddity where creating a Department from certain places didn't set company_id;
  • Fixed an oddity where task_project was overwritten accidentally;
  • Fixed breadcrumbs in the Forums module;
  • Fixed some bad grammar;
  • Fixed some header oddities when the User isn't logged in;
  • Fixed some IE7 display oddities;
  • Fixed the case where some systems - Windows and some BSD - don't have strfmon available;
  • Fixed the File List to properly display and link the current and previous versions of files;
  • Fixed the SendQueuedMail to use the key/value pairs correctly;
  • Fixed to preserve linebreaks in some textareas in FF and IE;
  • Removed the PHP 5.3 dependency;
  • Updated the Contacts search filter to be blank instead of displaying zero;
  • Updated the FileFolder addedit and display formatting;
  • Updated the FileFolder class to collect the queries into a single place;
  • Updated the Task Reminders to apply timezones based on the receiver, not necessarily the sender;
  • Updated the vCard import set the contact_owner;
  • 560 - Tasks - Incorrect start/stop date when Dependency tracking on
  • 583 - Calendar - Default Event Start and Stop times
  • 604 - Tasks - dependence issue between tasks
  • 623 - Core Infrastructure - Reminders sent for Template projects and inactive projects
  • 713 - Translation/Languages - French accent in months name aren't printed correctly on screen.
  • 732 - Calendar - Event e-mail with wrong time
  • 765 - System Admin - wrong timezone for admin
  • 766 - Core Infrastructure - Deprecated class Mail
  • 768 - Projects - add project contact doesn't work
  • 770 - Core Infrastructure - LDAP Login broken in 2.3
  • 772 - Files - Cannot delete file in file list view
  • 774 - Gantt Chart Generation - Tasks of the Todo Gantt are created Twice
  • 776 - Tasks - Line break in task description not work
  • 777 - Projects - Project List View is broken in flat mode
  • 778 - Contacts - Contact search box erases first character on search
  • 779 - Projects - Project gets wiped off when importing tasks with bad date start/end
  • 781 - Files - Displays the correct name of the folder instead of (Root):
  • 785 - Projects - Project Report Printing
  • 786 - Files - Folder Explorer HTML broken
  • 787 - System Admin - solution: timezone install script sets w2p software version to an obsolete value
  • 788 - Forums - forum layout bugs out with different forum rights
  • 789 - User Admin - Tasks ending before they begin = 500 error
  • 791 - Files - Cannot Checkin File (V. 2.3.1)
  • 792 - Tasks - Assigned resources display loss
  • 793 - Files - Files related to deleted project are impossible to edit/remove by admin.
  • 794 - Projects - UTF-8 issues : *some* non-English characters are displayed corrupt
  • 795 - Links - Links not visible
  • 796 - Cosmetic/Typo - missing graphic: style/web2project/images/icons/priority+0.gif missing from 2.3 code base
  • 797 - Core Infrastructure - Order by company on project page not work
  • 798 - User Admin - Adding single deny rule in role leaves users blind to all modules
  • 800 - Tasks - problem for changing dependant tasks
  • 801 - Contacts - Update key do not store in Database
  • 802 - Tasks - Move this task to project list contain 'array' in task edition page
  • 805 - Browser Compatibility - Tooltips not showing properly in IE 7 & 8
  • 808 - Tasks - The message Can not create task. Project Task not set.
  • 809 - User Interface - Login Box disappears
  • 813 - Files - Extra column in the Files List
  • 814 - Project Designer - Project Designer Problem with milestone date update
  • 822 - Projects - Required 'short name' of project is pre-filled, but not accepted
  • 825 - User Interface - Change password - strange notice
  • 827 - Project Designer - Task selection checkboxes can't be checked individually
  • 828 - Tasks - Set task start date based on dependency causes crash of database
  • 829 - Tasks - Dependency tracking has no effect
  • 834 - Files - Upload file does not work
  • 835 - Projects - Missing Validations in Budget
  • 849 - PDF Generation - Gantt chart and PDF Printing
  • 851 - Companies - Can't use correct e-mail address
  • 853 - Forums - Forum title disappears
  • 855 - Contacts - Have to delete department to be able to delete it's previous owner
  • 856 - User Admin - edit user preferences returns to sysadmin instead of user admin
  • 860 - User Admin - LDAP failed with error: 'contact owner is not set'
  • 861 - Reports - Clicking on any of the buttons in the Task List report does not alter the dates
  • 866 - User Admin - Bug adding permissions to users
  • 867 - Gantt Chart Generation - Generated gantt shows only one of the assigned task users.
  • 869 - Calendar - When using module 'Holiday' the week view doesn't work
  • 871 - Cosmetic/Typo - CSS fix for Snow Ball style
  • 873 - Tasks - Assignment of contacts to task is not removed from DB
  • 882 - Links - Code Error in Links setup.php
  • 883 - Files - Files view - All Files -> Folder is always ROOT
  • 892 - Tasks - task email charset encoding does not work
  • 893 - Project Designer - ProjectDesigner - Actions tab does not work
  • 897 - Project Designer - Task description in ProjectDesigner is wrong
  • 898 - Calendar - ICal feed with wrong time
  • 900 - Reports - Reports -> Tasks sorted by user does not work with the last snapshot
  • 903 - Contacts - Importing a vCard with no first name gives an 'Access Denied' message when trying to view Contact details
  • 904 - Contacts - Importing a vCard with no birth day results in beeing unable to edit the imported contact without providing a valid birth day
  • 906 - Projects - Subprojects are not removed from main project after removing their subproject-status
  • 912 - Tasks - startdate, enddate in task notification not emailed
  • 914 - Projects - Project tab - Scheduled hours is not calculated
  • 921 - Tasks - task log email does not indicate that it is a 'task log' email

Misc Changes/Improvements

  • Added an override to the LDAP config to allow for one config string to override everything else;
  • Added functionality to add tasklogs directly from the calendar;
  • Added the percent complete for predecessor and dependent tasks on the Task View screen;
  • Added the Swedish translation;
  • Deprecated $task->peek();
  • Eliminated deprecated & duplicated code;
  • Eliminated dotProject commits:
    • Fixed Bugs:
      • #3295 - Updated the birthday check to actually work;
      • #3288 - Added proper escaping to the company name;
      • #4154 - Fixed the formatCurrency function;
      • #4664 - Updated the project duration calculation to work;
    • Removed code already implemented in core:
      • #2971, #3104, #3244 - Dropped the custom query in favor of core;
      • #3282 - Removed queries from the Contacts class to use core;
      • #3293 - Cleaned up the Forums module to use our OO structures instead of raw results arrays;
      • #4158 - Removed the canDelete query in favor of the core;
    • Removed unused/unnecessary code:
      • #3034, #3040, #3041, #3225, #3281, #3219, #3292 - Eliminated duplication, unnecessary globals, and re-declaration of declared objects;
      • #3058, #4740, #5369 - Removed dead code;
      • #3100 - Removed unnecessary fields from query;
      • #3152 - Killed off duplicate & unnecessary code from PDF generation;
      • #3201 - Deprecated setTasksStartDate javascript because it's better calculated on the back end;
      • #3202 - Removed the setMilestoneEndDate function;
      • #3212 - Eliminated the old upgrade path;
      • #3220 - Removed unused loadArrayList function;
      • #3266, #4723, #4734 - Reverted commit;
      • #3297 - Removed the unnecessary utf-8 check;
      • #3662 - Deprecated the concat() method on Query to do it in PHP instead;
      • #3665 - Deprecated the ifNull() method on Query;
      • #3267 - Removed unused execXML function;
      • #4627 - Dropped the unnecessary parts of the query;
      • #4635, #4578 - Removed a bunch of junk from the Department View;
      • #4657 - Removed the unused project/task filters;
      • #5384 - Eliminated duplicate query declarations;
    • Reimplemented to bring up to current standards:
      • #3083 - Rebuilt the History module installer to meet our standards;
      • #3103, #3260 - Converted the variable check/filtering to follow our standards;
      • #3106 - Updated the reports module to use our standard translation structure instead of the file-based stuff;
      • #3144 - Updated the Custom Field classes to use the fieldName() and fieldExtraTags() methods instead of raw properties;
      • #3197 - Reimplemented the user logs to be timezone aware and eliminated unnecessary processing logic;
      • #3265 - Cleaned up the addedit/cancel buttons to use our common methods;
    • Simplified:
      • #3016 - Updated the variable checks to do it the PHP way;
      • #3077 - Simplified the translation paths;
      • #3086 - Simplified the query usage in the Forums module;
      • #3279 - Simplified basepath determination;
      • #3328 - Simplified the count calculation;
  • Moved all the stray functions to a single spot - includes/cleanup_functions.php;
  • Moved test data into individual directories to keep it managable;
  • Rebuilt the Custom Field Editor from the ground up:
    • Implemented our standard store and delete methods;
    • Moved the Custom Field code into its own class structure outside of the System module;
    • Reimplemented the optionlist store() and delete() methods to match our standards;
    • Reimplemented using our own best practices;
    • Simplified the flows (controllers) to be consistent and logical;
  • Refactored the Forums module to move the queries from the views into the classes;
  • Refactored the Reports module's Javascipt to eliminate lots of duplication;
  • Refactored the User Controller and class to match our patterns for store() and check();
  • Removed code that duplicated core functions;
  • Removed TCPDF;
  • Removed the odd updates to the Task table done during load().. which shouldn't change anything;
  • Simplified templates for better XHTML compliance;
  • Simplified the autoloader by eliminate the duplicate paths/classes;
  • Simplified the Contact, Project, and User lookups;
  • Simplified the Gantt Chart creation by making them consistent;
  • Simplified the generation of Departments Addedit & View, Task List, and Task List cells;
  • Simplified the validation methods;
  • Updated CAppUI to w2p_Core_CAppUI to be consistent with new class structures;
  • Updated convertTZ to return itself to make it fluent;
  • Updated the Authenticator to collect all the functionality in one place;
  • Updated the Authenticator to support a series of fallbacks;
  • Updated the BaseObject to bubble up errors that come from canDelete;
  • Updated the BaseObject child classes to use zero's for _id's instead of nulls;
  • Updated the CAppUI to use DISPLAYFORMAT instead of constantly calculating it;
  • Updated the check() to not modify core data, only check it;
  • Updated the core classes to use the protected $_query property instead of creating new queries each time;
  • Updated the Gantt Charts to use the contact_display_name instead of concatenating the first & last names;
  • Updated the Module module to use remove() instead of raw db access;
  • Updated the Projects class to accept project_contacts as either strings or arrays;
  • Updated the Reports translations for Brazilian Portuguese, Czech, English, Farsi, French, German, Italian, Polish, Portuguese, Russian, Spanish;
  • Updated the store() and delete() handling to use the _error property correctly;
  • Updated the tests to handle a project import failure;
  • Updated the User assignment to eliminate some extra queries;
  • Updated the User Controller to match our common patterns;
  • Updated w2Pacl to w2p_Extensions_Permissions to be consistent with new class structures;
  • 488 - Tasks - task ordering
  • 510 - Core Infrastructure - Bad consequences upgrading 1.2 to 2.0
  • 656 - Core Infrastructure - holiday module installation
  • 682 - Core Infrastructure - Autoconfigure Default Timezone
  • 754 - System Admin - timezone setting in initial call of sys admin after installation
  • 812 - Projects - add ability to show departments in project lists
  • 832 - Tasks - Set time by dependency
  • 836 - User Interface - Hardcoded CSS-styles (company / active projects)
  • 868 - Cosmetic/Typo - Assigned users for task are not shown one per line
  • 901 - Files - Folders name can not be longer then 64 characters

Open/Known Issues

  • If you upgrade from dotProject, you may have an oddity with your default theme/display as the name has changed. If this happens, edit your preferences, change to one of the existing themes, and save.

System Metrics

There are some core metrics that may be of interest to the geekier among us. By running the commands below, we get the metrics below (web2project is my base w2p directory):

php phploc.php --count-tests --exclude=../web2project/lib ../web2project/

php phpcpd.php --exclude=../web2project/lib/ --exclude=../web2project/unit_tests/ ../web2project/


  • Lines of Code: 67763 (11229 of comments, 56534 of code)
  • Overall Cyclomatic Complexity/LoC: 0.09
  • Classes: 89 (87 Concrete, 2 Abstract)
    • Lines of Code/Class: 761
    • Class Constants: 6
    • Methods: 806 (47 static, 759 non-static)
    • Lines of Code/Method: 84
    • Cyclomatic Complexity/Number of Methods: 7.68
  • Functions: 215
  • Constants: 64
  • Test Classes: 13
    • Test Methods: 486
  • 1.91% duplicated lines of code (~1196)