FIT2104 Web Database Interface
Assignment 5 Specifications
Title: Implementation with Rapid Development Framework
Notes
1. This assignment is worth 20% of the total mark for the unit
2. This is a group assignment and is to be completed by 2 students working together
3. See Moodle for deadline, extension and special consideration policy
4. Please complete the “Plagiarism Coversheet Electronic quiz” on Moodle before
submit, if not yet
Due dates
Preparation practices By completing weekly lectures and labs
Question & answer session(s) - By posting your question on the discussion forum
- By organising consultation with your tutor
- Ask for help during weekly labs
Application Implementation: Exam Week 2 Wednesday 8
th November @ 11:55pm AEDT
Contribution Peer Evaluation: Due date same as above
Scenario
Project descriptions
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.
FIT2104 Semester 2, 2023 | 7