Abstract Dynamic form generation is a functionality that many end users have came to take for granted when using a CMS, The process of form generation could,however, use more simplification. I'm proposing an extensible , plug-in based Forms component that works natively on 1.5 Framework and allows single-screen form design and nested forms for complex forms while compiling with accessibility standards as far as possible. Detailed Description: Biography: ========== My name is Mostafa Muhammad, I was born in Cairo on May the 4th , 1985, I'm an Egyptian Muslim, living in Cairo, I'm currently studying Medicine at Al-Azhar university in Cairo, My Medical interests are mainly related to Bionanotechnology, My interests in the field of computer are 3D graphics (OpenGL mainly) and the related math "Vector math" , My OpenGL implementations are mainly in C++, I'm also interested in Web development particularly PHP which I have been using actively for more than 5 year now, I was introduced to Mambo shortly before the Mambo/Joomla! transition and have been developing for Joomla! ever since, I also served as a moderator of the Arabic forum for a period of time. What I would like to learn for Google Summer of Code - Work more closely with the new 1.5 Framework and the MVC model - Improve my Javascript/AJAX skills -------------------------------------------------------------------- Personal Skills: =============== I'm an honest friendly team player , I tend to look for generic solutions for problems rather than solutions that fits one area, I also am flexible and tend to adapt to different settings. -------------------------------------------------------------------- Project Goal: ============= - Provide a smart and easy to use 1.5 Native forms component that combines simplicity and flexibility by allowing single step form generation rather than the current multi-step approach. --------------------------------------------------------------------- General Description: ==================== Key features - Backend Single Screen, Drag and Drop Form design. - Frontend Standard Compliance (xHTML , WCAG) Graceful degradation in Browsers that doesn't support Javascript - Nested forms This feature will allow forms that support One-To-Many relationships. e.g. Creating a form where the user fills information about his recent jobs would look like this ----- Name Date of birth Recent Jobs Job I Position Start End Job II Position Start End Job III... etc Attached Files ----- Each record can have multiple "Job" entries. -------------------------------------------------------- Proposed Structure: =================== A modular structure composed of two parts 1)Core: Handles usual functions like HTML/Javascript generation, This is the main part of the application and will further broken down to fit into the MCV Possible views: Backend - Control Panel view - Form design view - Records view Frontend - Form view 2)Plugins: Handles I/O via various media These plugins will interact with the core via triggers "onFormSave, OnRecordSave, OnFormDelete" and will solely be responsible for Storing and Retrieving from Storage media "Database , File System, etc..." This a scenario on how the internal workings of this model would look like: 1)User creates a form via backend Interface. 2)User selects storage media "For this example that would be Database and E-mail" 3)The Core receives form structure and inserts meta data about the form into the core table. 4)The Core passes the form structure to selected plugins "Database and E-mail" via the "OnFormSave" Trigger along with user parameters for those plugins. - The database plugin trigger "OnFormSave" receives form structure and proceeds to create a database table that fits the incoming form structure. - The E-mail plugin simply does nothing on this trigger. 5)Form is now ready to use. 6)Fontend user fills in the form and submits the data to the server. 7)The Core validates the data and incase of error redirects user back to the page again , otherwise it passes the data to the selected plugins for that form via "OnRecordSave" trigger. -The database plugin receives the data and simply inserts a new database row. -The E-mail plugin will send the data by mail based on user parameters for the E-mail plugin for that form. 8)User requests to view stored records. 9)The core forwards the request to the relevant plugin -The database plugin reads the requested tables and returns the requested entries -The Email plugin would respond with an error since it supports one way access of data. Database Structure -------------------- A single table that will hold core form data. A table will be generated for each form (For Database plugin) AJAX library: ------------- Yet to be determined, Homegrown AJAX implementation *might* be used to avoid unwanted processing overhead. Additional Notes ----------------- Usage of Javascript/AJAX in frontend will be limited to allow for graceful degradation on browsers with No Javascript support (To comply with WCAG) ---------------------------------------------------------------- Project Plan: ============= The project will proceed in 3 Phases Phase I (2 Weeks) DELIVERABLES Backend functionality - Working backend drag and drop environment for form design (Form design View) - Database plugin (OnFormSave, OnFormDelete). - Record view Phase II (2 Weeks) DELIVERABLES Frontend functionality - HTML Form generation - Dynamic Javascript validation Implementation of Database frontend triggers (OnRecordSave) Backend functionality - Implementation of record views to allow the user to view saved records. Phase III (2 Weeks) DELIVERABLES -Email plugin -File System (XML) plugin ---------------------------------------------------------