You are on page 1of 2

A) Project:

- GIT Repository - https://git.code.sf.net/p/phpscheduleit/source


- To contribute and submit your code please contact Nick Korbel
<nick@twinkletoessoftware.com>
- Programming paradigm: toward 100% object oriented PHP5
- Please include the GPL header on every new source file with your name and
year. If you are altering an existing file, just add your name and year.

B) Requirements:
- Web server (Apache/IIS)
- PHP 5.3 or greater
- MySQL 5.5 or greater

C) Getting the development branch running:

1) Set configuration values


Update config/config.php with your local settings

2) If you have phing and are on Windows


Run /build.bat setup.db

2) If you do not have phing


Create the database and user
run /database_schema/create-db.sql
run /database_schema/create-user.sql

Open http://localhost/booked/Web/install

D) Development branch technical information:

1) Application structure
/config Application configuration
/Controls All reusable page control objects
/database_schema Base and upgrade sql scripts
/Domain Domain specific entities, repositories, services, etc
/Access Domain repository objects (db abstraction layer)
/Events Domain events
/Values Value objects
/Jobs All tasks that run on a schedule (cron tasks, for example)
/lang Translations
/lib All application supporting objects
/Application Most of the subdirectories are self-
explanatory
/Admin Application administration logic
/Attributes Custom attributes
/Authentication Authentication (login)
/Authorization Authorization (access)
/Reporting Logic for generating and running reports
/Reservation
/Notification Post-reservation logic
/Persistence Creating, updating, deleting reservation
information
/Validation Pre-reservation logic
/Schedule Schedule population
/User
/Common Non-specific shared objects (localization, dates,
smarty, etc)
/Config Configuration read/write
/Database Database access and abstractions
/Email Email abstractions and services
/external Third party libraries
/FileSystem Filesystem, I/O object
/Graphics Creating and manipulating images
/Server Web server abstractions (sessions, cookies, etc)
/WebService Objects for creating and invoking web services (the
API)
/Pages Page binding and work flow logic
/phing-tasks Custom build tasks that hook into phing
/plugins Contains subdirectories for each type of plugin
/Presenters Application logic, page population
/tests All unit tests
/tpl All Smarty page and control templates
/tpl_c Default Smarty template cache directory
/uploads Default file upload directory
/Web All user facing pages
/scripts All application related javascript files
/WebServices The Booked API

2) Design philosophy
The Model-View-Presenter (MVP) pattern is used to keep a clear separation
between application logic and presentation logic. Page objects act as thin
abstraction to the template engine and typically have no other logic. Presenter
objects orchestrate interactions between underlying application logic objects and
the page. This typically includes fetching and transforming data and minimal
application logic.

[page].php should
- define ROOT_DIR
- include /Pages/[page]Page.php
- construct [page]Page and call PageLoad()

Each page should have at least one corresponding template in /tpl


Each page should have a corresponding class in /Pages
Each Page class should have a corresponding presenter class in /Presenters

Logically related code should be grouped in a directory with a


"namespace.php" file, which requires all files in that directory. This simply makes
it easier to include necessary file dependencies.

All classes should have good unit test coverage. The level of coverage is up
to the developer, but I'd encourage TDD and .

3) User interface
Smarty template engine (www.smarty.net) is used for all UI presentation. Page
templates are located in /tpl and, by default, are cached to /tpl_c

You might also like