GGFControlLookupDialog: Now listbox has variable width
GGFControlErrorDialog: Bugfix in function adminIsLoggedon.
GGFControls: GGFControlPane for better compatibility now renders HTML doctype for frames. New controls GGFTabbedPane and GGFTabPane provided. These allow to implement tabbed forms now.
GGFControlWindow: New function selectedTab to identify the active tab in a tabbed pane. New internal functions eventOpenTab and setOpenTab are called by the framework when the user clicks on a tab label. processFormEvent now handles switching between tabPanes.
GGFFormats.css: New classes for the GGFTabbedPane control.
GGF.php, GGFSetup.php: new setup variable http_authentication to support login via HTTP authentication
GGFauthentication.php: now describes how to setup Apache for digest authentication and works out of the box
GGFControlMainWindow.php: eventClose now handles HTTP authentication
GGFDemoMainWindow: now shows name of user logged in (via HTTP authentication)
GGF.php, GGFContext, GGFControlBrowserWindow, GGFControlDialog, GGFControls, GGFControlWindow, GGFERModel: Handle unset indices and variables according to new PHP 5.4 rues
GGFControlAboutDialog: Layout updated.
GGFControlBrowserWindow: application name now correctly in log message. Deprecated function split replaced by explode
GGFControlErrorDialog: initWindow regenerated with RD
GGFControlLookupDialog: initWindow regenerated with RD
GGFControlMessageBox: initWindow regenerated with RD
GGFControls: Changed Errormessage for input-pattern for passwords. Will not show password value. Instance variable extraHTML, validator now initialized by “”. Signature of processRequest standardized. Hndling disabled controls improved. Application name now correctly in log message. Bug in rendering GGFMenus fixed. GGFHMenu now supports validators and extra HTML.
GGFControlUpdateDialog: Deprecated function split replaced by explode.
GGFDemoMainWindow.php: Improved error handling.
GGFSetup: A new global variable $applicationAdmin has been introduced. This can be used to identify a user with special rights. Per default set error reporting to E_ALL ^ (E_NOTICE | E_STRICT) . This is required to suppress new notices from PHP 5.4 where the framework has not yet been updated to most recent recommendations.
index.php: new script that opens a demo main window.
GGFDemoMainWindow.php: new window class showing a hello world style app with hints for working with the GGF framework.
GGFControlBrowserWindow: Support to specify dialog classes to be used for update, insert and copy actions from opener of the window. Support to specify from the opener of the window that an update dialog should be opened after insert of a new object. Support to set the name of the entity type class from opener of the window. (In earlier versions these specifications must be done in the constructor – and a derived class was needed.)
GGFControls: Enhancement for ReinHTML Dialog Designer.
GGFFormats: bugfix in GGFMenu and GGFMenuItem, GGFMultlineEntry text size set to 90% (like in normal entry fields)
GGFContext: for security reasons, context ID’s are now selected by a random number generator.
GGFControlAboutDialog: Changes in dialog text. Link to GGF updated.
GGFControlDialog: Characters _ and . added to inputPattern 4
GGFEntryfields: Handling of control styles fixed
GGFPushbutton: Handling of demo mode fixed
GGFRadiogroup: Processing of requests fixed. Support of control styles added. Setting of default values fixed. Readonly and disabling fixed.
GGFCheckboxGroup: Support for control styles added.
GGFControlpane: Closing layout tables fixed.
GGFFieldsetPane: Indentation of HTML code fixed.
GGFFormpane: Closing layout tables fixed.
GGFControlPane: HTML code for system tray fixed.
This is a major rework of the GGF package.
The directory structure has been reworked. Startup scripts, application specific code and framework code is now separated.
· The GGF classes now are supposed to be in a /GGF subdirectory of the application. This subdirectory should be hidden for internet users (using a .htaccess file)
· The icons used by GGF classes are now in the GGFIcons subdirectory. Unused icons have been removed.
· Application classes are supposed to be in an application subdirectory and therefore separated from framework classes
You can find a detailed description of the new architecture and directory structure in the new “contacts” sample.
GGFWindow: Deprecated GGFWindow and GGFDialog classes have been removed. Use GGFControlWindow and it’s descendants instead.
Other classes that used them like GGFMessageBox have been changed to inherit from GGFControlWindow.
GGFControls: There are new interfaces to support code generation by the ReinHTML Dialog Designer (http://www.reinhtml.eu ). You now can use the ReinHTML Dialog Designer to interactively create dialog and window layouts and generate GGF classes that implement them.
New menu classes GGFHMenu and GGFHMItem implement a Windows-like horizontal, drop-down and fly-out menus.
A lot of work has been invested to make GGF applications secure and fit for the Internet.
· Entry fields now provide a set of server-side input checks that prevent entering invalid data.
· GGF provides a built-in firewall that prevents sending invalid requests to the application. A GGF application does accept only those requests that it will accept from a window (valid button clicks or hyperlinks).
· Only startup-scripts are now in the root directory of a GGF application. All other PHP code is located in separate directories and can be made inaccessible from the web. See description of directory structure in the new “contacts” sample.
A new description of the architecture has been developed.
What's new in brief: The query-concept introduced with GGF 3.3 has been enhanced.
Now its possible to retrieve a direct access link to a query. If a GGFControlBrowserWindow was opened from a query or
the current selections have been saved as a query, the little world icon in the system tray is the source for such
a direct access link. Note: direct access links on queries work only, if the modelobject of the browser window
is defined in the <appname>Model class.
ListAreas display datasets larger than largeListTreshold (see GGFSetup) per page (enabling
page-wise scrolling). The number of lines in such a page was fixed (see GGFSetup).
Now GGFControlBrowserWindows can adjust the number of lines to the actual window-size,
improve the appearance a bit.
GGF.sql : now inserts query for rooms with the correct browser class.
GGFControlBrowserWindow: introduced new instance variables $lineHeight and $pageOffset. These allow to
New method resetQuery() is used to remove the query object from the model, if filter,
sorter or columnselection are changed.
Fixed bug in createStandardQuery() now the correct name of the browser class is used.
Enhanced mothod createPagesize(): compute $this->myModel['_pagesize'] from cookie, if supported.
Enhanced method createSELECT($noLimit=FALSE): in the same way
Enhanced method initModel(): to enable direct accesslinks, providing the query-ID as pkvalue
(sorry for the many print_r's, but that was rather tricky
method initWindow(): changed menu enabeling rules. If activated via direct access link (user not logged on)
select Query is possible.
new method directAccessURL()
Query object is reset in eventSelectColumnsReturn, eventUpdateSorterReturn, eventUpdateFilterReturn, eventSortColumn
eventSelectQueryReturn: now remebers query name in separate model object, so it is available, even is query object is reset.
eventSaveQuery: uses this
donotDelete: checks if user logged on
GGFListArea: method render adds a javascrip that sets a cookie with the pixelheight of the window.
See GGFControlBrowserWindow, createPagesize()
GGFControlWindow: constructor now takes care for direct access links to queries.
systemTray: now takes care for new direct access links.
GGFModelGeneratorDialog: improved method template donotDelete
GGFControlUpdateDialog: createSELECT now can create statements with LOCK IN SHARE MODE to be used in transactions.
This improves data security for longer transactions, relying on several reads.
method eventOK uses this new feature as a sample. Not really necessary here.
GGFQuerySelectDialog: initWindow now checks if user is logged on and disallows "manage Queries", if not
GGFRoomReservationDialog: initWindow now disables modifying buttons if user not logged on
GGFERFilterClauseDialog: implemented in eventSelectValue, eventSelectValueReturn a simple solution to select from more than 500 elements.
moved old classes into archive "deprecated_classes.zip".
What's new in brief: There are three major achievements. GGF now supports a simple,
yet powerful concept for storing and retrieving queries:
These are Objects that encapsulate
a filter (WHERE...),
a column-selector (SELECT...) and
a sorter (ORDER BY ...)for a browser window.
The model generator now lets you create database table editors in minutes. As soon as
you have a database table defined, you can generate all the code needed to
- update and
Third is the new enhanced demo application, which now has some meaningful use case:
managing the table reservations in a restaurant. It also contains an interface to the
new query handling and the model generator.
GGF - new Function "MessagePrompter"
GGFControlBrowserWindow - new method createStandardQuery, initModel: interprets queries supplied as model-parameter
new menu items Queries, save Query, eventInsertContinue: now refreshes the model
GGFControlMainWindow - new menu entries for "Queries", Save "Queries", "Generate Code", "Test generated Code"
"Queries": allows to select a predefined query and apply its filter etc. on the Window
"Save "Queries": saves current filtering etc. as a new query definition
"Generate Code": starts the model generator (see below)
"Test generated Code" : allows to open a previously generated window
new methods controlID, editRender : for future use
GGFListArea: supporting new view callback: See GGFQueryBrowserWindow for an example usage
new method: setViewCallback
GGFPushbutton: new method setCallback allows to modify the callback function after instantiating the button
GGFImagePushbutton: new method setImageURL allows to modify the callback function after instantiating the button
GGFControlPane: new method clearControls allows to remove all controls from the pane. This is useful to restrict
inheritance of layout for window classes. For an example see GGFQuerySaveDialog. The render method has an interface
to the planned method editRender.
GGFControlUpdateDialog: This was more or less a sample class in GGF 3.2. Now it works better as a generic base class
for all kinds of update dialogs. Methods createUPDATE, createSELECT eventOK now work for any table with a single primary key.
GGFNumAttribute: Method asSQL now returns 0 instead of an empty string in case the attribute is not set.
GGFEntityType: New method createUpdate generates an update statement for a row.
GGFERModel: Method intialize now defines the GGFQuery standard entity type. Queries are object that define filters,
columnselections and sorters for browser windows. They can be stored in the database and are used to setup
table browsers. See GGFControlMainWindow and GGFControlBrowserWindow.
Made method "add" public - thus allowing to add new Entitytypes "on the fly". See for instance GGFRoomBrowserWindow.
GGFSetup: New global EditMode reserved for future use. Must be set to 0.
GGFMessagePrompter: implements a message prompter dialog (see GGF.php)
GGFModelGeneratorDialog: This is the first GGF tool. It can be opened via the GGFDemo main window and allows to
generate browser, update dialog and insert dialog classes for MySQL tables. Note this works only with MySQL 5.x
because it accesses the new metadata structures of MySQL. The dialog allows to select host, database and table
and then generates GGF sourcecode.
GGFQuery: New class to encapsulate a record of the GGFQuery table. It holds the elements of a query. See GGFERModel
GGFQueryBrowserDialog: allows to view all stored queries.
GGFQuerySaveDialog: allows to save the current settings of a GGFControlBrowserWindow as a query.
GGFQuerySelectDialog: allows to select a query and set its filter etc. as current setting in a GGFControlBrowser window.
GGFQueryUpdateDialog: allows to update the name of a query.
GGFRoomBrowserWindow: This is the entry into a new section of the GGFDemo application. It shows a sample
that allows to reserve tables in a restaurant. Rooms can be defined to have several dining tables and
each table can be reserved or un-reserved.
GGFRoomReservationDialog: This shows a graphical representation of the room with its tables and their
reservation status. Clicking on a table reserves or unreserves it.
GGFRoomUpdateDialog: This allows to update a record of the demo table room.
GGFatableBrowserWindow: new demo class allows to browse the tables of a dining-room
GGFatableUpdateDialog: new demo class allows to edit the definition of a dining-table.
New directory GGFShapes: contains gif files used by the reservation demo.
HelloWorld: Now here it is - the inevitable "Hello World!"-example. It does not make too much sense,
but people keep asking for it.
HelloWorldMainWindoe: The only class required for the Hello World-example.
GGF.sql: creates a new enhanced GGF database with data for the demo application. The
new standard table GGFQuery is defined and demo tables room and atable.
This release offers a new “sort by column” option for GGFListArea controls and fixes some minor bugs. New is also a new document describing the quick installation of a GGF execution/development environment with XAMPP and the getting started document.
GGFLookupDialog: comment updated
GGFERFilterClauseDialog: fixed minor bugs with select/preselection
GGFERFilterDialog: fixed bug with OR clause Operator for subfilters
GGFSqlFilter: new method setClauseOperator($andor)
Version 3.2 - 2006-01-19
There is a new Quick Installation Guide (160 KB zipped pdf)
GGF.php errorstack object is created now before the database object is created. This results in more accurate error-messages when the database is not configured correctly in GGFSetup.php, new function mailErrorHandler()
GGFControlWindow: mode errorStack global in notesType(), replaced tray icons with gif files (better representation in Mozilla), eventFormProcessed() does not issue an error if button could not be identified
GGFControlBrowserWindow: new accessor order() delivers the sorter object, implements a sort callback method for GGFListArea, columns can now be sorted with a click on the headline. Sort criteria are numbered by their relevance.
GGFControls: added parameter to prototype setExtraHTML($html)
GGFControls/GGFListarea now allows to specify sort callback
NOTE: this is an interface change in the constructor
now now allows to click on column headers for sorting
sort indicators are shown in headline, if window has a sorter
GGFGenericControl: add setValue($html)
GGFSelectionControl: accessor for key added
GGFCheckBox, GGFCheckboxGroup: process request now always returns an array (empty array if nothing checked)
New icon files like GGF1asc.gif for sort indicators and system tray symbols
There is a new getting started document
GGF.sql: now contains also the SQL for the todo tutorial
GGFCheckboxGroup: bug fixed in selection handling, now optionally horizontal and without groupBox around
GGFControlBrowserWindow: function PKValue() adapted to ERModel concept
GGFControlUpdateDialog: bug fixed in display of last change field
GGFERAttribute: now has interface to modify the external name.
GGFERFilter: count() enhanced to support complex entity types
GGFERFilterDialog: bugfix: checks now properly if clause is selected
GGFERFilterClauseDialog: now inherits from GGFERSqlFilterClauseDialog, sorts names of columns per name
GGFERModel: Entitytype now supports mapping to two or more tables (complex types). A new instancevariable "joinfilter" was introduced that allows defining the join conditions for the tables.
The function createSelect() has been greatly enhanced to support joinfilters.
A new function createExpandedType() creates a so called expanded entitytype.
GGFDemoModel: now defines an entitytype and two relationshiptypes for the todo tutorial
GGFRadiobuttonGroup: now optionally horizontal and without groupBox around
TODOMainWindow: now works with an expanded entity type
Fixed bugs in GGFEntityType->primaryKey() and GGFSelectionControl->getSelectionIndex()
GGFCheckbox, GGFRadioGroup: now render a label, therefore they can be selected also by selecting the text
GGFControl: added accessors for tip texts
GGFEntryField: will be shown with grey background if set to read only
GGFListArea: now supports a copy icon. Important: interface of constructor changed, performance of render function improved
GGFListbox, Combobox: performance of render function improved
GGFStaticHyperlinkfield: setURL is now public
A new generated class
is now available.
GGFControlBrowserWindow: Bug fixed in eventExport, HTML was added to data. Now creates an entry into history table, when an entry is deleted. Window now supresses the scroll buttons if row-set is smaller than $largeListTreshold;
GGFControlDialog: new method modelObjectPrimaryKeyValuesString (used by GGFNotes) New instance variable ETypeName. May be set to the name of the EnitityType object of the main model-object of the dialog. If ETypeName is blank (which is the default), you do not need an EntityType class. System tray is now right of buttons. Systemtray now has three color codes for notes. New method: readControls now is called automatically from the window open sequence. No need to call read controls in eventXXX functions.
GGFControlWindow: new instance variable ERModel. New function modelObjectPrimaryKeyValuesString (empty prototype). New identification of object notes. System tray now displays notes icon in red, if object notes are available and in blue if window notes are available.
processCallbacks now calls readControls automatically. No need to call readControls in eventXXX functions. open now calls fillcontrols before processRequest to ensure proper initialisation of controls in special cases.
GGFControlBrowserWindow, GGFSqlFilterDialog, GGFSqlFilter, GGFSqlFilterClauseDialog, GGFSqlFilterClause: Implemented concept of database filters (abstraction of a WHERE clause) and user interface for composing arbitrary complex filters.
GGFControlWindow: Support for direct access links implemented. Direct access links allow opening a window of an application directly without navigating via its main window. These may be used for instance to mail a link to a single database row. The Systemtray (see below) offers such a link (which can be copied with the web-browser’s “copy shortcut” menu), if the dialog implements the function directAccessURL.