QCubed 2.1.0 Stable Release (released March 24, 2011)

There are more than 70 bug fixes.

The following are the new features in this release (in the order of tickets in each group):

Javascript:

  • Enable add External JS (#362)
  • add low priority javascript (#635)
  • Improve / Fix event trigger handling (use jQuery event functions) (#681)
  • combine qcubed.js and control.js and get rid of _qc_packed.js (#805)
  • Event/Action improvements: allow returning javascript objects/arrays/strings ... (#718)

Controls:

  • New Control: Image Browser (#211)
  • Create new QControl wrapper for jQuery Accordian (#462)
  • user specified filter controls in the datagrid (#568)
  • Periodic events triggering with the new QJsTimer control (#633)
  • HtmlBefore and HtmlAfter are not honored in Render() (#661)
  • QFloatTextBox,QIntegerTextBox : reduce code duplication and add a step interval property (#672)
  • PbsQFileAsset Control (#711)
  • Better integration of jQuery UI controls (#717)
  • QSimpleTable - a new table control (#756)
  • handle jQuery "property" events (#765)
  • Make wrapper controls optional (#692)
  • Ad an AddItems method to QListControl to add multiple items easily (#787)
  • Execution of JavaScript before and after QXXXXAction on QControls (#788)
  • QAccordion should track which item is open. (#790)
  • Add HTML5 "search" input type (#791)
  • Can't detect backspaces in fields (#723)

Databases and QQuery:

  • Picking database columns for QQuery (#79)
  • Query Profiler: add results of an EXPLAIN statement (#129)
  • Proper Group By handling for databases other than MySQL (#270)
  • optimization in InstantiateDbRow (#748)
  • optimization in LogQuery (#751)
  • optimization: minimize the array accesses in database adapters' GetColumn?() (#760)
  • Adding DB-based session management (and form-state management) (#771)
  • optimization: QueryCursor and InstantiateCursor methods (#759)

Codegen:

  • Migrate Codegen Templates to PHP (#537)
  • Feature request. Compability with php 5.3 (#646)
  • optimization in InstantiateDbRow: avoid repeated string concatenations (#750)
  • List Class names in AJAX drafts panel to show names in alphabetical order (#781)
  • Modify codegen to create a list of icon names used by the JqUi buttons. (#804)

Other:

  • add Last/First day of month function to QDateTime (#645)
  • Make QApplication::GenerateQueryString more generic (#697)
  • optimization: optional type argument for QDateTime (#757)
  • EXPERIMENTAL - optimization: customizable behaviours for QType::Cast (#758)
  • Integrating HTMLPurifier Library into QCubed (#766)
  • Make number of items in form and panel draft lists configurable (#767)
  • Integration of memcached support into QCubed (#770)

QCubed 2.0.2 Stable Release (released December 13, 2010)

  • Performance: inserting JavaScript at the end of HTML document (#142)
  • Control javascripts - improper placement (#636)

Documentation:

  • Better docs for Form State Handlers in configuration.inc.php (#487)
  • DateTime examples broken (#613)

Controls:

  • QPaginator doesn't work (#530)
  • Supporting QListItem CssStyle (#569)
  • QCalendar
    • Support for custom events (#596)
    • AddAction fix (#660)
    • jsDate property fix (#627)
    • Incomplete options list (#663)
  • QDatePicker and QDatePickerDialog: wrong setter for Text property (#662)
  • jQuery control wrappers:
    • Better handling of events (#604)
    • QAutoComplete wrapper - Ajax support (#620) and customizable filters (#665)
    • makeJqOptions creates incomplete list (#641)
    • Refactoring the auto-generator of wrappers (#621)
    • Updated the wrappers to the included newest version of jQuery (#664)
  • QFileAsset:
    • Broken in IE (#616)
    • Accessing uploaded file size (#668)
    • Improvements to default styling (#669)
  • Error when dynamically loading a QPanel inside a QDialogBox (#640)
  • QDataGrid: improved wait icon support (#650)
  • QListItem: unable to get SelectedItems when groups are used (#657)

QQuery:

  • Supporting ORDER BY with a condition (#631)
  • Allow identification of whether ExpandAsArray was used (#598)
  • Read-only accessor for QQLimitInfo properties (#610)

Codegen:

  • Generated FormBase classes should not do CheckRemoteAdmin (#612)

Other:

  • Upgraded to jQuery 1.4.4 and jQuery UI 1.8.6 (#658)
  • SQL Profiling improvements (#608)
  • Plugin manager broken (#659)
  • Ajax calls post back elements that it shouldn't (#648)
  • QAlertAction encoding issue (#614)
  • PDO adapter: transactions not working in some cases (#630)
  • QDateTime parsing of incomplete dates (#666)
  • Includes all fixes from QCubed 1.1.3 and 2.0.1

QCubed 1.1.3 Maintenance Release (released December 13, 2010)

Codegen:

  • Codegen entering forbidden directories (#388)
  • Trailing whitespaces issue (#607)
  • FormBase templates need to generate calls to parent methods (#611)
  • Hard-coded primary key (#623)

QQuery:

  • AdditionalClauses stability issues (#570)

Other:

  • Plugin installer: mkdir problem (#468)
  • FCKEditor-related constant shouldn't be in the core (#609)
  • Includes all fixes from QCubed 1.0.4 and 1.1.2

QCubed 1.0.4 Legacy Maintenance Release (released December 13, 2010)

International support:

  • Portuguese translation file (#561)
  • Confirming Delete action for records was not translated (#560)

Database adapters:

  • InsertID problem with autoincrement bigint field (#653)
  • Un-setting the Connected flag for database adapters when connection is closed (#579)

Controls:

  • QFileAsset:
    • Virtual directory support (#625)
    • Fixed Windows path issues (#500)
  • QListItemStyle GetAttributes issue (#624)

Codegen:

  • Documentation for generated meta controls (#602)
  • Fix codegen for special foreign key labeling (#591)

Other:

  • Graceful handling of session expiration (#423)
  • Supporting new PHP 5.3 error types (#601)
  • CheckRemoteAdmin: better support for local addresses (#605)
  • Error reporting: Index Out Of Range exception was not initialized properly (#504)
  • QEmailServer: EOL issue (#583). Note that QEmailServer is still unstable and we do NOT plan on supporting it in the future.
  • Includes all fixes from QCubed 1.0.3

QCubed 2.0.1 Development Release (released June 30, 2010)

Controls:

  • Added all jQuery UI widgets as QCubed controls (#584)
  • Added jQuery Resizable implementation (#520)
  • QDialogBox
    • Modal property + hidden by default (#553)
    • Width property (#544)
  • Date/Time? controls:
    • DateTime setter for QDateTimeTextBox (#562)
    • dateFormat for QCalendar (#567)
    • Improved QCalendar - new properties (#539)
  • Define the CSS class of control wrappers (#585)
  • Fixed error in panel validation (#539)
  • QCheckbox/QRadiobutton submission issue (#551)
  • Investigate making QControls work without javascript (not implemented yet; started in #37)

Data adapters:

  • New, EXPERIMENTAL database adapters:
    • Oracle adapter (#29)
    • Postgre-PDO adapter (#427)
    • SqLite3-P DO adapter (#547)
    • Informix-PDO adapter (#549, #550)

Javascript / Client Side:

  • Remove unused event.js (#453)
  • Force extra semicolon at end of script (#490)
  • Make example's index.php work without javascript (#528)
  • QRegisterClickPositionAction should use jQuery (#533)
  • EventName refactoring for all events (#577)

Other:

  • Fixed Plugin Manager (#572)
  • Wrong require statement in Config Checker (#571)
  • Includes all fixes from QCubed 2.0.0 and 1.1.2

QCubed 1.1.2 Stable Release (released June 30, 2010)

Code Generator:

  • Many-to-many GUI: using a multiple selection listbox by default (#294)
  • Improve PHPDoc comments for generated metacontrols (#332) and form drafts (#333)
  • FormBase - codegen templates need to include parent::Form_Create (#386)
  • Fixed generated MetaAddEditLinkColumn when dealing with existing query parameters (#472)
  • Cancel button now works in drafts (#469)

QQuery:

  • Supporting aliases for self-joins (#321)
  • QQLimitInfo now has a get method (#380)

Controls:

  • QDataGrid:
    • New column type - QCheckBoxColumn (#364) and AcceptChanges? functionality for it (#582)
    • Cleanup for Filters in Meta Data Grids (#431)
    • Support for restoring custom filters (#478)
    • Access to filter controls (#564)
    • Better control over the reset button in QDataGrid (#566)

Data adapters:

  • SQL Server 2005/2008 adapter improvements (#405)
  • Postgre Adapter: Problem with pg_query (#543)

JavaScript / Client side:

  • Ability to add External JavaScript files (#362)
  • Bug with rendering a double call of qc.pA (#408)

Examples / Documentation:

  • Fixed php short tags in examples header (#435)
  • "View Source" in examples not working on some Windows installs (#541)

Other:

  • Complete rewrite of the localization code - now completely extensible (#359)
  • Improved installation validator:
    • better logic for magic quotes verification (#429)
    • skipping non-existing database connections (#430)
    • formbase_classes_generated is now checked if it's writable (#491)
    • VIRTUAL_DIRECTORY is now honored in config checker and examples (#546)
  • QDateTime:
    • Add full timezone display support (#441)
    • Ability to convert QDateTime's timezone (#442)
  • Removed unneeded globals in QFormBase (#421)
  • Includes all fixes from QCubed 1.1.1 and 1.0.3

QCubed 1.0.3 Legacy Maintenance Release (released June 30, 2010)

Fixing crashes and high-priority blocking issues:

  • Fixed the elusive fatal error on Firefox on a Mac (#134)
  • QType::Cast can't cast some floats to string (#375)
  • QI18n crashes on corrupt cache (#555)
  • QSoapService compatibility with PHP 5.3 (#316)
  • Ajax error messages don't appear in IE / other browsers (#432)

Functionality issues:

  • Move Handle: Specifying which controls to move does not work in chrome (#233)
  • "Nesting level too deep" in the error dump utility (#287)
  • GenerateQueryString doesn't account for arrays in $_GET (#389)
  • Fix PDF MimeType (#471)
  • !QControlProxy example broken in IE (#474)
  • IsRemoteAdminSession not compatible with ipv6 (#475)
  • QButton: support HtmlBefore and HtmlAfter (#554)
  • QEmailServer:
    • real quoted printable support (#558, #575)
    • Strange characters appear when inserting special characters in an email subject (#220)
    • Add blank line support (#439)

Other:

  • Includes all fixes from QCubed 1.0.2

QCubed 2.0.0 Development Release (released March 25, 2010)

New Features

  • Complete rewrite of the AJAX infrastructure on top of jQuery (#434, #444, #447, #532)
    • Remove logger.js (#455)
    • jQuery runs in compatibility mode (#477)
    • Event bindings in .ready (#482)
    • Initial QApplication::ExecuteJavascript? inside .ready (#522)
    • Bring back hidden form elements (#531)

Controls

  • Control rewrites to use jQuery:
    • QCalendarPopup(#448)
    • QDialogBox (#451), and introduce javascript-based open/close (#479)
    • QControlProxy (#473, #481)
    • QImageRollover + new example for it (#461)
    • QTextBoxBase::Select (#458)
    • QControlBase::Focus (#496)
    • Replace listbox javascript with the one from jQuery (#454)
    • Replace QCodo custom JS drag-and-drop with jQuery drag-and-drop (#452), bring back AddControlToMove

(#511)

  • Eliminate QRadioButton::GetJavaScriptAction? (#459)
  • QCheckBoxColumn: fix select all (#467)
  • Datagrid sorting doesn't work (#476)
  • QFileAsset:
    • issues in QPanels (#221)
    • issues with jQuery-based QDialog (#480)

Documentation

  • Fixed scrolling example (#340)

Other

  • New action type: QCssAction (#495)
  • Keypress event handling (#499)
  • Error dialog does not pop up in IE (#322)
  • Includes all fixes from QCubed 1.1.1 release

QCubed 1.1.1 Stable Release (released January 21, 2010)

New Features

  • Global QTimer class for lightweight performance measurement (#390)

Database adapters/Codegen/ORM

  • SqlServer2005/8 Adapter: Support for column comments (#405)
  • Use of database column comments for code-generated ORM class properties (#415)

Controls

  • QDataGrid:
    • QDataGrid::SetFilters() failing for TextFilters (#399)
    • QDataGrid filter doesn't render on reverse QQReverseReferenceNode (#416)
  • Supporting images on QButtons through HTML <button> tag (#403)

Plugin Ecosystem

  • Issues during plugin installations with nested folders (#407)
  • Plugins - Make examples/ and includes/ components optional (#397)
  • Update QArchive to access plugin archive extraction errors (#411)

Documentation

  • PHPDoc-style documentation for all QControls for better code completion (#207)

Design

  • QCubed logo not shown in the start_page.php footer (#396)
  • Slight visual improvements for plugin manager (#409)
  • Save/Cancel? buttons don't look good on form drafts (#410)

Other

  • Upgrade to latest jQuery (1.4) and latest jQuery UI (#428)
  • PHP 5.3 Compat:
    • function set_magic_quotes_runtime() deprecated (#376)
    • Unit testing framework (Simpletest) throws warnings (#385)
  • Minor typo in QType (#374)
  • QSoapService produces an invalid output because there's an extra tab output somewhere (#370)
  • QCache::SaveData() directory creation code to be replaced with recursive mkdir (#387)
  • Includes all fixes from QCubed 1.1 and 1.0.2 releases

QCubed 1.0.2 Legacy Maintenance Release (released January 21, 2010)

Codegen/ORM/Database adapters

  • Many-to-many references were broken (#365)
  • QMySqliDatabaseField broken for custom queries (#420)

Controls

  • Paginated controls: Validate Page number in QPaginator (#117)
  • Delete button translation broken (#418)
  • Wrong Rich Text Format mime type in QMimeType (#426)

Other

  • PHP 5.3 compatibility:
    • QSoapService (#316)
    • SQL Server database adapters - PHP 5.3 / NotEqual? Fix (#401)
    • toString() bug in QDataGridBase (#369)
    • QDateTime:
      • Better backward compatibility with QCodo and earlier releases: QDateTime toString() workaround (#384

and #290)

  • Add() and setTime() are incompatible with base class (#401)
  • QDateTime legacy did not have a qFormat() method (#400)
  • QType::Cast can't cast some floats to string (#375)
  • Respecting the setting for level of error reporting (#383)
  • Includes all fixes from QCubed 1.0.1 release

QCubed 1.1.0 Development Release (released November 10, 2009)

Project-wide Infrastructure:

  • Integrate SimpleTest unit test framework (#94)
  • Light integration of jQuery: easy to include jQuery, but not mandatory for your QForms (#183, #297)
  • New directory structure that ensures security and provides for ease of future upgrades (#230, #262, #275,

#281)

  • Plugin manager: support for installing and uninstalling QCubed extensions (#272, #274, #291, #292, #305)
  • Configuration checker: a tool that runs when you first install QCubed and verifies the prerequisites, also

helping you configure QCubed settings (#296)

Codegen and DB Adapters:

  • Support for PHP-based codegen templates (#6)
  • Support for multiple type table suffixes (#255)
  • New JSON extension for codegen templates (#284)
  • Time columns used to display as dates by default (#158)
  • ORM object initialization with default values as specified in the DB fields (#317)
  • MySQL Adapter: using database field comments as code comment annotations (#238)
  • SQL Server DB Adapter
    • New adapter for SQL Server 2005/2008 (#327)
    • Possibility to use a different date format (#288)
  • MetaControls check for unique constraints on save (#319)
  • Codegen: small additions to QTable - GetColumnByName, HasColumn, LookupColumnPropertyName (#348)
  • Codegen: modularization of code generated file permissions (#324)

QForms Infrastructure:

  • Form Base is back and it works with MetaControls (#33)
  • Attributes of the <form> tag can be overridden (#7)
  • Use spl_autoload_register instead of autoload (#36)
  • Natively supporting servers with Magic Quotes turned on (#240)
  • AutoRenderWithNameChildren property for QPanel (#286)

Controls:

  • Paginated controls:
    • Integrated QFilteredDatagrid (#34)
    • Add WaitIcon suppport to QPaginators (#23)
    • Supporting row actions for QDataGrid (#101) and an example for it (#210)
    • Allow conditions and clauses in MetaDataGrid (#169)
    • Display bools in datagrids correctly (#295)
  • QFileAsset:
    • New $strRandomFileName (#248)
    • New optional limits on upload file size (#304)
  • New control: dynamic QTreeNav (#30)
  • Integrated jQuery visual effects (#183)
  • Per-control support for custom CSS stylesheets (#256)
  • Fire QChangeEvent on QDateTimeTextBox for Qcalendar date change (#329)
  • Allowing JavaScript actions on QHtml controls (#252)

Documentation:

  • New Example for QueryArrayCached (#132)
  • Documentation for qcodo_query_classes.tpl (#189)
  • QListControl, QListBoxBase, QListBox, QListItem documentation (#188, #193, #194, #196, #197)
  • QControl documentation (#195)
  • Examples missing tpl files (#289)
  • Don't allow the encrypt example to crash when no encryption libraries are installed (#298)

Misc:

  • Support translations to languages other than the default (#325)
  • QCache:
    • Add deletion support to QCache (#143)
    • QCache: support for hierarchy of namespaces (#201)
  • QType bug when casting to double or integer (#159)
  • Integrate QEmailStringAttachment into core (#264)
  • File Form State Handler: paths hard-coded in core distro files (#347)
  • Removed indexes that are not used in innodb example db (#165)
  • QCodo references in the code/folders should be replaced by QCubed (#63)
  • Includes all fixes from QCubed 1.0.1 release

QCubed 1.0.1 Stable (released October 19, 2009)

Codegen:

  • QuerySingle throws error instead of null on empty result set (#261)
  • QuerySingle sometimes returned first resultset record, sometimes - last (#234)
  • Form draft generator - translation support for edit links (#329)
  • Appropriately supporting time field in MySQL (#282)

Controls:

  • QDialogBox does not show correctly in IE8 Beta2 and Opera 9.22 (#131)

Documentation:

  • New QControlBase documentation (#207)
  • Typo on datagrid sorting example (#279)

Security:

  • Default index.php page should use CheckRemoteAdmin (#241)
  • Security: HTML escaping of ToolTip (#302)

Misc:

  • Includes all fixes from QCubed 1.0.0 release
  • Full compatibility with PHP 5.3 (#290)
  • QDateTimeSpan without GPL licence (#266)
  • QEmailServer, invalid Content-Length (#277)

QCubed 1.0 Stable (released April 21, 2009)

Controls:

  • QImageControl: cache did not work at all (#181)
  • QDialog box does not show up correctly in IE8 and Opera 9 (#131)
  • QFileAsset:
    • GetWebURL broken on Windows (#176)
    • Invalid caching of uploaded files (#216)
  • QFileAssetDialog: does not work inside a QForm (#182)
  • QDateTimePicker:
    • ability to translate month names (#177)
    • actual translation into Spanish (#178)
    • increasing default MaximumYear for QDateTimePicker (#180) and QCalendar/QCalendarPopup (#184)
  • Modal dialog box positioning is incorrect when rendered in an absolutely positioned QPanel
  • Drag-and-drop JavaScript errors (#218)

Codegen

  • QueryArrayCached does not work (#200)
  • Load and LoadBy generated functions now accept $objOptionalClauses param (#167)
  • Meta controls: syntax error in many-to-many generated controls around $strGlue (#198)
  • Dashes in column names are now explicitly disallowed (#175)
  • Codegen settings XML file: supporting both "qcodo" and "qcubed" as the format string (#219)

Examples / Documentation

  • Examples table relationship diagram (ERD) is outdated (#133)
  • Purged obsolete "migrating from Beta 2" example (#214)

Other

  • QEmailServer: Character encoding for plain-text messages (#217)
  • Correctly exiting after errors (#174)
  • Includes all fixes from QCubed 1.0 RC2

QCubed 1.0 RC2 (released February 16, 2009)

Examples / Documentation

  • New examples for QQuery:
    • subqueries with SubSql (#108)
    • conditional joins (#130)
    • multi-level ExpandAsArray (#164)
  • New example: persistent controls (#109)
  • New example: QRegex and QLexer (#110)
  • Update example on _type tables to explain support for more than 2 columns (#95)
  • Fixing explanation error in Reverse Relationship example (#163)

Database adapters, ORM, and QQuery

  • QQuery:
    • Multiple ExpandAsArray clauses cause duplicates (#151)
    • Validation for the number of parameters for LoadAll (#153)
  • Postgre database adapter: better handling of timestamps (#171)
  • Roundtripping "large" floats (doubles) and BigInts (#25)
  • Codegen for date/time fields:
    • labels were code-generated incorrectly on meta controls (#15)
    • "QDateTime to string conversion" error (#22)

QControls

  • QListBox: deselecting items through SelectedIndex=-1 did not work (#82)
  • QFileAsset: upload-delete-upload again is broken (#88)
  • QDialogBox:
    • QFileAsset does not work inside QDialogBox (#99)
    • QCalendar positioning is wrong inside a QDialogBox (#125)
    • QDialogBox does not show correctly in IE8 Beta2 and Opera 9.22 (#131)
    • Incorrect CSS style used for hiding dialog boxes (#135)
  • Paginated controls:
    • QDatagrid error when using base <html> tag (#124)
    • PHP Strict compliance for GetColumnAlias() declaration (#136)
    • QPaginator: validating page numbers (#117)
  • QPanel: fixed drag-and-drop for major browsers + "moveable" on-hover handles (#74)
  • Packed Javascript file _qc_packed.js was corrupt (#24)
  • Updated browser detection logic (#60)

Security

  • Cross-site scripting: Calendar (#62)
  • Cross-site scripting: Error page (#65)
  • PHP version headers were always sent (#66)
  • Cross-site scripting in QTextBoxBase was cast incorrectly (#104)

QEmailServer

  • Sending emails to addresses that contain allowed special characters (#27)
  • TestMode does not work (#87)

Other

  • Includes all fixes from QCubed 1.0 RC1

QCubed 1.0 RC1 (released November 2008)

QControls

  • QDataGrid:
    • Adding $_OWNER to datagrid column HTML parsing (#46)
    • Allowing other controls to cause the QForm to be rendered (specifically useful for Download as CSV links

in QDataGrids) (#46)

  • QIntegerTextBox: Supplying friendly errors for when text is entered (#46)
  • QCalendarPopup returns incorect dates (#48)
  • QImageRollover should not have direct calls to htmlentities (#53)
  • QTreeNav:
    • add WaitIcon support (#57)
    • allowing for separate Hover and Select CSS classes (#46)
  • Javascript: wrong use of Array's as associative arrays (#50)

Database adapters, ORM, and QQuery

  • MySQL adapter: Prevent crashes if columns are unusual lengths (#46)
  • MS SQL adapter:
    • Allow large column types (#46)
    • Replaced @@IDENTITY with SCOPE_IDENTITY() (#56)
  • Codegen:
    • many-to-many reference template typo (#51 and #70)
    • supporting new reserved words in PHP 5.3 (#52)
    • QDateTimePicker meta label generation is incorrect (#49)
    • GetColumnAlias() issue with PHP versions before 5.2 (#58)

Security

  • Preventing PathInfo injection attacks (#54)

QI18n (internationalization)

  • Supporting empty translation strings (#47)

If you're interested in a complete list of bugs that were considered for each of the releases, take a look

this Trac Report.