• Compete
  • Learn
  • Community

    SunShot - National Solar Tour - PHP Management System







    POINTS: 630

    The challenge is finished.
    Show Deadlines icon-arrow-up

    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 :

      1. email

      2. password

      3. phone

      4. role_id (foreign key)

    • Role

      1. role_name

        1. attendee (default value)

        2. host

        3. organizer  

        4. admin

      2. role_description

        1. Tour attendee

        2. Tour host

        3. Tour organizer  

        4. Tour Admin

      3. parent

    • Location

      1. user_id (foreign key)

      2. address

      3. city

      4. state

      5. zip

      6. lat

      7. long

      8. isApproved

      9. approvedBy

    • LocationPhotos

      1. location_id (foreign key)

      2. url

      3. name

      4. description

      5. displayOrder

    • Tour

      1. name

      2. description

      3. year

      4. url

    • TourDateGroup

      1. tour_id

      2. organizer_id (User - can be organizer or admin)

      3. organizerNotes

    • TourDate   

      1. tourDateGroup_id

      2. date

    • TourAttendeeRegistration (represents users interested in attending the tour)

      1. user_id

      2. tourdate_id

    • TourHostRegistration (represents the hosts/locations registered to the tour)

      1. location_id

      2. tourdate_id

      3. status (status of the registration request)

      4. 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.


    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


    • 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

    Reliability Rating and Bonus

    For challenges that have a reliability bonus, the bonus depends on the reliability rating at the moment of registration for that project. A participant with no previous projects is considered to have no reliability rating, and therefore gets no bonus. Reliability bonus does not apply to Digital Run winnings. Since reliability rating is based on the past 15 projects, it can only have 15 discrete values.
    Read more.


    2015 topcoder Open


    Final Review:

    Community Review Board



    User Sign-Off