comp730:MeAndYou Summer 2017 Feature Requests


 * Home
 * MeAndYou
 * Semesters
 * Summer 2017
 * [Feature Requests]

General Changes To Project

 * Rename "Old Friend" to "Friend"
 * Rename "Family Member" to "Family"
 * Rename "Long Lost Love" to "Love"

GUI Changes

 * Banner Advertisements on the top of the dashboard and other pages
 * Timeout in-between unsuccessful logins
 * Delay reloading login page, and actually put a limit on the timeframe of when the user can login again - such as with another timestamp field (--> DATABASE REQUIREMENT)
 * Logging of successful and unsuccessful logins
 * With IP address and any other relevant information
 * Database table for login attempts? (--> DATABASE REQUIREMENT)
 * Don't store the incorrect passwords!
 * Under Matches, check and see what attributes are set to viewable, first by the search type group, and then by the individual user.
 * Default is to only display name and e-mail address. If more is shared, make a link on the Matches' firstName lastName to direct the Match to a page that displays the additional information.
 * The user should have the option, of either user of a Match, to specify that the Match was incorrect, and this should reset the search to "Incomplete", set the matchId to NULL, set isMatched to FALSE, and set the Match record to isIncorrect == TRUE, and set the other search to "Incomplete", set its matchId to NULL, and set its' isMatched to FALSE, while also setting user blocks for that searchType in each of the users' user-specific user banning as !
 * This, however, doesn't consider that a user search was the incorrect type, but they can change the Privacy & Security settings in dashboard.
 * Notification System
 * A message that pops up when a user has a new match. (JavaScript)
 * Loop until a new notification is found, and if found, display the message.
 * Need to set caching details for MEANDYOU2 website.
 * Bug on Account Edit - it's not possible to change your username, currently.
 * Take off "News and Updates" on index.php?
 * Or put something that relates to users?
 * Statistics - only show if significant.
 * Make a link for aboutus.php on navigation bar.
 * Add salt to authentication? Unnecessary?
 * Update aboutus.php with Summer 2017 info.
 * Update icons and logo.
 * Better description of password requirements at signup.
 * Change password page when logged in:
 * Enter Old Password:
 * Enter New Password:
 * Confirm New Password:
 * If all correct, store password. Otherwise, error message.
 * Privacy & Security Settings Page
 * Set view permissions.
 * Set searchable permissions.
 * Automatically populate attributes fill-in pages.
 * Send a Happy Birthday Message
 * From User Account
 * Automatically calculate sex of Crush/Love Searches based on user's defined Sexual Orientation
 * Health & Fitness Advice Based on Body Mass Index (BMI), as calculated from Height and Weight
 * Can integrate with healthcare services? Or health applications?
 * Ability to select backgrounds for Me&You website dashboard portal?
 * Ability for Friends and Family to endorse / approve of Crushes and Love interests of a user
 * Security & Privacy settings to this effect, which allow your existing users to view your other matches
 * i.e. Family can view other Family and Friends, Friends can view Crushes, Specific User can view Love
 * Individual user permissions take precedent over group permissions
 * i.e. if User1 is blocked from seeing my information field, and User1 is a Crush, and the group Crushes is allowed to see my information field, then User1 is not allowed to see that information field.
 * Buttons to block or allow all
 * For my entire profile (applies to Crushes, Old Friends, Family, and Love)
 * For each match type
 * Warning message when overwriting old security & privacy settings
 * Public Persons profile feature
 * Users can endorse such public persons, such as politicians
 * If the user deletes a search, should it also delete the matches that are associated with it, automatically?
 * Prompt the user to verify they want to do this with JavaScript Alert?
 * Update about us page with Summer 2017 info
 * Make the website load faster - i.e. jQuery not needed on all pages? Drop unnecessary code from specific pages
 * Chat dialogue that Matches can communicate through
 * Can they still view their chat history and chat if the match is deleted? Or only not when they are banned?
 * Delete attribute cells that are empty, or have been set to NULL by deleting the content inside them, or contain whitespace?
 * Also delete searchAttributes
 * Search expiration notification
 * Failed password notification for the user
 * Make queries for searches be for the time period (maximum) for each type of search
 * Generate PHP code automatically based on the database structure
 * Automatic REGEX based on what is in the database for regex structure
 * Code to avoid errors in data structure
 * Make it so can't proceed unless JavaScript says it is ok
 * Then also check the values with regex in PHP, to make sure
 * Make sure data can't be transmitted from a third party site, or from an unauthorized page on the same server.
 * Show how many searches the user is allowed per search type.
 * Paying customers get more searches per type?
 * Paying Customers = Public Persons / Figures? Companies? Brands? Organizations?
 * How to get them sucked into the website, but then charge them to advertise.
 * Add dynamic option to add multiple e-mail addresses
 * In User Profile
 * In Search Forms for Crush, Friend, Family, Love
 * Add dynamic option to add multiple hometowns
 * In User Profile
 * In Search Forms for Crush, Friend, Family, Love
 * Make form fields to lengths that they are on other websites, such as:
 * First Name (*****************************)
 * Middle Name (*****************************)
 * Last Name (*****************************)
 * Address (***********************************************************)
 * City (*******************)
 * State (****)
 * Zip Code (*********)
 * Don't duplicate notifications for the same searchesId
 * Don't duplicate notifications of the same type
 * Unless specifying the uniqueness, such as with dateTimeStamp, and say what was changed
 * Limit length of password? (Buffer Overrun Problems?)
 * Fix issue that JavaScript says "Passwords Match" when password entered is NULL
 * Option to delete your account
 * Require entering password, secretAnswer1, secretAnswer2, and secretAnswer3
 * Require confirm by e-mail account
 * Privacy Policy posted
 * Terms of Service / Terms of Use posted
 * A type of JavaScript message that disappears
 * Some then move into the list of notifications when the page is refreshed, some don't go anywhere and just disappear
 * Notifications moved to a separate page, rather than on the top of the Dashboard page - taking up precious room
 * Let the user know there is up to a 4 minute delay in the time between when a search is entered and when a match can be determined based on what is provided - and to please be patient.
 * The system will notify you whether you have a match or not within the 4 minute timeframe.
 * Have pages to fill in, such as:
 * "Preferences for a Soul Mate"
 * "About My Ideal Match"
 * Make the user fill them out, and they don't necessarily apply to each search, but they can be searchable. Extended from User Profile. Specific to each match group. They don't display to other users.
 * Two-factor authentication, through e-mail and through a cell phone number?
 * Allow to submit when there are no changes, but on Database calls, compare currentValue with enteredValue
 * Check if Field Exists with a SELECT COUNT(*)
 * If trueExists, then get the Field Value with SELECT statement and compare the two values with each other
 * If they are the same, skip for each value
 * If falseExists, then use INSERT statement to insert the field into the database.
 * Error message for when account doesn't exist
 * Don't allow update of password when the password hasn't changed
 * DB --> Check to see if $hash matches past value of $hash - if so, don't update
 * Wrong Username / Password Combination
 * Display error message
 * Send notification to user?
 * By e-mail?
 * "Someone tried logging into your account with an incorrect password - do you need to change it?"
 * Limit the number of wrong username / password combinations per IP address or session?
 * On Modify Account
 * Change all searches to "Incomplete"
 * For each attribute / field - check to see if old value matches entered value. If so, don't update.
 * Also, if value doesn't exist, then insert the value into the database.
 * Maiden Name - for women only? For men, also?
 * What happens in Model.php when nameOfSearch exists more than once? Insert Timestamp into nameOfSearch? And then remove the timestamp after it's found again?
 * accountEdit - INSERT statement if SELECT COUNT(*) returns 0 for numRecords in database matching characteristics of account field.
 * Register --> Controller
 * If error - account already exists, then take back to register.php
 * JavaScript error if account already exists?
 * How would this work?
 * JavaScript call to query a website address that calls the database?
 * Or allow it to submit and then return the error?
 * Setup regex table entries in attributeTypes
 * Have forms call the regex formats from database to validate forms
 * Specify which fields are required on forms, such as searches?
 * Limit what URLs can post or get from controller.php
 * Limit what URLs can execute util.php
 * There could be a search based on past Hometowns, such that it could search the radius locally based on the past hometowns, and return a percent of proximity variant.
 * When the user attempts to edit a search that has the status "Matched", prompt them and ask them if they would like to delete the existing Match - otherwise they cannot edit the fields.
 * Only e-mail addresses @unh.edu can sign up for a new account.
 * UNH student or alumni must invite the user(s) that are outside of @unh.edu domain. Error messages if they don't have an invitation.
 * Logged in menu works of user navigates to part of site that doesn't require login, so they don't have to re-login after they leave that part of the site
 * Contact Information
 * For site administrator (NEED E-MAIL SETUP)
 * For faculty advisor (Michael Jonas)
 * Revise icons and logo
 * Verify that cookies are working properly
 * Set cookie when signing in
 * Erase cookie when leaving website
 * Have different questions for different types of searches / profile attributes
 * i.e. Attributes List - in case you want to search for users based on their attributes rather than verifiable information like name, address, birthday, and email.
 * More interesting information on Front Page pertaining to user searches
 * A ticker - "John M. looking for Love named Jody P." or something along those lines
 * A page that lists what different users are searching for in Crushes and Love
 * Search Category for Co-Workers
 * Don't allow searching for personal attributes on these searches
 * For Co-Worker Attributes:
 * Worked For (Company / Organization)
 * Title
 * Start Date (Changes value when entered into GUI???)
 * End Date (Changes value when entered into GUI???)
 * Company / Organization Address, City, State, Zip Code

Company Profile Site (paid inclusion) (--> DATABASE REQUIREMENT)

 * What attributes pertain to Company / Organization?
 * of Employees
 * Website
 * Email
 * Contact Person
 * Industry
 * Stock Ticker Symbol (optional)
 * Mission Statement
 * Vision Statement
 * Description
 * Logo (photograph)
 * Picture of Location, i.e. store front
 * Product(s) Offered
 * Service(s) Offered
 * Organization Table in Database (--> DATABASE REQUIREMENT)
 * Organization Attributes stored in Organization Attributes Table
 * orgAttributeType - Attribute Types for Organizations
 * orgAttribute - Attributes for Organizations
 * Linked to Person Table
 * Page Administrator

Locations Table (--> DATABASE REQUIREMENT)

 * For meeting places
 * Linked to Organizations Table (optional)
 * Finds location based on GPS coordinates or address provided, or can select location on a map?
 * GPS Coordinates
 * Street Address, City, State, Zip Code
 * Linked to Person Table
 * Page Administrator
 * Setting
 * Description
 * Environmental Characteristics
 * Weather Patterns
 * Description

Meetings Table (--> DATABASE REQUIREMENT)

 * For actual meetings
 * Attendees (comma-separated personId)
 * RSVP status per user
 * Linked to Locations Table and/or Organizations Table

Products / Services Table (--> DATABASE REQUIREMENT)

 * Product / Service name
 * isProduct
 * isService
 * Produced By (Linked to Organization Table and/or Person Table)
 * Price
 * URL to purchase
 * URL to view details
 * Description
 * Recommendations
 * personId(s), comma-separated, who have purchased product / service
 * Ratings

Ratings Table (--> DATABASE REQUIREMENT)

 * Linked to Organization Table?
 * Linked to Person Table?
 * Linked to Other Tables?

Different Match Combinations

 * Would if a user wants to match:
 * Friend & Crush
 * Friend & Love
 * Friend & Crush & Love
 * Crush & Love
 * Friend & Co-Worker
 * Crush & Co-Worker
 * Friend & Crush & Co-Worker
 * Should the Engine rule out searches of Family members of other types of searches?
 * Should Family have a relation drop-down, such as:
 * Mother, Father, Brother, Sister, Cousin, 2nd Cousin, In-law, Niece, Nephew, Aunt, Uncle, Grandmother, Grandfather, Great-Grandmother, Great-Grandfather, Great-Great-Grandmother, Great-Great-Grandfather
 * Any others?
 * Should the drop-down limit selections based on entered sex, or populate sex when chosen?
 * Store this table in database
 * New table? (--> DATABASE REQUIREMENT)

Privacy & Security Page

 * A page that shows blocked users and incorrect matches
 * Blocked Users - (username), (privileges revoked)
 * Incorrect Matches - (username), (dateTimeStamp of Match), (matchType)
 * [Delete] - sets isActive to FALSE, [View Search] - opens the search associated with the Match
 * Blocked / Incorrect Searches Page
 * (per user)
 * The user can only block or mark incorrect searches with matches that have already been matched.
 * Blocked / Incorrect Searches Page
 * (per user)
 * The user can only block or mark incorrect searches with matches that have already been matched.

Match Pages

 * Allow Viewing By User - this can occur only after the user is aware of another user through a match.
 * Different for Each Type of Match
 * i.e. Crush Match Profile, Friend Match Profile, Family Match Profile, Love Match Profile
 * Match profiles per matched user
 * Created after the Match has been made, or can be attached to a Search and displayed to whomever the Search Matches to.
 * Ability to upload a photo.
 * Ability to insert text with limited formatting capabilities
 * How would you strip out the unwanted or un-allowed HTML and other programming tags / commands?
 * Ability to choose what information displays on each of the Match profiles
 * History of Match Profile stored, and option to revert back to an old version of the Match Profile, or view an old version.
 * A way for users to upload videos to their Match Profiles
 * Issues with copyright protection? Such as a report content link?
 * A way for users to upload music to their Match Profiles
 * Issues with copyright protection? Such as a report content link?

Administration Page (backend)

 * Administration page is password protected, and is separate from the regular website.
 * It will probably exist in a directory, such as /admin/ or /administrator/
 * Moderator and Administrator can suspend a profile
 * Moderator would have a limited view of the Administration panel, only limited to moderating.
 * Moderator can moderate content
 * Moderator can suggest to ban a user, which then goes to an Administrator to decide if banned or not.
 * View blocked / incorrect matches.
 * Ability to delete matches.
 * Ability to manually create matches.
 * matchType =
 * ~ Crush (M)
 * ~ Friend (M)
 * ~ Family (M)
 * ~ Love (M)
 * View a User Profile with statistics about user.
 * View a transcript of a user's activity on the website.
 * Searching / matching through a command line search / match system in the backend.
 * Ability to add new attributes and attributeTypes.
 * Ability to create attributeTypes in Control Panel / Administration Page.
 * Failed Password notification / logging for Administrators
 * When there is an incorrect login by a user.
 * When another person tries to gain access to an administrative account.
 * Ability to ban users for misuse.
 * roleType = 0 for banned user.
 * A to-do list for sending out notifications, and performing other actions such as cleaning up the database
 * Not done automatically - requires the Administrator to interact with the website to perform the requested actions
 * I.e system changes, system maintenance (sent to active users)
 * When log files get to a certain number of lines, they roll over into the next file.
 * The administration panel can read the various different log files.
 * Ability to *FIX* the database, should there be values that are NULL or white space, that causes the engine to not work.
 * Blocked / Incorrect Searches Page
 * (per Administration page - backend)
 * A portal that allows changing the database structure in the graph database.
 * Administrator logs
 * Log files by day, month, year
 * Notification to users when a new attributeType, or a new attribute is added into the database
 * Such as a new field they can fill out, rather than them learn about it 10 years later
 * such as a field that their matches have filled out since they last looked at the Match profile
 * Ability to flush out old records to speed up website
 * Delete all records from Searches that are "ERROR" status
 * Delete all records that are inactive and not needed, i.e. userNotifications
 * Show History / Properties of User Profile
 * Show when values were created or last edited
 * Show history of userNotifications
 * Note that history may be deleted from the website after 30 days of inactivity
 * Specifically, userNotifications
 * Ability to change settings related to the banner advertisements in the Administration Control Panel.
 * Mass Change Properties in Database
 * Correct Corrupt Data in Database
 * What is corrupt data?
 * Mass email to all users
 * To make announcements
 * Users can change communication preferences
 * Different types of mass communications, such as:
 * System Messages
 * Mandatory Messages
 * User Messages
 * Administration Messages
 * Moderator Messages
 * Users can opt-out of emails
 * Communications also show up in GUI when user logs in
 * Integration of CRM for Integrated Marketing Campaign
 * Intelligent messaging based on user's activity

New Look for Dashboard

 * The new look includes new icons for Friend, Family, and Love designed by Patrick R. McElhiney.

New Look for Dashboard - Manage Your Profile

 * The new look includes adding a lot of additional database field options and categories.

Additional Database Properties



 * Person
 * Add salt field for password salting.
 * isActive (BOOLEAN)
 * TRUE - account is active.
 * FALSE - account is deleted, and user cannot login.
 * When isActive is set to FALSE, Searches, searchAttributes, and other information must be set to isActive = FALSE
 * Record cannot be viewed or searched.
 * Errors are displayed when another user tries to access their match to the user.


 * Searches
 * isMatched (BOOLEAN) - if true, then indicates the search has been matched
 * matchId (INT) - indicates which match record correlates to the matched search.
 * (FK) to matches.id
 * isActive (BOOLEAN) - when true, the search is active. When false, it is treated as if it was deleted.
 * If isMatched, remains true even after timer expires.


 * Matches
 * isIncorrect (BOOLEAN) - when true, indicates that the user has indicated that the match was incorrect.
 * Upon setting this value, both matches are set to true, even if only one side indicates it. Also, isMatched and matchId in searches are set to default values.
 * isActive (BOOLEAN) - when true, the match is active. When false, the match is considered deleted.
 * If isIncorrect is true, and isActive is false, then it is a deleted incorrect match.
 * If isIncorrect is true, and isActive is true, then no other identical matches can be made.


 * Attributes
 * viewCrush (BOOLEAN) - if true, this user group can view information.
 * viewFriend (BOOLEAN) - if true, this user group can view information.
 * viewFamily (BOOLEAN) - if true, this user group can view information.
 * viewLove (BOOLEAN) - if true, this user group can view information.
 * viewSpecific (VARCHAR) - contains userId(s) (person.id), these specific users can view information, or (!) not view information.
 * i.e. 30,!44,107 - which means that the userId of 44 cannot view the information, while 30 and 107 can.
 * searchCrush (BOOLEAN) - if true, this user group can search for the information.
 * searchFriend (BOOLEAN) - if true, this user group can search for the information.
 * searchFamily (BOOLEAN) - if true, this user group can search for the information.
 * searchLove (BOOLEAN) - if true, this user group can search for the information.
 * groupId - which group of attributes the attribute belongs to.
 * i.e. Address (Group 1), Address (Group 2) - so you don't have to use multiple attributeTypes for the same attributeType for common attributes in groups, such as addresses that have street address, city, state, and zip code, as well as other attributeTypes such as the timeframe the user lived at the specified address.
 * orderId in attributes table - to use with group ID
 * Add a Description field in the database in attributes table, so for phoneNumber2 the user can specify a description, such as "Cell Phone", or have a drop-down box with the various choices and store them as Plain Text in the database.
 * isCrush
 * isFriend
 * isFamily
 * isLove
 * Determines if each of the attributes show up when the user goes to insert or update their data.
 * Allow user to customize attributeTypes, such as by selecting whether or not each individual attribute is:
 * searchable - searchable by matches
 * viewable - viewed by matches
 * applicable - such as maidenName and the user can select that it doesn't apply to a certain type of search, such as Crush, or Family, so the entry box disappears
 * They would also need the option to re-instate the field if they deleted it by accident, such as on Privacy & Security Page


 * attributeType
 * pageId - which page of attributes the attributeType goes on.
 * isActive (BOOLEAN) - the attribute type is active in all regards.
 * searchCrush (BOOLEAN) - the attribute type is searchable by the Crush user group.
 * searchFriend (BOOLEAN) - the attribute type is searchable by the Friend user group.
 * searchFamily (BOOLEAN) - the attribute type is searchable by the Family user group.
 * searchLove (BOOLEAN) - the attribute type is searchable by the Love user group.
 * weight (INT 3)
 * minWeight (INT 3)
 * i.e. [10, 0] email; [8, 5] firstName; [8, 5] lastName; [8, 5] birthDate; [5, 0] nickname
 * Optionally match to maidenName
 * For birthDate, the (year) - or- (the month and day) must be a perfect match for a 5.
 * Add sexual orientation to the attributeTypes table
 * Past names?
 * Legal name?
 * Setup regex table entries in attributeTypes
 * Ethnicity Attribute
 * Nationality Attribute
 * Set each attribute type as whether or not it is:
 * Viewable (i.e. viewCrush)
 * Searchable (i.e. searchCrush)
 * Applicable (i.e. isCrush)
 * For each type of attributeType


 * selectionType for attributeTypes
 * selectionType.type { text input, drop-down menu, checkbox, radio, or textarea }
 * selectionType.group to group together various types of inputs, i.e. "State" for the States drop-down box
 * selectionType.orderId - order in which the values in the forms are displayed, i.e. 0, 1, 2, 3, 4, 5...


 * attributeGroups Table to hold the groups of Attributes and the names of each of the Attribute Groups, and also ability to specify what page they go on.


 * loginAttempts Table
 * wasSuccessful (BOOLEAN), 1 = login was successful; 0 = login failed.
 * ipAddress (VARCHAR) - allow IPv4 and IPv6
 * ipv6 (BOOLEAN) - if the IP address is ipv6, then TRUE. Otherwise, FALSE.


 * Under pages, there could be numColumns, columnWidth, numRows, rowHeight in the database that defines how many fields are shown on each page, and they can be changed with each page


 * Use "IF EXISTS" logic with database calls?
 * Searchable settings by individual attribute.
 * Is it possible to make an automatic process in MySQL that populates roles table and searchAttribute table with information pertaining to such transactions?
 * Automatically create a standard user role in roles table when a new person record is created.
 * Automatically create a searchAttribute row for every attribute entry that pertains to a searchID > 0.
 * Modify them when attributes records are modified
 * Delete data from table when all attributes have been deleted from attributes table, where searchesId = searches.id (Software)
 * A locked down MySQL user for authentication purposes, and a general MySQL user for all other queries.
 * Different users for Front-End and Engine?
 * With prioritizing the Engine user?
 * Set ID tags to INT(9) or smaller, rather than MEDIUMINT?
 * How big do they need to be to support all of the potential users in the world? Go with that number range, just to be sure.
 * Would if a match is made at the same time the search is deleted?
 * Ability to set a "required" field in the Database for different match types and different search types
 * If minimum requirements not met, spit out a notification that asks the user to enter more information
 * Set database calls to user meandyou2 - centralize the settings for all database calls in one call to a specific file, such as util.php - and don't store the username / password combinations in the directory in a text file. Place them in a protected PHP file.
 * Fix problems with special characters crashing searches - when you add a search.
 * Another type of VARCHAR? SVARCHAR? or something like that - research
 * Database Change for Foreign Languages
 * What values do the database columns need to be to allow foreign characters?
 * Connect to database using SSL or something similar?
 * Database port should be closed to the outside world.

Matching Agent Process

 * First patterns are compared to all patterns.
 * When there are no more compares to relate to, the process moves the patterns window to the next patterns window, and the compares starts at maxPatternNum + 1
 * maxPatternNum would go to numPatterns * 2 after the first set is complete.
 * When there are no remaining compares windows, and after patterns have been compared to each other, the process is completed.
 * When maxCompareNum reflects less than the normal numCompare times the numWindows, it is approaching the end of the process. There will not be another set of compares.
 * If numPatterns is less than sought out patternsWindow, then there will be no compares to compare to, as long as numPatterns was less than patternsWindow during the initial iteration.

Integration of a Graph Match Database

 * Integration of a match database based off a graph database of related values to, for an example, the name "Michael", which can also be known as "Mike", or "Mikey"
 * Set levels of match for similar name, nickname, other name instances, i.e. on a 1-10 weight scale, how relevant is the match, and then times the multiplier by the percent matched
 * This way the match engine would be more inclusive to match different possibilities and then pick the closest value record, if it's over a certain threshold, such as 85%.
 * How do you query the graph database server to determine if one name relates to another name?

Matching Agent Modifications

 * Before considering whether or not to match two records, check to see that the searches are not isMatched == true for either record, and if they are matched already, then set the matchId when they are matched
 * Possibly query for records that are isMatched == false and matchId < 1 or == NULL when pulling in records to compare for matching.
 * Also, before considering whether or not to match two records, check and see if the attributes are set to searchable, per search type
 * So, if searchType == Crush, then query records that have searchCrush == true.
 * Before making a match, check and see if there is already a Match under those searchIds
 * If yes, discard option to store the Match
 * May be indicated either by existing search, or by isIncorrect == true
 * Check and see that the attribute, before using it in the search, is set to searchable for that userId, or do not add it to search criteria if the userId is banned from searching for that attribute. The user allow/deny rights supersede that of the group rights as searchable.
 * Matches that have been deleted by setting isActive == false will not be re-matched.
 * When a search is made, the status should be set to "Matched" when the search has been matched to another search. Both searches of the Match should be set to "Matched"
 * These records will be ignored, and also used to determine if there was an incorrect Match indicated by the GUI input, to determine if the status has been changed to "Incomplete" while the Match has been set to isIncorrect == true.
 * Send a Happy Birthday Message
 * Automatically from the system, i.e. Engine 2.0
 * From User Account
 * Automatically calculate sex of Crush/Love Searches based on user's defined Sexual Orientation
 * Individual user permissions take precedent over group permissions
 * i.e. if User1 is blocked from seeing my information field, and User1 is a Crush, and the group Crushes is allowed to see my information field, then User1 is not allowed to see that information field.
 * Run test data to see how engine works, with Debugging on
 * Make sure Engine checks both person table and attributes table for fields such as First Name, Middle Name, Last Name, etc.
 * Make Engine so it reads the Attribute Types and compares them to each other, rather than hard coding each comparison in
 * Ability to set weight in attributeTypes and other types of weights - or an easy way to program the Engine to take different conditions of different values from attributes table
 * Database holds configuration of:
 * Match Types
 * Attributes that pertain to them
 * Attribute thresholds, or what the minimum required percentage of match is
 * i.e. 100% match required on e-mail, 100% match on sex, 90% on Last Name
 * or if 0% match on e-mail, then 100% match on First Name and Last Name, 100% match on sex (and sexual orientation if Crush or Love)
 * Ability to define different percentages for different match types
 * Ability to define different scenarios, and then select one on the fly based on the type of match or type of information provided to search, or information available to search for
 * Ability to configure the Engine with a xml document, or text document, or JSON document
 * If there is no match, recommend that the user improve their inputs on the search and to search again.
 * Engine Can Determine Approximate Location of User for Matching Purposes
 * Location awareness based on street address, city, state, and zip code.
 * Country? Add to Attributes
 * Ability for Engine to get GPS coordinates for a given address, and compare it by distance to another address.
 * Ability for Engine to determine Zip Code based on Address
 * Store value to attributes
 * Ability for Engine to determine City and State based on Zip Code
 * Store value to attributes
 * Search based on multiple addresses
 * Years / Dates lived at address
 * Zip Code translated to City, State table
 * Instead of pulling in all of the data from MySQL, have multiple types of queries to locate records based on matching attributes.
 * Then, if no matches are found, append the search to the whale match engine
 * Whale Match Engine searches using algorithms whereas the simple queries don't take into consideration variances in the data.
 * Mark invalid records in Searches as "ERROR", so they don't get reprocessed, and write to error log what happened
 * Fix the problem with IsNullOrWhitespace for each of the attributeTypes for each of the Match Types
 * i.e. Maiden Name on Crush
 * Would someone with a Maiden name be able to have Crushes?
 * Not likely

MeAndYouAgent Debugging Code

 * Add code into the Engine to help to debug and show how it works
 * Print out debug to Console
 * Print out debug to a File such as MeAndYouAgent.log
 * Format of Log / Debug Console:
 * ClassName Information
 * On Error: Output all variable values and any other information that would help to identify information pertaining to debugging Engine.

Anti-Data Degradation Process

 * Would if values in the database are invalid, or bad data, or blank, or corrupt?
 * Would if there are duplicate records?
 * How do you prioritize one of the duplicates, or do you allow the system to match to all of the duplicates?

Mobile App

 * A mobile app that connects to the website and the database?

Site Security

 * How do you prevent a user from creating multiple profiles?
 * Determine the maximum size of a password, and enforce this in regex in the form, and regex in the PHP
 * Determine with a 32-bit salt, what the maximum size of a hash value can be
 * Automatically generate a random salting value for each individual password, to ensure there are no similar hash values, i.e. multiple users using the same password, and it makes it extremely difficult for someone to figure out the passwords from hash values

How to Protect the Database From Invalid Records
1. regex at the entry level 2. regex at the PHP query / store value level 3. discard records that have invalid data from the engine, and mark those records as inactive

Ideas Too Complex To Tackle Right Now

 * Facial Recognition Feature
 * Allow the upload of a photo to match a user based on facial recognition.
 * Foreign Language Translator
 * Integrated translation to other languages, and detection of foreign languages in content with auto-translation to the user's language.
 * A drop down box in Account Settings to select which language the user would like to view the site in.
 * Languages Spoken Attribute
 * Languages Table
 * (id), (name)
 * 0, English
 * 1, Spanish
 * 2, French
 * Ability to select multiple languages.
 * Optionally, create an installer for MeAndYou using an /install/ directory
 * Custom Encryption algorithms to encrypt and decrypt passwords?
 * Auto-Fill Fields, such as for:
 * First Name
 * Middle Name
 * Last Name
 * Street Address, City, State, Zip Code
 * Engine must support multiple languages
 * A system that helps users translate information on website that is either not translated, or is translated incorrectly
 * Requires a moderator to authorize the change
 * Zip Code Search
 * (12345)(67890)(23456)
 * (34567)(78901)
 * Figure out how different Zip Codes relate to each other on the map, and search adjacent zip codes in that area if no match found