GEneric Medical Survey Tracker
GemsTracker is a library that extends the Zend Framework libraries, but also supplies a standard new project template.
GemsTracker supplies a default new_project installation that allows you to quickly setup a standard project. The package contains these directories:
applicationProject specific code and settings
classesProject specific classes
configsProject specific Zend Framework, GemsTracker and database configuration files
controllers(Optional) Project specific Zend FW controllers
events(Optional) Project specific track engine events
languages(Optional) Overrule the default translations
layouts(Optional) Project specific Zend FW layouts
snippets(Optional) Project specific code that generates Html
views(Optional) Project specific Zend FW views
htdocsThe webroot of the project
gemsDefault GemsTracker css, images and jQuery
libraryThe location for the GemsTracker library and optionally the Zend FrameWork?
GemsThe GemsTracker library directory, link to a stable release or to our development branch
varA writable directory for files that can change after installation
cacheCache and sessions
settingsFile locks and other installation dependent settings
uploadsPdf's ant other uploadable files
GemsTracker is implemented as a separate library. You should either link to a stable tagged release and not change the code, or if you are involved in the project you can develop against the GemsTracker trunk.
The directory structure is based on the standard Zend Framework project directory structure with some extensions.
classesThe main project code
configsDatabase definitions for project types
controllersZend FW Controllers stubs that can be overruled by a project
languagesDefault translations (currently Dutch and English)
layoutsGemsTracker default Zend FW layouts
snippetsCode that generates reuseable Html fragments / snippets
viewsGemsTracker default Zend FW views (but very empty for a Zend project)
GemsTracker builds on the Zend Framework but does not follow in slavishly. Some changes are caused by the requirement that standard code can be overruled at the project level. Other changes were made because we want to extend the Zend Framework (but did not yet get round to the extensive documentation and unit testing required by the framework). These two types of extensions are easily distinguished by their parent directories within the classes directory:
GemsThe core of GemsTracker
MUtilPossible extensions to Zend, should not be Gems specific
ZFDebugA Google build debug extension for Zend
ZendThose extreme exceptions where we really had to fix a Zend bug (currently only one)
GemsEscort.phpThe Zend Bootstrap object for GemsTracker. This object handles initialization, layout and security. The GemsEscort? object must be overloaded at the project level.
For Gems and MUtil we generated API documentation, but here we will describe their effect on Zend Framework development.
MUtil stand for MagnaFacta? Utilities. MagnaFacta is one of the companies hired to develop GemsTracker.
When a MUtil directory has the same name as an existing Zend directory it usually concerns a simple extension of that Zend component. E.g. the
Markup directory contains an extension that renders e.g. BB or Wiki code to flat text. Always useful if you want to include a text version for smartphone with an HTML e-mail message. The Potemkin
Translate adapter allows you to act as if there is a translator, without defining any.
However some other default extensions are more important:
ApplicationExtends the Zend
Bootstrapobject to an
Escortobject that allows .NET like event function use during the whole application request cycle.
ControllerExtends the standard
Actionto include the use of new
FormProvided extensions for using both tabbed and tabled forms, improved focus handling and use of the
Other directories extend the framework. These can be divided in two sets, high-level and low-level. We start with the low level extensions. The low-level do not adapt the Zend Framework, but enable the other extensions:
LazyDelayed execution, think callable with parameters and repetition
ParserAn SQL parser for SQL script processing
RaArray and parameter processing functions
RegistryAutomated object parameter loading using a registry
UtilProgrammer extendable functionality (e.g. for factory functions in Ra, Html and Snippets)
The high level packages are the ones that make a GemsTracker a non standard Zend Application:
HtmlSimple extendable HTML classes using
ModelThe M in Model View Controller. Describe labeling, display formatting, validating, etc… for non-db or db-based data sets
SnippetsQuickly create reusable HTML fragments from code. Use of
Registryis prepared but not required
Most components in
Gems extend a
MUtil component adding functionality specific to GemsTracker, without adding any significant changes to the existing workings of those components. The exceptions fall in two broad categories: those that enable extensions and changes at the project level and those that form the core of GemsTracker.
DefaultStandard controllers, for easy overloading of controllers at the project level
LoaderAllow 'mirrored' project level objects to be loaded instead of Gems level objects
ProjectChoose multi-layout, multi-organization, logging level and track types
Communication(SOAP) communication with external applications
EventSurvey or track specific code triggered before or after a survey is taken
ExportData export for scientific analysis
MenuThe application menu, of course adaptable at the project level
TrackerTHE CORE: integration with survey sources, track engines and token display
UserExtensible, role based user authentication and authorization