Change Log
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,
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 "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
- 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
GGFControl:
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
application
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
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.
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
GGFControlUpdateDialog: now writes
entries into history table on update
GGFControlMainWindow: system tray is
now at the right of the status area
System tray help now uses the &appnameHelp.htm file (see
GGFDemoHelp.htm below)
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
GGFSortDialog, GGFColumnsDialog:
new functions add all and remove all
PHP.ini: magic quotes were set to off
GGFControlWindow: Slightly
improved rendering of system tray.
GGFSqlFilterDialog: Now opens the
correct dialog when editing complex subfilters
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
GGFControlWindow, GGFMenuPane:
prepared for recursive, multi-level menus (not yet fully implemented)
GGFControlPane: Support for cell alignment in blind
tables.
GGFControlDialog: Interface for
plausibility-check implemented. See usage in GGFSqlFilterDialog.
Data export (creation of *.csv files)
GGFStaticHyperlinkfield now shows a tip
text.
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.
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)
New table browser class GGFFramedBrowserWindow
New GGFSortDialog allows to
edit “ORDER BY” clauses / GGFSqlSorter objects
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