FIT2104 Web Database Interface
Assignment 5 Specifications
Title: Implementation with Rapid Development Framework
Notes
-
This assignment is worth 20% of the total mark for the unit
-
This is a group assignment and is to be completed by 2 students working together
-
See Moodle for deadline, extension and special consideration policy
-
Please complete the “Plagiarism Coversheet Electronic quiz” on Moodle before
submit, if not yet
Due dates
Preparation practices Question & answer session(s)
Application Implementation: Contribution Peer Evaluation:
Scenario
Project descriptions
By completing weekly lectures and labs
- By posting your question on the discussion forum
- By organising consultation with your tutor
- Ask for help during weekly labs
Exam Week 2 Wednesday 8th November @ 11:55pm AEDT
Due date same as above
Nathan was satisfied with your presentation and report, and decided to hire you to complete the proposed web system for his business. However, due to the limited budget, only a selection of features, a mix of what you may have proposed and some newly identified needs, are to be implemented. He also wants you to develop the project with modularisation and maintainability in mind for easy future expansions when needed.
The expectation of this assignment is to develop a CakePHP application for Nathan that enables him and his staff to interactively manage data for his recruiting business.
FIT2104 Semester 2, 2023 | 1
General requirements
The web application must use CakePHP as the development framework and the database must be a MySQL database using a schema that is compliant with CakePHP’s database conventions.
Your code must follow the best practice and conventions of CakePHP. Implementations such as (but not limited to):
-
● use of languages other than PHP or development frameworks other than CakePHP
-
● not using the latest version/release of CakePHP or related plugins
-
● schema that is non-compliance with CakePHP conventions
-
● directly executing queries with PDO, mysqli, etc. or using ConnectionManager or
getTableLocator() in non-expected locations, such as inside of a view template
-
● hard-code links or HTML forms without using CakePHP view helpers
will result in deductions of marks or your assignment not being marked at all.
If you have any questions regarding the requirements of this assignment, you MUST discuss it with your tutor or lecturer via discussion forum (preferred, so others can see the answer) and/or during the consultations. If not sure, just ask
Requirements
Database schema: Nathan has already prepared a conceptual ERD provided to you:
FIT2104 Semester 2, 2023 | 2
😀
Alongside the conceptual ERD, some test datasets are also provided to you in lieu of Nathan’s real client data due to privacy concerns. You’ll need to convert this ERD into a schema that is fully compliant with CakePHP database conventions to ensure the system is functional as expected. Once your database schema is created, inspect and modify the provided test data so they can be imported into the newly created database.
Hint: phpMyAdmin allows you to import CSV files directly. You should modify the CSV datasets to fit your final database schema on both the column name and data types before importing. Remember this is a huge dataset so don’t try to manually import records one at a time, as it will take forever to complete!
Code generation with Bake: In the case that you’re using Bake to generate skeleton/scaffold codes based on your database schema, you’ll need to ensure the generated codes fits your use case, meaning that you’ll need to make changes accordingly to ensure:
-
● Model entity should contain a sensible include/exclude list for form data mass assignment
-
● Model table should be configured properly, including display fields, validators and ensure
generated relationships between tables fits the intention of the schema
-
● Controller should contain functions that are actually being used
-
● View templates should render a user-friendly collection of data, and hide unnecessary
data from the user to avoid confusion
-
● Unused and unnecessary files should not be a part of the project folder
Search for various data: You’ll need to develop a feature that enables Nathan and his colleagues to filter the list of records that meet their entered search criteria.
On the listing pages of Clients, Projects, Questionnaire modules, add appropriate search fields for each of the following search criteria:
● Clients:
-
○ Search for a client by their first name or surname with a given keyword
-
○ Search for a client by their address with a given keyword
● Projects:
-
○ Search for the semester a project belongs to with a given keyword
-
○ Filter projects from a dropdown list of all possible status keywords
-
○ Filter projects from a dropdown list of all possible level of necessity keywords
-
○ FIlter projects on whether the owner of the project would attend “Meet & Greet”
-
FIT2104 Semester 2, 2023 | 3
● Questionnaires:
-
○ Search for a questionnaire by the business name with a given keyword
-
○ Search for all questionnaires completed after a certain date and time
The results should fulfil all available search criteria - for example, when “fitness” as “business name” and “10 October 2022 at 23:59:59” as “completion time” are submitted as search criteria for questionnaires, records that fit both criteria will be listed. If the user chooses to search by one or two criteria only, the search function shall still work as expected and ignore the unused criteria.
The search must be implemented using CakePHP on the server-side with proper use of QueryBuilder. Client-side techniques such as Datatables are not allowed.
Configuration and Customisation of CakePHP: Customise the user experience of your web application so that it doesn’t look like a “freshly baked out of oven” CakePHP application, which includes the following tasks:
-
● Remove CakePHP’s welcome page and make the projects list page as homepage
-
● Properly configure app.php and app_local.php files so the project uses correct Australian
formats, time zones and settings
-
● Disable the debug mode of CakePHP in app_local.php template
-
● Remove the presence of CakePHP from user interfaces and replace with appropriate
business branding for Nathan, such as:
-
○ CakePHP catchphrase in page titles
-
○ CakePHP brandings and navigation items in page headers
-
○ General colour tone of the website (remember the design and usability lectures?)
-
○ and more that you can think of
-
○ and make sure these changes are applied to the entire website instead of
individual pages/modules
You must implement the changes correctly in the way CakePHP is intended - that includes, but not limited to, updates to static files (images, CSS scripts, etc.) in webroot, individual templates that need to be themed, and overall layout of the web application.
Further increase the usability of relationship dropdowns: By default CakePHP uses very simple display fields which do not fully represent related entities in key-value results, which are usually used in dropdown lists. Ensure you’re modifying the display fields of Projects and Clients table,
-
FIT2104 Semester 2, 2023 | 4
and take advantage of virtual fields, so that there’s no ambiguities when the user chooses a client when creating a project, or chooses a project when creating a questionnaire, etc.
Authentication to protect the data: Implement the CakePHP Authentication plugin properly so that Nathan and his colleagues can log into the system with their designated username and password. Ensure:
-
● The plugin is properly configured
-
● Required database table schema is implemented, and related codes are “Baked”
-
● Passwords stored in the database table are properly hashed by CakePHP
-
● Additional functions and view templates for logging in and logging out are added
Publicly available questionnaire: Normally all parts of the website are limited to staff access only. However, to allow external clients to complete a questionnaire for a certain project, you’ll need to some extra work as follow:
-
● Modify the add action, along with its view template in QuestionnairesController so that instead of letting the user choose which project the questionnaire belongs to, the primary key of the project is instead taken as an argument of the action function
-
● Make the add action (which allows a user to fill in a questionnaire) publicly available, instead of requiring a user to login
-
● Add a link or field in either projects listing or view page, which enables Nathan to copy the invitation link to complete a questionnaire on a certain project. You may also need to consider disable such feature when a questionnaire is already completed for a project
Overall aesthetics: Improve user-friendliness of the website by inspecting and updating all existing codes generated, and implementing new layouts and/or including useful JavaScript libraries/plugins. This includes but not limited to:
-
● Review all parts of the website and ensure users are not confused, such as notification (flash) messages generated in Controllers, HTML form and view page field labels
-
● Implementing new layouts using designer templates (with Bootstrap or similar CSS frameworks) that replaces either the staff side of the website, public user side of the website, or both, for a better visual experience - the implementation must be fully compliant with CakePHP’s layouting system (view templates, layouts, etc.)
FIT2104 Semester 2, 2023 | 5
● Implementing JavaScript libraries and/or plugins that improves usability - your codes must be fully compliant with CakePHP’s layouting system (take advantage of View Helpers)
Submission of the assignment
A repository for assignment submission has been created for you within the team FIT GitLab group with the name "fit2104_assignment_5". The repository contains an empty CakePHP 5.x app skeleton which allows you to start your work straightaway. The link to this repository will need to be submitted to Moodle’s assignment 5 portal (see the portal for details). All files that make up the system should be in the repository’s default (main) branch. The repository should not contain files that are not related to the assignment.
At the root of your repository, you should modify the default README.md file to contain:
-
● Details of the author, with name, student ID#, and date of submission
-
● A link to the FIT GitLab repository page of this assignment
-
● The filename of your database dump file (see below for details)
Also, provide a dump/export of your database schema and imported data. This file should include table creation statements with definition of primary and foreign keys and column constraints, as well as insert statements of all imported data. Which means the assignment marker should be able to use this file to create or restore the state of the database back to how it was at the time of submission. You can put the dumped SQL file somewhere logical in the repository and the README.md file should contain the location of the SQL file.
A snapshot of your personal FIT GitLab group will be taken at the deadline of submission. By that time all files required for your system must have been committed and pushed to your repository’s default branch along with the database files. You will be able to make changes to your repository after the deadline, but those changes will not be considered for marking.
Consequently, please do not leave it to the last day or last minute to commit and push changes, as you’ll need time to check if everything is properly submitted, and the server could crash because of the large amount of traffic. No consideration will be given for failing to push changes before the deadline, and late submissions are not accepted according to the unit assignment policy, unless exceptions or extensions are approved by the university.
A peer evaluation survey is also available on Moodle to allow peers to review their performance during the collaboration process of the assignment. This survey is due the same time as your original or extended due date of the code. No rainchecks.
FIT2104 Semester 2, 2023 | 6
Although you may not be assessed by this, it’s recommended that your repository contains healthy commit histories. This could help you to build a positive attitude in coding habits, project and bug management, streamline the deployment process, and make sure the history is properly tracked for future references. Please notice that the scaffold of CakePHP uses the .gitignore file to exclude the bulky vendor folder and some local configuration files. You can take advantage of this to greatly reduce the size of your repository. Since this file is considered as hidden file in *nix OSes (like Linux and macOS), make sure hidden files are properly included in your repository.
The authors must write all codes changed and submitted. Students may be interviewed as part of the assessment. Where there is evidence of plagiarism or collusion with those submissions, students involved will be subjected to academic integrity investigation.
Finally (something kind of out of the place but very important), any potentially dangerous act, such as attacking information systems, including maliciously crafted codes, or sabotage other students’ assessments somehow, are considered as offences. Trust me, this happened before in the academic settings, and you don’t want to go that far I put it here just to cover all basis.
Further Information
You are encouraged to use the Ed discussion forum on Moodle to post and answer questions regarding the assignment. Please make sure you have attached the correct tag for your post/question. It is important to remember that staff may not be available to answer questions at the last minute, so it is important that you do not leave it to the last minute to attempt the assignment. Use the labs and consultations well to get help from staff members when needed.
Friendly reminder: this is supposed to be a straightforward assignment to test your understanding of basic CakePHP skills - please do not overcomplicate the implementations.