openTurbulus Technical Report openTurbulus [ technical report ] Date: 10/25/2011 Author: Ricardo José Martínez Clerigué project web: www.openturbulus.org Online documentation: http://www.openturbulus.org/en/docs/ At Sourceforge: http://sourceforge.net/projects/openturbulus/ Downloads: http://sourceforge.net/projects/openturbulus/files/ Email: info@openturbulus.org Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 1 openTurbulus Technical Report Index Development platform ..................................................................................................... 3 Development Languages and databases ............................................................................. 4 Product Operating Environments .................................................................................... 4 Enviroments for which is packaged ................................................................................... 5 Operating Platform ........................................................................................................ 5 Documentation formats ................................................................................................... 5 Support ........................................................................................................................ 6 Development framework .................................................................................................. 7 File and folders structure ....................................................................................... 19 Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 2 openTurbulus Technical Report Development methodology or guidelines: In openTurbulus we used a pattern of development, MVC object oriented programming. By using an MVC design, we design basically divided into models, views and controllers. Model: In the model layer, we have introduced all access to the database, this layer, serves the controller classes, all the data you need, and all actions that require database in all kinds of drivers . View: in openTurbulus, views, can be understood as templates that generate web pages, can not directly access database, only load data vectors already extracted and served from a controller. A level of programming they can only use logical operators are simple. The philosophy we have followed them with the view is as simple as possible from the programming side for ease of modification or creation. Controller: It is responsible for capturing, events and user actions and respond to them in openTurbulus, drivers rely on classes and from classes is connected with the views and models. Development platform To develop openTurbulus in our case we used a plain text editor for Gnome called gedit, but just any plain text editor. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 3 openTurbulus Technical Report Development Languages and databases In openTurbulus, we have used the following languages and database: PHP MySQL HTML JavaScript CSS Product Operating Environments In openTurbulus, we used a client-server architecture: Server: seves any operating system that supports Apache, MySql and PHP. Therefore we have Linux, Windows and Mac OS. We personally recommend using Linux. Client: is designed to run on desktop computers that can run a web browser updated to todays date (October 2011). We tested with Firefox, Explorer Chrome and Safary. In Mobile devices that can run a web browser with javascript should also be able to access and use openTurbulus, but may have problems. With some resolutions and so on. For proper operation on the server recommend using these versions: PHP - recommend using 5.2.x or higher. (Not recommended for use in production environments with PHP 4). MySQL - we recommend using 5.5.13 or higher. Apache - we recommend using 2.x or higher. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 4 openTurbulus Technical Report Enviroments for which is packaged By using a client-server, the client side only needs a browser of the above date. On the server side, supports the following operating systems tested: Linux Windows Mac OS While we must expose, which will run on any operating system that can move the above versions of Apache, PHP and MySQL. The application provides compressed files. Zip and. Tar.gz http://sourceforge.net/projects/openturbulus/files/ ( can be downloaded from this address ) Operating Platform At the level of infrastructure to implement openTurbulus, we need: Server: need a server that provides web services and databases. Today there are many companies that offer web hosting services. Because we need to start openTurbulus, there are bargains in every price depending on your needs. Client: Any desktop computer (Desktop) or laptop, it serves. Documentation formats The formats used for publishing openTurbulus documentation are: .pdf .odt .doc updated documentation can be downloaded from: http://www.openturbulus.org/en/docs/ Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 5 openTurbulus Technical Report Support You can contact us at: Project Web: http://www.openturbulus.org/es/contacto/ Email: info@openturbulus.org Sourceforge; se pueden utilizar todos los recursos de la forja que utilizamos ( www.sourceforge.net ) como son: ◦ Project Forums : ▪ Help ▪ Open Discussion ◦ Project followers: ▪ Bugs ▪ Support Requests ▪ Patch Tracking System ▪ Feature Request Tracking System. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 6 openTurbulus Technical Report Development framework We are not using any external framework for development, really what we have done / are doing is implementing and developing our own. We think the best way to get an application is to start designing the database, so here we go! =) Structure and design of the database It is planned that we have many more select type queries that inserts, updates and deletes. Therefore, the best engine or motor, we can use to gain speed, it is MyISAM, MySQL is a very fast engine, ideal when the main workload of the database manager will be select query type. The main advantage of this engine is speed, so we're going to have to give something in return is that speed, that something is the Foreing Keys (FK) or foreign key, referential constraints between two tables. Does this mean that we will not be able to relate tables?? NO, the relationships between tables do programmatically from PHP. openTurbulus uses a total of 9 tables or entities: admins contents administrators from Module 3 config various configuration parameters. controllers registered controllers. families1 first level families. families2 second level families. headers headers used by products. langs registered languages. pages pages, in example, a catalog is a page. products products and services in the catalog. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 7 openTurbulus Technical Report Admins table contains the users whio can enter the module 3 to manage the content of openTurbulus. It consists of the following columns: id The id is an integer, which is in turn key and autoincrement primary. login The login is the administrator name is used in the login field: when accessing the module 3. This is a varchar to 250 chars, with utf8_unicode_ci collation pass Is the password used, it should be noted that sha1 encryption takes This is a varchar to 250 chars, with utf8_unicode_ci collation name Is the administrator name. This is a varchar to 250 chars, with utf8_unicode_ci collation lastName Administrator lastName. This is a varchar to 250 chars, with utf8_unicode_ci collation email Is the administrator email. This is a varchar to 250 chars, with utf8_unicode_ci collation active We use it to indicate if an admin is active. This is an int of a digit, so it only can be 1 or 0. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 8 openTurbulus Technical Report The config table stores data corresponding to the company: · as the name · the web address of the same · and the company email then used in different parts such as the generation of catalogs via pdf. It has 3 columns: companyName company name, it is a varchar (250) with collation utf8_unicode_ci companyweb is the web address of the company, it is a varchar (250) with collation utf8_unicode_ci companyEmail mailing address of the company, it is a varchar (250) with collation utf8_unicode_ci Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 9 openTurbulus Technical Report The table stores data controllers who are active drivers which are required, is also used to find out what place each section in the navigation bar within the private panel of Module 3. It has 6 columns: id The id is an integer, which in turn is a primary key and autoincrement. name is the name of the controller will then use to go look at your directory, and mount the entire structure. This is a varchar (250) with utf8_unicode_ci collation. showName Is used to display under each button, the name of what is in the navigation bar sections or driver control panel. This is a varchar (250) with collation utf8_unicode_ci required This field indicates if the driver is required. This is an int (1) that indicates whether mandatory or not (value 1 indicates that is mandatory). navigationBarPosition This field indicates the position of the button on the top navigation bar for Module 3, or what is the same which to place the button that calls each section. Is an integer that can take values from 0 onwards, with 0 being the first button / section that appears. It is an int (11). active Indicates whether a record is on, 0 off, 1 on, is an int (1). Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 10 openTurbulus Technical Report The table stores families1-class families. Is related to the languages table (langs). Each familia1 is in a language. Id This field is an integer, which in turn is a primary key and autoincrement. idLang family1 related field with an id of language. The relationship becomes programmatically from PHP. This is an int (10). name Is the name of family1, it is a varchar (250) with collation utf8_unicode_ci description is the description of family1, it is a varchar (250) with collation utf8_unicode_ci img This field stores the relative path to the image using familia1 active indicates whether a record is active or not, this is an int (1) that can have 0 or 1. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 11 openTurbulus Technical Report Families2 table stores the families of second level is related to the table langs. Id This field is an integer, which in turn is a primary key and autoincrement. idLang family2 related field with an id of language. The relationship becomes programmatically from PHP. This is an int (10). Family1Name This field stores the name of the familia1 to which it belongs. This is a varchar (250) with collation utf8_unicode_ci name is the name of family2, it is a varchar (250) with collation utf8_unicode_ci description is the descriptionof this family2, it is a varchar (250) with collation utf8_unicode_ci img This field stores the relative path to the image using family2, it is a varchar (250) with collation utf8_unicode_ci active indicates whether a record is active or not, this is an int (1) that can have 0 or 1. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 12 openTurbulus Technical Report The table headers, headers handles product is also related languages (langs) Id This field is an integer, which in turn is a primary key and autoincrement idLang headers related field with an id of language. The relationship becomes programmatically from PHP. This is an int (10). name is the name of the header, it is a varchar (250) with collation utf8_unicode_ci description is the description of the header, it is a varchar (250) with collation utf8_unicode_ci header1 is the text of the header1, it is a varchar (250) with collation utf8_unicode_ci header2 is the text of the header2, it is a varchar (250) with collation utf8_unicode_ci header3 is the text of the header3, it is a varchar (250) with collation utf8_unicode_ci header4 is the text of the header4, it is a varchar (250) with collation utf8_unicode_ci active indicates whether a record is active or not, this is an int (1) that can have 0 or 1. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 13 openTurbulus Technical Report The board is responsible for storing langs languages, multiple tables are related to this table. Id This field is an integer, which in turn is a primary key and autoincrement. PrivateName This field is an integer, which in turn is a primary key and autoincrement. is an internal reference, to know that we utillizando name, and help us use the control panel. It is a varchar (250) with collation utf8_unicode_ci description is the description of language, it is a varchar (250) with collation utf8_unicode_ci publicName Language is the name visible in the PDF and on the public Web. This is a varchar (250) with collation utf8_unicode_ci isDefault we can define a default language for the public, so that when loaded, if the visitor has not defined the language loaded by default this language. This is an int (1) can have 0 or 1 values. dateRegistered keep this date just to know when you signed up a particular language, the date is saved as Vacher (250) with utf8_unicode_ci collation. meta1 This field is used on the public for positioning issues, says a robot that is a meta name description. Therefore we can store in it a description. This is a varchar (250) with collation utf8_unicode_ci meta2 This is used in the public part, to issues of positioning signals to robots, which is a meta name keywords. Therefore it can store keywords. This is a varchar (250) with collation utf8_unicode_ci sheet This is used in the public part, to issues of positioning signals to robots, which is a meta name keywords. Therefore it can store keywords. This is a varchar (250) with collation utf8_unicode_ci catalog Contains the text of Download pdf catalog for each language. It is used in the public templates. This is a varchar (250) with collation utf8_unicode_ci Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 14 openTurbulus Technical Report flagImg contains the path up on the image for each language, in this case are the flags for each language. This is a varchar (250) with collation utf8_unicode_ci active indicates whether a record is active or not, this is an int (1) that can have 0 or 1. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 15 openTurbulus Technical Report The pages table contains the different types of pages that may have openTurbulus either a catalog, a website company, location or news. Id This field is an integer, which in turn is a primary key and autoincrement idLang pages related field with an id of language. The relationship becomes programmatically from PHP. This is an int (10). name is the name of the page, also used for the navigation bar, it is a varchar (250) with collation utf8_unicode_ci description is the description of the page is for internal use, it is a varchar (250) with collation utf8_unicode_ci body is the body of the page, if not a type catalog. The catalog page types do not use this field. This is a text, with collation utf8_unicode_ci bottomImg is the path on the lower image of the pages, catalog does not use these images. This is a varchar (250) with collation utf8_unicode_ci sideImg is the relative path to the image side of the pages, catalog does not use these images. This is a varchar (250) with collation utf8_unicode_ci navigationBarPosition This field indicates in which position of the navigation bar above (navigation pages) must contain the name of this page. It is an int (10). type Defines the type of page, there are 4 types of page, 1 is reserved for the catalog, the company 2 for the 3 to 4 for location and news. it is an int (1) that can have 0 or 1. active indicates whether a record is active or not, this is an int (1) that can have 0 or 1. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 16 openTurbulus Technical Report The products table stores the products and services registered in openTurbulus. Id This field is an integer, which in turn is a primary key and autoincrement. idLang products related field with an id of language. The relationship becomes programmatically from PHP. This is an int (10). idFamily2 products related field with an id of family2. The relationship becomes programmatically from PHP. This is an int (10). idHeaders products related field with an id of headers. The relationship becomes programmatically from PHP. This is an int (10). name is the product name is also used for navegaciónde bar products, it is a varchar (250) with collation utf8_unicode_ci description is the description of the product is for internal use, it is a varchar (250) with collation utf8_unicode_ci field1 first field of the product of a total of 4, is used to get product data. This is a text, with collation utf8_unicode_ci field2 second field of the product of a total of 4, is used to get product data. This is a text, with collation utf8_unicode_ci field3 third field of the product of a total of 4, is used to get product data. This is a text, with collation utf8_unicode_ci field4 fourth field of the product of a total of 4, is used to get product data. This is a text, with collation utf8_unicode_ci img1 This field stores the relative path to the image using the product, the first image, is also used for PDF, it is a varchar (250) with collation utf8_unicode_ci img1Active image1 indicates whether active or not, this is an int (1) that can have 0 or 1. img2 This field stores the relative path to image 2 to product is a varchar (250) with collation utf8_unicode_ci img2Active image2 indicates whether active or not, this is an int (1) that can have 0 or 1. img3 Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 17 openTurbulus Technical Report This field stores the relative path to image 3 to product is a varchar (250) with collation utf8_unicode_ci img3Active image3 indicates whether active or not, this is an int (1) that can have 0 or 1. img4 This field stores the relative path to image 4 to product is a varchar (250) with collation utf8_unicode_ci img4Active image4 indicates whether active or not, this is an int (1) that can have 0 or 1. meta This field is used in the public part, to issues of positioning, it is a varchar (250) with collation utf8_unicode_ci active indicates whether a record is active or not, this is an int (1) that can have 0 or 1. Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 18 openTurbulus Technical Report File and folders structure Our mvc basically works this way, the root index.php file calls a driver (libs / frontController), which is responsible, to form the name of the driver you need, and the action we are going, if that is not spent any, take as default index action. It also builds the path you need. If we get here, creates an instance of the controller, and you miss the action requested. So if we want to develop a new admin section for example, the controller will be created in the folder admin / controllers / newSectionController.php In this controller, if needed we can assist you with a class, we call admin / classes / seccionNuevaClass.php If you need the class to work with the database, we have to create us another file, type model. admin / models / newSectionModel.php If in addition we want to view and interact with the user, we create ourselves in a template: admin / views / sectionView.php Keep in mind that openTurbulus actually has two applications, the first is in the public module, located in the root where we have used the facility, and a second application which repeats the MVC pattern, that we have within the admin folder. We created the following directory structure and files: In this folder, start the appropriate files to Module 3 admin/ classes/ Here are the kinds of help to drivers, the philosophy is to capture the data, actions, events and business logic in the controller and work with these data is done in class, the class also is calling and interact with the layer database in the models. families1Class.php This class helps the controller specifically families1Controller, performing work, how to tell what languages are discharged (which asks the model families1Model) Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 19 openTurbulus Technical Report // -> method selectLangs, get the list of langs public function selectLangs() { $families1 $selectLangs = new families1Model(); = $families1->selectLangs(); return $selectLangs; }// end function selectLangs() It is responsible to tell the model to add a new family in the database through addSql method. // -> method addSql: adds data to db public function addSql($idLang,$name,$description) { $config = Config::singleton(); $families1 = new families1Model(); $count = $families1->checkRestrictionsName($idLang,$name); // family1 name must be unique for each lang if(empty($name)) $notice = $config->get('families1Notice2'); // you must type a name else { if($count == 0)// add the family1 { $families1>addSql($idLang,$name,$description); $notice = $config- >get('families1Notice3').$name." ."; // added families1 } else// family1 already exists { >get('families1Notice4').$name." ."; $notice = // error duplicate publicName $config- } } return $notice; }// end public addSql Suspends a family for example. This model tells the family should be stopped. // -> method suspend, suspends a family1 public function suspend($id) Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 20 openTurbulus Technical Report { $config = Config::singleton(); $families1 = new families1Model(); $name = $families1->family1Name($id); $families1->suspendSql($id); $notice = $config->get('families1Notice7').$name." ."; // suspend family1 return $notice; } // end function suspend The classes are also the methods used by the controller to mount different types of pages that need to display eye! It is the view. It can be observed loads all data vectors, $ data ['version'] contains for example the current version of openTurbulus at the end of method will be seen as calling the different templates to finish assembling the page. This method can be called by the driver, when you need to display a form to collect data in order to register a new family. // -> method add: add form public function add($idSelectedLang,$selectedLang,$notice) { // we do a instance $navigationBar = new navigationBarModel(); // we ask to the model $navigationBarVector = $navigationBar->getControllers(); $data['controllers'] = $navigationBarVector; $config = Config::singleton(); $titleConfig = $config->get('title'); $version = $config->get('version'); $data['css'] = "css/admin.css"; $data['title'] = " families1 $titleConfig"; $data['version'] = $version; $data['idSelectedLang'] = $idSelectedLang; $data['selectedLang'] = $selectedLang; $data['notice'] = >get('families1Notice'.$notice).$name." ."; // no family1 for selected lang $config- $this->view->show("headerView.php",$data); $this->view->show("navigationBarView.php",$data); $this->view->show("families1AddView.php",$data); Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 21 openTurbulus Technical Report $this->view->show("footerView.php",$data); } // end function add() families2Class.php This file contains the methods for the Module3 familias2 and helps families2Controller headersClass.php This file contains the methods for the headers and helps headersController Module3 indexClass.php This file contains the methods for the index and helps IndexController Module3 langsClass.php This file contains the methods for the Module3 langs and helps langsController navigationBarClass.php This class is a little more special, is responsible for mounting the top navigation bar with the appropriate sections. class navigationBarClass { // -> new instance of view function __construct() { // we call to the model require 'admin/models/navigationBarModel.php'; $this->view = new View(); } // end function __construct() // -> method showNavigationBar() public function showNavigationBar() { // we do a instance $navigationBar = new navigationBarModel(); // we ask to the model $navigationBarVector = $navigationBar->getControllers(); $data['controllers'] = $navigationBarVector; $this->view->show("navigationBarView.php",$data); } Pulsar Inara | email: // end function showNavigationBar() info@openturbulus.org | www.openturbulus.org 22 openTurbulus Technical Report }// end class navigationBarClass pagesClass.php This file contains the methods for the Module3 pagesClass and helps PagesController productsClass.php This file contains ProductsController the methods for the Module3 productsClass and helps securityClass.php controllers/ Here are the drivers of Module 3 for each section. families1Controller.php Here are some families.1 driver, we see that the first thing is to include the kind of help (families1Class), and generates an object called $ families1. Then enter a switch to see what action have passed. Arriving index, pass a list of all the families who have for a given language. require('classes/families1Class.php'); $families1 $ClassName = new families1Class(); = 'families1Class'; switch($actionName) { case 'index': $notice = ""; $selectLangs = $families1->selectLangs(); $idSelectedLang = $_GET['idSelectedLang']; // langs list if(empty($idSelectedLang)) // no lang selected { $idSelectedLang= $families1->firstLang(); // get the first lang by public name $families1->checkRequestsLangs(); // checks if there is any lang }// end if empty($idSelectedLang) $rowsNumber = $families1->rowsNumber($idSelectedLang); $listVector = $families1->getList($idSelectedLang); // families1 list for selected lang $selectedLang = $families1->getNameSelectedLang($idSelectedLang); $families1>index($listVector,$rowsNumber,$selectLangs,$idSelectedLang,$selectedLang,$notice); Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 23 openTurbulus Technical Report break; // form for can add families1 =) But if it add, we have to load a form to add a new family of level 1. The notice we use to send messages to the user, if left to introduce a field, if the name you entered is repeated so many of these ads are variable in config.php. case 'add': $notice = ""; $idSelectedLang = $_GET['idSelectedLang']; $notice = $_GET['notice']; $selectedLang = $families1->getNameSelectedLang($idSelectedLang); $families1->add($idSelectedLang,$selectedLang,$notice); on the top line is called the add method, that method is responsible for serving the user in the form of adding a new language. break; families2Controller.php Family2 controller headersController.php Headers controller indexController.php Index controller or section administrator langsController.php Languages controller logoutController.php Exit controller ( destroys session ) pagesController.php Pages controller productsController.php Products controller securityController.php Security controller css/ In this directory we find the style sheets for Module 3. admin.css Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 24 openTurbulus Technical Report img/ Images folder of Module 3. controllers/ here are the images that are used primarily for the top navigation between different sections, we note that each image can have 3 states. This is to give a bit of animation or effect to the button. families1/ families11.png families12.png families13.png families2/ families21.png families22.png families23.png headers/ headers1.png headers2.png headers3.png index/ index1.png index2.png index3.png langs/ langs1.png langs2.png langs3.png logout/ logout1.png logout2.png logout3.png pages/ pages1.png pages2.png pages3.png Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 25 openTurbulus Technical Report products/ products1.png products2.png products3.png security/ logoHorizontalVertical.png Here are the icons used views module 3, as a button, to edit, delete, add, open, etc. suspended. views/ families1/ add.png del.png edit.png open.png suspend.png families2/ add.png del.png edit.png open.png suspend.png headers/ add.png del.png edit.png open.png suspend.png langs/ add.png del.png edit.png locale.png open.png suspend.png Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 26 openTurbulus Technical Report pages/ add.png del.png edit.png open.png suspend.png products/ add.png del.png edit.png open.png suspend.png otLogoHorizontal.png libs/ These libraries are the heart of the design we are using. config.php frontController.php spdo.php view.php models/ families1Model.php This is the access layer database, for example families1Class class needs to know the name of a given language, having the same id, the id is what would happen to this layer are querying here, no more database access outside this layer. // gets the name of a lang public function getNameSelectedLang($idSelectedLang) { $sql= "select publicName from langs where id = $idSelectedLang;"; $query = $this->db->prepare($sql); $query->execute(); $selectedLang = $query->fetchColumn(); return $selectedLang; }//end function getNameSelectedLang families2Model.php Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 27 openTurbulus Technical Report headers.php indexModel.php langsModel.php navigationBarModel.php pagesModel.php productsModel.php securityModel.php thirdparty/ (In this directory include resources that have not been developed by us but the license is free too.) tinymce/ it is the rich text editor for web views/ This is the template layer, we must remember that only allows html, some simple and logical operators to extract the data loop, you can not do database queries and so on. We also note that each section, usually 3 files, one is to list all you have, another is to add and the latter is to edit. errorLoginView.php families1AddView.php here is an example template families1AddView.php <br> <?php if(!empty($notice)) // views alerts { ?> <fieldset> <legend>notice</legend> <?php echo $notice; // shows information about of the add to the database or others msgs ?> </fieldset> <?php } ?> <fieldset> <legend> .: families1 :: add </legend> <table width="100%" border="0" align="center" cellpadding="2" cellspacing="2" bgcolor="#fff"> <form name="families1Add" action="?controller=families1&action=addSql&idLang=<?php $idSelectedLang; ?>" method="post"> Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org echo 28 openTurbulus Technical Report <tr> <td width="10%" align="right">Selected language </td> <td width="90%" align="left"><input name="selectedLang" type="text" id="selectedLang" size="40" value="<?php echo $selectedLang; ?> " disabled></td> </tr> <tr> <td width="10%" align="right">Family 1 name </td> <td width="90%" align="left"><input name="name" type="text" id="name" size="40"></td> </tr> <tr> <td width="10%" align="right">Description </td> <td width="90%" align="left"><input name="description" type="text" id="description" size="40"></td> </tr> <tr> <td align="right"><div align="right"></td> <td align="left"><input type="submit" name="Submit" value="save record"></td> </tr> </form> </table> </fieldset> families1EditView.php families1IndexView.php families2AddView.php families2EditView.php families2IndexView.php footerView.php headersAddView.php headersEditView.php headersIndexView.php indexView.php langsAddView.php langsEditView.php langsIndexView.php loginView.php navigationBarView.php pagesAddView.php Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 29 openTurbulus Technical Report pagesEditView.php pagesIndexView.php productsAddView.php productsEditView.php productsIndexView.php config.php config file index.php and the index which call to FrontController.php Module 3 end here, the following files are related to Module 2 and who is responsible for preparing the documents for visitors. Module 2 observed that although the classes in this module and drivers are different MVC scheme is the same. classes/ catalogClass.php indexClass.php pagesClass.php pdfClass.php controllers/ catalogController.php indexController.php pagesController.php pdfController.php css/ public.css img/ content/ (In this directory stores all the images, products, families that was uploaded) families1/ families2/ langs/ Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 30 openTurbulus Technical Report pages/ pdf/ products/ banner.jpg controllers/ in almost no images module for controllers security/ logoHorizontalVertical.png otLogoHorizontal.png installer/ ( herein lies the installer openTurbulus ) index.php installer.css modInstaller.php modInstaller is the file responsible for connecting to the database, to make the dump your tables are going to use and write configuration files for both the module 2 to module 3. libs/ fonts/ ( thirdparty ) class.ezpdf.php ( thirdparty ) config.php frontController.php spdo.php view.php models/ catalogModel.php indexModel.php pagesModel.php pdfModel.php thirdparty/ tinymce ( thirdparty ) views/ catalogView.php footerView.php headerView.php indexView.php Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 31 openTurbulus Technical Report pagesView.php config.php index.php license.txt Pulsar Inara | email: info@openturbulus.org | www.openturbulus.org 32