Challenge Overview
Project Overview
National Solar Tour would like a system to manage their members.
Challenge Overview
In this challenge, you are building a web application to maintain and store users of different levels, storing information on registration and hosting locations for a tour site, and providing administrative tools to the tour organizers.
Challenge Requirements
You will use following technology stack :
-
Yii PHP Framework
-
MySQL
-
AngularJS (optional)
-
Bootstrap UI (using this is a must)
-
Apache web server
Required Pages and backend
-
Login page
-
This is the landing page when the user is not logged in.
-
The login should support ‘redirect’ parameter.
-
Only user with ‘admin’ role or ‘organizer’ role can access the web portal.
-
-
Navigation and header:
-
The default, fullscreen responsive Bootstrap theme is fine (http://getbootstrap.com/examples/theme/)
-
There will be consolidated navigation to navigate between pages
-
Welcome {username} and Logout should be placed at header
-
Logo placeholder should be placed at header
-
-
Users page
-
This page display table of users
-
Filtering the table using user related fields :
-
username
-
role
-
status
-
region
-
.. add any other fields that you see useful.
-
-
Each row will have these actions :
-
Delete
-
Deleting a user should give a confirmation dialog before processing the action.
-
-
Edit
-
Updating a user should open a bootstrap dialog to edit user information.
-
-
Ban
-
Should show a confirmation dialog before processing the action.
-
-
Contact
-
-
There will be an export button that exports the user contact/information
-
Filtering will also applied to exported list.
-
-
-
Locations/Hosts page
-
The page displays list of locations.
-
There will be two panels to view locations : Map panel and List panel.
-
By default this page displays (list view) table of Locations.
-
Filtering with the Location related fields :
-
name
-
address
-
email
-
zip
-
phone number
-
technology
-
available days
-
username
-
within my region
-
.. add any other fields that you see useful.
-
-
Table will display as much information as possible about the Location.
-
Each row in the table will have set of actions
-
Edit
-
Delete
-
Configuration dialog should be displayed before processing the action.
-
-
Review the submitted Host
-
It will open a popup about the Host submitted location.
-
It contains approve/reject options
-
Text box for the reason of rejection
-
It will send user email about the review result.
-
-
Photos
-
this opens up a new page to manage photos
-
-
-
-
The map will be a google map.
-
The map view will display markers for all locations with all map features provided by google:
-
clicking on marker will open up a dialog with the information displayed.
-
dropping pin to create new marker
-
zoom in/out
-
browsing the map
-
-
User can add a new location by dropping an item in the map if it is a map view. Or via dialog if it is a list view.
-
It will create a Location entity in DB.
-
-
-
Location photos page
-
This page display gallery of the photos of selected location/host
-
User can delete/upload photos.
-
The photos links will be associated/stored in LocationPhotos table
-
-
We are hosting the photos locally. Limit image file size to keep the site light.
-
-
Tours Page
-
This page display table of tours
-
A Tour may occur one or more times during the year, we introuces a TourGroup model, each group represents a set of dates that the tour will take place with specific locations.
-
Filtering table with tour related fields :
-
tour time (range)
-
location fields
-
name
-
.. add any other fields that you see useful.
-
-
Table will have actions :
-
delete
-
Should display confirmation dialog before processing the request.
-
-
edit
-
-
There will be an option to add new tour.
-
It will create a Tour entry, TourGroup, and TourDate entry in database.
-
TourGroup will happens once per year, and for a defined set of days, add the option to allow user to select tour dates, and insert TourDate entry for each selected date.
-
-
-
There will be option to allow adding new tour group to existing tour.
-
-
Tour details page
-
Since we have multiple tour groups per tour, we will display one tour group at a time with ability to view different tour group from a drop down list.
-
This page display table of hosts registered to the tour group, and table of users registered to the tour group.
-
filtering host table with fields :
-
same as hosts page filtering
-
-
filtering users table
-
same as users page filtering
-
-
action buttons :
-
Review registration
-
This will be submitted by host
-
approve/reject option
-
text box to fill message to send it along with review result
-
send email to Host
-
-
delete
-
Display confirmation dialog before processing the action
-
-
edit
-
-
ability to add host directly to the tour.
-
This will insert new record in TourHostRegistration table.
-
-
ability to add tour group to current tour.
-
Models Definition
-
User :
-
email
-
password
-
phone
-
role_id (foreign key)
-
-
Role
-
role_name
-
attendee (default value)
-
host
-
organizer
-
admin
-
-
role_description
-
Tour attendee
-
Tour host
-
Tour organizer
-
Tour Admin
-
-
parent
-
-
Location
-
user_id (foreign key)
-
address
-
city
-
state
-
zip
-
lat
-
long
-
isApproved
-
approvedBy
-
-
LocationPhotos
-
location_id (foreign key)
-
url
-
name
-
description
-
displayOrder
-
-
Tour
-
name
-
description
-
year
-
url
-
-
TourDateGroup
-
tour_id
-
organizer_id (User - can be organizer or admin)
-
organizerNotes
-
-
TourDate
-
tourDateGroup_id
-
date
-
-
TourAttendeeRegistration (represents users interested in attending the tour)
-
user_id
-
tourdate_id
-
-
TourHostRegistration (represents the hosts/locations registered to the tour)
-
location_id
-
tourdate_id
-
status (status of the registration request)
-
reason (if rejected)
-
Authentication and Authorization
Use Yii Framework built in Authentication and Authorization module for Authentication and Authorization.
Frontend UI and JS
-
AngularJS can be used as JS framework
-
The UI will be the default Bootstrap UI, we are looking for simple, and clean UI.
Apache web server
The web application will be hosted on apache server. Provide the setup and configuration scripts needed to accomplish that.
Configurations
Follow the standard/best-practices to configure the Yii web application, all sensitive data and environment specific information should be configured.
MySQL Scripts
-
Provide scripts for all tables.
-
Provide script to insert default user.
-
Provide script to insert sample data.
Yii Folder Structure
Follow the recommended folder structure by Yii Framework
Final Submission Guidelines
Deliverables
-
All source code and script implemented the requirements.
-
Detailed deployment document that includes the following :
-
Setup prerequisites (what software needed to be installed .. etc)
-
Folder structure
-
Configuration
-
Steps to run the application
- Verification steps
-