Change Log


GGF 4.5.1 – 2012-10-08
GGFControls: GGFFormpane renders better in demo mode, GGFCheckboxGroup bug fixed in setting checks

GGFControlLookupDialog: Now listbox has variable width



GGF 4.5 – 2012-09-29


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 4.4 – 2012-08-29

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 4.3.1 – 2012-08-03


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.


GGF 4.3 – 2012-05-30


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.


GGF 4.2 – 2012-05-28


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.

GGF 4.1 – 2012-05-09


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.




GGF 4.0 – 2012-04-18


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 ( ). 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.


GGF 3.5.1 - 2006-08-05
What's new in brief: This is a bug fix release and solves a problem with the definition of the GGFQuery table on Linux versions of MySQL.
GGF.sql: The GGFQuery table columns "columns" and "checksum" have been renamed. You must re-create this table,
   if you already have a GGF database.
GGFERModel,GGFQuery, GGFQuerySave and UpdateWindow, GGFControlUpdateDialog: changes to
   reflect renaming the query table columns.


GGF 3.5 - 2006-07-20
What's new in brief: The query-concept again has been enhanced.
It is now possible to limit column sizes in GGFListareas. This is also stored in Queries,
GGF.sql: The GGFQuery table has got an additional column "columnsize". If you already have queries stored. You can
   enhance your table with "ALTER TABLE ggfquery ADD columnsize text;". For creating a new database just use GGF.sql
   as described in the documentation.
GGFControlBrowserWindow: added support for columnsizes and the enhance query object.
   Fixed a minor bug in directAccessURL(). Now uses the new GGFControlColumsDialog and the GGFControlSortDialog.
   If opened via a query, the prompt will show the query name and a direct access link on
   the query is offered in the system tray.
GGFControls: Controls can be marked as mandatory (for input checks). GGFListAreas now can
   limit the columnsizes. There is a new global variable in GGFSetup that sets the default
   maximum column size to 132 characters.
GGFControlWindow: fixed a small bug in creation of Systemtray (with direct access URL)
GGFERModel: enhancd GGFQuery object definition.
GGFQuery: now knows column sizes.
GGFQuerySaveDialog: Layout enhancements. Better default values.
GGFControlColumnsDialog: replaces deprecated GGFColumnsDialog. Now supports setting of column
   sizes and multiple selections for some actions.
GGFControlSortDialog: replaces deprecated GGFSortDialog. Now supports multiple selections for some actions.
Version 3.4 - 2006-07-08


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,

if Javascript and cookies are supported. This works after the second re-display (scrolling

or other event). Note that is not a strategy-change in GGF. Javascript is still not necessary, but it can

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

   compute how many lines fit on a page (if Javascript and Cookies are supported),

   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 "".


Version 3.3 - 2006-05-16


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

- browse

- insert

- update and

- delete

database records.

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.


Version 3.2.1 - 2006-01-29


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


Version 3.1.1


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


Version 3.1

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 documentation

 is now available.


Version 3.0

The new file GGF.SQL now can create all database tables needed by GGF and the GGFDemo application. The other SQL files have been removed

GGF.php: instantiates the applications ER-Model. See the description of ER model concepts.

GGFAllControlsDemo: now shows usage of new GGFFieldsetPane (has a groupbox for entry-fields)

GGFCheckbox: new control to model a single checkbox without an enclosing groupbox

GGFControlDialog, GGFControlWindow, GGFNotesDialog: HTML file to be displayed on closing the window is now selected by the global variable $goodbyefile

GGFControlUpdateDialog: now writes entries into history table on update

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.

GGFControlUpdateDialog: constructor now initializes instance variable name ETypeName. This allows for object specific notes in the system tray.

GGFControlMainWindow: system tray is now at the right of the status area

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.

System tray help now uses the &appnameHelp.htm file (see GGFDemoHelp.htm below)

GGFDatabase: new function escape_string. Should be used to avoid SQL intrusion. Will be used to filter dialogs in future.

Note: execSQL now delivers rows with column name index only, in previous versions a numerical index was also produced.

execSQL now writes the SQL statement as a log into history table, if a table name is given. Table GGFHistory now contains also the IP address of the user (new column added, see GGF.sql).

GGFDemoHelp.htm: sample for your application's help file has been enhanced (especially help for the system tray was added)

GGFDemoModel: sample for an ER-Model description

GGFERFilter: new class.  Use this instead of the old GGFSqlFilter.

GGFERFilterDialog: new class.  Use this instead of the old GGFSqlFilterDialog.

GGFERFilterClauseDialog: new class. Use this instead of the old GGFSqlFilterClauseDialog.

GGFFieldsetPane: new class do create a groupbox

GGFListarea: now knows external column names that are by default equal to database column names but can be overridden.

GGFGoodBye.php: now contains a bit javascript, but still works in the usual way, if javascript is not enabled.

GGFSortDialog, GGFColumnsDialog: new functions add all and remove all

PHP.ini: magic quotes were set to off


Version 2.3.2

GGFControlWindow: Slightly improved rendering of system tray.

GGFSqlFilterDialog: Now opens the correct dialog when editing complex subfilters

GGFControlBrowserWindow: Now uses the correct SELECT statement for refreshing the model., also in page mode.

GGFControlMainWindow: Now can display the about dialog also on Unix systems (we had a lowercase/uppercase problem)


Version 2.3.1

GGFControlWindow: Improved rendering of system tray. Added e-mail feedback to system tray

GGFControlNotesDialog: still preview, but can already render.

GGFSetup: Added global variable for webmaster e-mail


Version 2.3

GGFControlBrowserWindow, GGFSqlFilterDialog, GGFSqlFilter, GGFSqlFilterClauseDialog, GGFSqlFilterClause: Implemented concept of database filters (abstraction of a WHERE clause) and user interface for composing arbitrary complex filters.

GGFControlBrowser window: Fixed bug in page scrolling. Also the first row is now displayed correctly.

GGFSelectionControl (listbox, radio etc.): fixed bug/interface in request processing. Selection result is now in the “selections” instance variable.

GGFDatabase, GGFControlUpdateDialog: Simple interface for a database history implemented. See also GGFHistoryTable.sql.

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.

GGFControlWindow, GGFMenuPane: prepared for recursive, multi-level menus (not yet fully implemented)

GGFSelectionControl (listbox, radio etc.): now can return the selection in form as an array of indices, keys and value-strings,

GGFSelectionControl (listbox, radio etc.): added interface to set default selections after instantiation. (for instance in the fillControls function)

GGFControlPane: Support for cell alignment in blind tables.

GGFControlDialog: Interface for plausibility-check implemented. See usage in GGFSqlFilterDialog.

GGFControlDialog, GGFControlMainWindow, GGFControlBrowserWindow: Support for a Systemtray added with some standard functionality:

Context-sensitive help

Direct access links

Data export (creation of *.csv files)


GGFStaticHyperlinkfield now shows a tip text.


Version 2.2

New demo GGFAllControlsDemo.php shows usage of all control classes (see screenshot)

Bug fixed in GGF.php (errorhandling when database access parameters are wrong)

Removed unneeded files from download archive.


Version 2.1

Some minor bugs fixed.

Tutorial completed.

Demo installed.


Version 2.0


New control classes (GUI widgets) minimize need to deal with HTML for application developers.

New window and dialog classes that use the control classes.

New tutorial (see documentation.htm)


Version 1.1


New  table browser class GGFFramedBrowserWindow

New GGFSortDialog allows to edit “ORDER BY” clauses / GGFSqlSorter objects

New class GGFSqlFilter

New GGFLookupDialog allows to select a value from a predefined list

New convenient functions messagebox, lookup to launch these dialogs

New trace level, threshold in GGFSetup

New support for frames in GGFWindow, GGFContext. (See GGFFramedBrowserWindow


Updated GGFAboutDialog, GGFInsertDialog nicer (?) layout

Browser windows now check size of record-set to be displayed, scrolling only needed if threshold exceeded (see GGFsetup).