The application will authenticate users against the MySQL Database and will collect data via forms and store them in a MySQL Database.? There are 4 types of forms and conditions which will modify the forms and therefore collect and store different fields in the database.
The PHP-based application will be installed on a Linux-based shared hosting server (such as [url removed, login to view]).? A MySQL database connection will be required.? The purpose of the application is to collect information about media files and store them in a database to be consumed by another application.? The fields will be described in detail when the job is accepted and agreed upon.? A rough description is provided below.
Installing the application should be very simple and should work as follows:
1. User uploads required files (or directory) to web server via FTP.
2. User accesses the application directory via web browser
3. Application checks basic requirements, such as being able to write a configuration file and if requirements fail, provide user with possible sets of actions (Note: I already have the code to run these checks and provide feedback. For the purposes of this project, simply create a function that returns a boolean value.? If it is true, then proceed to step 4, otherwise, the function called will output results to the client and exit.? For this project, create a dummy functions that can return true or false based on a hard coded value, just for testing.)
4. Once all the tests are passed, prompt the user for: database name, database login, database password, administrator userid, adminstrator password, application license key
5. Once the user submits the form, the application will use a function to validate the license key.? (Note: I already have this code as well, so for the purposes of this test, create a dummy function that returns a boolean.? If false, display a license error on the screen back to the user.? If true, then authenticate to the database and create the database tables, then add the administrator username/password to the users table.? Also write the DB information into a [url removed, login to view] file that is consumed by the application each time it runs.? If there are errors, such as db name or credentials are incorrect, then present errors back to the user and re-request input.
6. Upon success, redirect user to the main screen.? This time, because [url removed, login to view] is in place, instead of asking for initial setup information, it will ask the user for an ID & password to login to the application.
The application & interface:
Once a user authenticates, they will be placed in the main application screen.? There are several interfaces required.? The specific design is not set in stone.? Therefore, multiple exaples below, may fit in a single screen, for example.? The basic functionality is described below.
1. Manage user accounts (the availability of this function will be restricted to certain license types.? The application will have multiple types of licenses.? The exact nature of this is still being decided.? For now, a dummy function in the code should check upon starting the session, whether this is available or not.
2. Manage authorized domains: allow the user to manage a list of domains that are authorized to consume the data.? Although this is a function of a separate application, the ability to add & delete domain names is important so that they can be entered into the database. These domain names will also be consumed later in one of the other data collection forms.? This is also a restricted functionality.? The number of domains that can be added will be determined by the number of licenses.? The application needs to be smart enough to actually ignore entries above the number of licensed domains, so that if a user adds a domain directly into the database, we will ignore anything past the number of licenses.? For the purposes of this project, just create a dummy function that returns an integer and use that integer as the number of allowed domains.? once the number of allowed domains is reached, a message should appear on the screen indicating such.
3. Default settings screen: During database creation, several default values will be populated.? These will be associated with the user that was created during the setup (administrator ID).? This will be called the "System Default Profile" and will contain values for all the fields we will collect in the forms to be described below.? The system default profile can be viewed, but cannot be changed.
4. The user will be able to create other "profiles" that will be associated with that user account.? When creating a new profile, the user should be prompted which existing profile to copy the values from as an initial template.? The user should be able to mark a profile as their "default profile"
5. The Settings/Profile screen should be tabbed.? We will need one tab for general information that applies to all media types and there are three types of media that we will collect information on, so there should be 4 tabs total.
6. Add Media: The screen will be used most of the time.? Since there are 4 types of media we will collect information about, There should be a pull-down that asks what type of media the user wants to add.? If the user selects video, there the video options should be shown, without a screen refresh (AJAX/jQuery type functionality).? If the user selects audio, then another forms is presented and similarly a third form will be presented for the third file type.
7. Next, the form, based on media type, will be pre-populated with the settings stored in the DB for the user's default profile.? If they have not created/selected a default profile, then the System Default Profile will be used. Note: the first field in the form is the profile name, which is a pull-down.? If the user selects a different profile, then it the form will need to be rebuilt/re-populated with via an AJAX call, without a complete screen refresh.
8. The user can make modifications to the form values for that specific media entry. Based on the input or selection of one option versus another, the fields themselves may change during the process.? For example, if they select "Other" in a field, then a text field would need to show up so they can enter free text.? This is just an example to demonstrate what I mean. Al feilds and fields relationships will be defined once the project is accepted.
9. There needs to be a screen to modify media already entered into the database.? This is similar to the add media functionality in that it will pull all data from the database.? However, instead of pulling data from a profile, it will pull it from the actual media record.? Because there may be many records, this "screen" needs to include database search functionality via AJAX calls.? As the user retrieves search results there should be an option to determine how many entries to display and a means of navigating to the next and previous set of results so the user can select the desired file.
10. Delete media entry.? Similar search functionality as described above in number 9.
The database schema will be jointly defined after the project is accepted and all the fields and final design options that are open to suggestion have been decided on.? I do not believe the detailed schema definition will impact the quote for the job as it should have a negligible impact on the total work.
In the future, I may want to make this application available in other languages, therefore all system messages, prompts, field names, descriptions, etc need to be stored outside of the application in standard language directories, such as "en" for English, "de" for Deutsch, etc.? The language files need to be used to display data to the client, based on the chosen language.? Note, this project will use only the English language and will not require any translation.
1. I am looking for a simple, yet elegant design to be provided with this project.? The interface needs to be as user friendly as possible and needs to support the major browsers as already described prior in the project.? Graphics design is NOT a requirement, however, it is a plus.? Please let me know if your cost estimate includes graphics design required to make the interface more user friendly and elegant.
2. The design (presentation) should be decoupled from the systems logic so that it may be easily updated in the future.
3. External CSS should be used rather than hard coding anything into the HTML or application.? Whereever possible, CSS should be used for visual effects instead of adding graphics elements.
Upgrading the Application
1. Ease of upgrading the application in the future is very important.? I would like as much as possible to put information into the database.? Once idea, which I would like feedback on is to be able to register the file types in the database (video, audio, other) and have the application look in the appropriate database table to to build the options tabs in the add/edit/delete media screens.? Also the code for the forms could be store in the database as well and associated with the entries for those file types, so that if a change was required, or a new file type was added, there would potentially be very little disruption to the code, but rather a simple database update.? Easy of upgrading is key, and the exact method is open for discussion, so I am looking for your ideas here.
Future Enhacements and Support:
Please describe if you are willing to make future enhancements to the application and what your hourly rate is.
Similarly, please describe if you will include any number of hours of support as part of this project after the application has been accepted.? If no support is included, please describe if you are willing to provide support on an hourly basis and what the rates will be, as well as what the expected turn-around time is for a support request.
1. Code should be well-formatted (proper indentations) to improve readability
2. No PHP shortcodes should be used such as <? $variable ?> in place of <?php echo $variable ?>
3. All functions should be clearly documented
I am able to provide testing assistance and feedback as often as you would like during the process.? Please describe how you would like to handle this.
I am looking to have this developed quickly.? Please describe an estimated date of completion for the project along with your quote.
I am willing to provide any additional information you deem neccessary for you to quote this project properly.? Please feel free to ask for additional information.? As explained above, some details which should not impact the effort required to complete the project (such as the detailed DB schema) will de defined once the project is accepted.
If any of the above requirements do not seem to make sense, please feel free to point them out along with alternatives along with your quote.