Different from Netoffice 2.x the prototype is driven by a single controller-page: index.php. Therefore this is a good start to read it. The interfaces is split into pages (like 'home', 'taskEdit', 'projDelete'). Pages are defined through a PageHandle and a function. All PageHandles are defined at the beginning of the script (in a file called pages/_handles.inc) like this:
new PageHandle(array('id'=>'home', 'req'=>'pages/home.php', 'title'=>'Home'));
PageHandles are been used through the PageHandler
and its global intance $PH. All internal linking and parameter-passing between pages should be done by methods provided by the pageHandler. This will ensure that links and parameters are valid:
$PH->show('heim'); // causes 'undefined'-error and relinks to error-page
$PH->getUrl('taskEdit', array('task'=>23)); // Error: 'invalid attribute task'
$PH->getUrl('taskEdit'); // Error: 'requires tsk'.
The PageHandler can also create handles for returning to a certain page. This allows to edit a task and return to the original task-list afterwards. With netoffice2.x this wasn't possible.
The code for actually rendering the pages is only included if needed. The source-location is passed to the PageHandle-constructor by the 'req'-attribute.
The necessary files for the pages are located in the 'pages/'-directory.
The name-attribute is used if $PH->getLink() is called without the name-parameter. This mostly gives reasonable link-names.
$PH->getLink('home'); # will something like <a href="index.php?go=home">Home view</a>
In the long-term the pageHandle-list could be used for a unit-test of all pages: This can be done by a list of tests (pageId,Parameter,testType). Than we could call/render all tested pages, log the potential errors and tell if the page was rendered without warnings or errors. In netoffice2.x rendering all potential pages was a really tedious task.