diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index ac5cf36..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/AllianceDb.sql b/AllianceDb.sql index 478816d..1c1ba10 100644 --- a/AllianceDb.sql +++ b/AllianceDb.sql @@ -198,7 +198,7 @@ CREATE TABLE Mental_Health ( ); -DROP TABLE IF EXISTS Metal_Type; +DROP TABLE IF EXISTS Mental_Type; CREATE TABLE Mental_Type ( Mental_Type ENUM('Counseling', 'Case Management', 'Substance Abuse', 'Psych Evals', diff --git a/app/.DS_Store b/app/.DS_Store index ed2e79b..d077d1f 100644 Binary files a/app/.DS_Store and b/app/.DS_Store differ diff --git a/app/static/.DS_Store b/app/static/.DS_Store index e1e5bc2..fb2bf16 100644 Binary files a/app/static/.DS_Store and b/app/static/.DS_Store differ diff --git a/app/static/css/index.css b/app/static/css/index.css index 01d31ea..35d8ec8 100644 --- a/app/static/css/index.css +++ b/app/static/css/index.css @@ -1,6 +1,15 @@ /* Created by Michael Chen */ -h3 { +body { + background-color: #111; +} + +.jumbotron { + background-color: #111 ! important; +} + +h1, h3, h4, li { text-align: center; + color: #FFC9C5 ! important; } #map { @@ -8,6 +17,10 @@ h3 { width: 100%; } +.pink { + color: #FFC9C5 ! important; +} + .login-div { text-align: center; display: block; @@ -22,7 +35,7 @@ h3 { .blk { border-style: solid; border-width:5px; - border-color: #EEEEEE; + border-color: #111; } .category { @@ -31,7 +44,7 @@ h3 { height: 300px; border-style: solid; border-width: 5px; - border-color: #EEEEEE; + border-color: #111; } @@ -81,6 +94,8 @@ h3 { + + float: none; margin-left: auto; margin-right: auto; diff --git a/app/static/images/atlanta.JPG b/app/static/images/atlanta.JPG new file mode 100644 index 0000000..764cdd7 Binary files /dev/null and b/app/static/images/atlanta.JPG differ diff --git a/app/static/images/emptystar.png b/app/static/images/emptystar.png new file mode 100644 index 0000000..e2e47ab Binary files /dev/null and b/app/static/images/emptystar.png differ diff --git a/app/static/images/star.png b/app/static/images/star.png new file mode 100644 index 0000000..1660469 Binary files /dev/null and b/app/static/images/star.png differ diff --git a/app/static/js/index.js b/app/static/js/index.js index 4f445e7..c528222 100644 --- a/app/static/js/index.js +++ b/app/static/js/index.js @@ -2,8 +2,116 @@ $(document).ready(function() { $(".dropdown-toggle").dropdown(); + $(".specific").hide(); + $(".Childcare").hide(); + $(".Education").hide(); + $(".Employment").hide(); + $(".Housing").hide(); + $(".Job_Readiness").hide(); + $(".Legal").hide(); + $(".Life_Skills").hide(); + $(".Medical").hide(); + $(".Mental_Health").hide(); + $(".Mentors").hide(); + $(".Networks").hide(); + $(".Supplies").hide(); + $(".Transportation").hide(); + $(".Vehicle").hide(); + $(".For_Children").hide(); + $("input").attr("style", "background-color: #CCC;") + $("textarea").attr("style", "background-color: #CCC") + $("label").addClass("pink"); + $("#edit-resource").on('click', '#addphone',function() { + var newDiv = $(".resourcePhone")[0].outerHTML; + $(".phone").append(newDiv); + $(".resourcePhone:last").attr("placeholder", "(000)000-0000"); + $(".resourcePhone:last").removeAttr("value"); + }); + + $("#next").click(function() { + $(".specific").show(); + $("#cancel").hide(); + if($("#Childcare").is(':checked')) { + $(".Childcare").show(); + } else { + $(".Childcare").hide(); + } + if($("#Education").is(':checked')) { + $(".Education").show(); + } else { + $(".Education").hide(); + } + if($("#Employment").is(':checked')) { + $(".Employment").show(); + } else { + $(".Employment").hide(); + } + if($("#Housing").is(':checked')) { + $(".Housing").show(); + } else { + $(".Housing").hide(); + } + if($("#Job_Readiness").is(':checked')) { + $(".Job_Readiness").show(); + } else { + $(".Job_Readiness").hide(); + } + if($("#Legal").is(':checked')) { + $(".Legal").show(); + } else { + $(".Legal").hide(); + } + if($("#Life_Skills").is(':checked')) { + $(".Life_Skills").show(); + } else { + $(".Life_Skills").hide(); + } + if($("#Medical").is(':checked')) { + $(".Medical").show(); + } else { + $(".Medical").hide(); + } + if($("#Mental_Health").is(':checked')) { + $(".Mental_Health").show(); + } else { + $(".Mental_Health").hide(); + } + if($("#Mentors").is(':checked')) { + $(".Mentors").show(); + } else { + $(".Mentors").hide(); + } + if($("#Networks").is(':checked')) { + $(".Networks").show(); + } else { + $(".Networks").hide(); + } + if($("#Supplies").is(':checked')) { + $(".Supplies").show(); + } else { + $(".Supplies").hide(); + } + if($("#Transportation").is(':checked')) { + $(".Transportation").show(); + } else { + $(".Transportation").hide(); + } + if($("#Vehicle").is(':checked')) { + $(".Vehicle").show(); + } else { + $(".Vehicle").hide(); + } + + }) + }); function goBack() { window.history.back(); } + + +// function searchname() { +// var sname = document.getElementById("Search").value; +// window.location = {{ url_for('searchName', name= sname) }}; +// } diff --git a/app/templates/edit_add_resource.html b/app/templates/edit_add_resource.html index dd4b25b..aada49c 100644 --- a/app/templates/edit_add_resource.html +++ b/app/templates/edit_add_resource.html @@ -2,36 +2,43 @@ {%block content %} -
-
+
+
- + value = "{{ resource[0][0] }}"> {% else %} placeholder = "Resource Name"> {% endif %}
- -
- + +
+ {% if phones %} + {% for phone in phones %} + + {% endfor %} + {% else %} + + {% endif %} + +Add
- {% else %} placeholder="123 E. EnterStreet St."> {% endif %} - {% else %} placeholder = "City"> {% endif %} - {% else %} @@ -44,27 +51,525 @@ placeholder="Zip"> {% endif %}
+ +
+ + {% else %} + placeholder = "Website"> + {% endif %} +
- {% else %} - placeholder="Enter Description"> + placeholder="Enter Description"> {% endif %} -
+ + {% for category in categories %} +
+ +
+ {% endfor %}
- - + +
- -
-
- +
+

{{ checkList }}

+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ + + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ + + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + +
-
+
diff --git a/app/templates/edit_user.html b/app/templates/edit_user.html index 32d406d..865edd3 100644 --- a/app/templates/edit_user.html +++ b/app/templates/edit_user.html @@ -1,44 +1,37 @@ {% extends 'layout.html' %} -{%block content %} +{% block content %}
-
- + +

Organization Name: {{ userdata[0][3] }}

+
- +
- +
- +
- -
- - -
-
-

Resources

+

My Resources

-
-
- -
-
diff --git a/app/templates/home.html b/app/templates/home.html index 4de5b42..76d3005 100644 --- a/app/templates/home.html +++ b/app/templates/home.html @@ -1,16 +1,33 @@ {% extends 'layout.html' %} {% block welcome %} - + {% endblock %} {% block content %}
-
-

Top Categories

+
+
+
+

Search for Resource by Name

+
+
+ + + + +
+
+
+
+
+

Search for Resource by Category

+
{% for category in categories %} @@ -50,7 +67,7 @@

{{ category[0] }} {% endblock %} diff --git a/app/templates/layout.html b/app/templates/layout.html index 29b002d..9761401 100644 --- a/app/templates/layout.html +++ b/app/templates/layout.html @@ -22,34 +22,29 @@ -

center: atlanta }); - var addresses = [{% for resource in resources %} "{{resource[6]}} {{resource[5]}}, {{resource[3]}}, {{resource[2]}} {{resource[4]}}", {% endfor %}] + var addresses = [{% for resource in resources %} "{{resource[7]}} {{resource[6]}}, {{resource[4]}}, {{resource[3]}} {{resource[5]}}", {% endfor %}] for (x = 0; x < addresses.length; x++) { diff --git a/app/views.py b/app/views.py index ffedeef..b3e90cf 100644 --- a/app/views.py +++ b/app/views.py @@ -17,13 +17,12 @@ def login(): conn = mysql.connection cursor = conn.cursor() - cursor.execute("SELECT Username, Name FROM USER WHERE Username='" + username + "' AND PASSWORD='" + password + "';") + cursor.execute("SELECT Username FROM User WHERE Username='" + username + "' AND Password='" + password + "';") data = cursor.fetchall() if len(data) > 0: session['logged_in'] = True session['user'] = username - session['name'] = data[0][1] cursor2 = conn.cursor() cursor2.execute("SELECT * FROM Category_Names;") @@ -53,29 +52,68 @@ def home(): @app.route('/edit_user', methods = ['GET', 'POST']) def edit_user(): + if not session.get('logged_in'): + return redirect('login') + else: + conn = mysql.connection + user = session.get('user') + if request.method == 'POST': + password = request.form['password'] + email = request.form['email'] + + cursor3 = conn.cursor() + cursor3.execute( + """ + UPDATE User + SET Email = %s, Password = %s + WHERE Username = %s; + """, (email, password, user) + ) + conn.commit() + return redirect('edit_user') + else: + categories = session.get('categories') + cursor = conn.cursor() + cursor.execute("SELECT * FROM User WHERE Username='" + user + "';") + userdata = cursor.fetchall() + cursor2 = conn.cursor() + cursor2.execute("SELECT Name FROM Resource WHERE Creator_Username='" + user + "';") + userresource = cursor2.fetchall() + return render_template('edit_user.html', title = 'edit profile', user = user, + categories = categories, userdata = userdata, userresource = userresource) + +@app.route('/searchName//', methods=["GET"]) +def searchName(name): if not session.get('logged_in'): return redirect('login') else: user = session.get('user') categories = session.get('categories') + conn = mysql.connection cursor = conn.cursor() - cursor.execute("SELECT * FROM USER WHERE Username='" + user + "';") - userdata = cursor.fetchall() - cursor2 = conn.cursor() - cursor2.execute("SELECT Name FROM RESOURCE WHERE Creator_Username='" + user + "';") - userresource = cursor2.fetchall() - if request.method == 'POST': - orgName = request.form['orgName'] - orgPhone = request.form['orgPhone'] - orgDescription = request.form['orgDescription'] - cursor.execute("UPDATE Users SET Organization = '" + orgName + "', Phone = '" + orgPhone + - "', Description = '" + orgDescription + "' WHERE Username = '" + user + "';") - return redirect(url_for('edit_user')) + cursor.execute(""" + SELECT rev.rating, res.name, res.description, res.Address_State AS State, + res.Address_City AS City, res.Address_Zip AS Zip, res.Address_Street AS Street, + res.Address_Number AS Num +FROM ( + SELECT * + FROM Resource + WHERE name = %s + ) res +NATURAL LEFT JOIN ( + SELECT ID, AVG(Rating) AS rating + FROM Reviews + GROUP BY ID + ) rev +ORDER BY rev.rating DESC; + """, (name, )) - return render_template('edit_user.html', title = 'edit profile', user = user, - categories = categories, userdata = userdata, userresource = userresource) + resources = cursor.fetchall() + print resources + + return render_template('search.html', resources=resources, categories=categories, user=user) @app.route('/search//', methods=["GET"]) def search(ctgry): @@ -91,30 +129,29 @@ def search(ctgry): cursor.execute(""" SELECT rev.rating, res.name, res.description, res.Address_State AS State, - res.Address_City AS City, res.Address_Zip AS Zip, res.Address_Street AS Street, - res.Address_Number AS Num - FROM ( - SELECT * - FROM Resource - NATURAL JOIN ( - SELECT ID - FROM Categories - WHERE Name = %s - ) categories - ) res - NATURAL LEFT JOIN ( - SELECT ID, AVG(Rating) AS rating - FROM Reviews - GROUP BY ID - ) rev - - ORDER BY rev.rating DESC; + res.Address_City AS City, res.Address_Zip AS Zip, res.Address_Street AS Street, + res.Address_Number AS Num +FROM ( + SELECT * + FROM Resource + NATURAL JOIN ( + SELECT ID + FROM Categories + WHERE Name = %s + ) categories + ) res +NATURAL LEFT JOIN ( + SELECT ID, AVG(Rating) AS rating + FROM Reviews + GROUP BY ID + ) rev +ORDER BY rev.rating DESC; """, (ctgry, )) resources = cursor.fetchall() print resources - return render_template('search.html', resources=resources, categories=categories) + return render_template('search.html', resources=resources, categories=categories, user=user) @app.route('/resource_detail') def resource_detail(): @@ -125,11 +162,71 @@ def resource_detail(): resourcename = request.args['resourcename'] conn = mysql.connection cursor = conn.cursor() - cursor.execute("SELECT * FROM RESOURCE WHERE Name = '" + resourcename + "';") + cursor.execute("SELECT * FROM Resource WHERE Name = '" + resourcename + "';") resource = cursor.fetchall() + id=resource[0][12] + cursor2 = conn.cursor() + cursor2.execute("SELECT Phone_Number FROM Phone_Numbers WHERE ID = %s;", (id,)) + cursor3 = conn.cursor() + cursor3.execute("SELECT * FROM User_Favorites WHERE Username = %s AND ID = %s;", (user, id, )) + phones=cursor2.fetchall() + isfav = cursor3.fetchall() + if len(isfav) > 0: + favorite = True + else: + favorite = False categories = session.get('categories') return render_template('resource_detail.html', title='resource details', - user = user, categories = categories, resource = resource) + user = user, categories = categories, resource = resource, phones = phones, favorite = favorite) + +@app.route('/deletefav/', methods=['GET']) +def deletefav(resourceid): + user = session.get('user') + conn = mysql.connection + cursor = conn.cursor() + cursor.execute("""DELETE FROM User_Favorites +WHERE Username = %s AND ID = %s;""", (user, resourceid, )) + conn.commit() + return redirect(url_for('favorites')) + +@app.route('/addfav/', methods=['GET']) +def addfav(resourceid): + user = session.get('user') + conn = mysql.connection + cursor = conn.cursor() + cursor.execute("""INSERT INTO User_Favorites + VALUES (%s, %s);""", (user, resourceid, )) + conn.commit() + return redirect(url_for('favorites')) + +@app.route('/favorites') +def favorites(): + if not session.get('logged_in'): + return redirect('login') + else: + user = session.get('user') + conn = mysql.connection + cursor = conn.cursor() + cursor.execute("""SELECT rev.avg_rating AS Rating, res.name AS Name, res.description AS Description, res.Address_State AS State, + res.Address_City AS city, res.Address_Zip AS Zip, res.Address_Street AS Street, res.Address_Number AS Num +FROM ( + SELECT * + FROM ( + SELECT ID + FROM User_Favorites + WHERE Username = %s + ) favs + NATURAL JOIN Resource + ) res +NATURAL LEFT JOIN ( + SELECT ID, AVG(Rating) AS avg_rating + FROM Reviews + GROUP BY ID + ) rev +ORDER BY rev.avg_rating DESC;""", (user, )) + resources = cursor.fetchall() + categories = session.get('categories') + return render_template('search.html', resources=resources, categories=categories, user=user, favorites = True) @app.route('/organizations') def organizations(): @@ -167,19 +264,21 @@ def user_detail(): return render_template('user_detail.html', title='User Details', user = user, orgdata = orgdata, detailorg = detailorg, categories = categories, resources = resources) -@app.route('/edit_add_resource') -def edit_add_resource(): +@app.route('/editresource', methods=['GET', 'POST']) +def editresource(name): if not session.get('logged_in'): return redirect('login') else: - resource = None user = session.get('user') conn = mysql.connection - if 'resource' in request.args: - resourceName = request.args['resource'] - cursor = conn.cursor() - cursor.execute("SELECT * FROM Resource WHERE Name = '" + resourceName + "';") - resource = cursor.fetchall() + resourceName = name + cursor = conn.cursor() + cursor.execute("SELECT * FROM Resource WHERE Name = '" + resourceName + "';") + resource = cursor.fetchall() + id=resource[0][12] + cursor2 = conn.cursor() + cursor2.execute("SELECT Phone_Number FROM Phone_Numbers WHERE ID = %s;", (id,)) + phones = cursor2.fetchall() if request.method == 'POST': resourceName = request.form['resourceName'] resourcePhone = request.form['resourcePhone'] @@ -188,19 +287,76 @@ def edit_add_resource(): resourceState = request.form['resourceState'] resourceZip = request.form['resourceZip'] resourceDescription = request.form['resourceDescription'] - if resource != None: - cursor2 = conn.cursor() - cursor2.execute("UPDATE Resource SET Name = '" + resourceName + "', Address_State = '" + resourceState - + "', Address_City = '" + resourceCity + "', Address_Zip = '" + resourceZip + "', Address_Street = '" - + resourceStreet + "', Description = '" + resourceDescription + "' WHERE Username = '" + - user + "';") - return redirect(url_for('edit_user')) - else: + + if 'childcare' in request.args: + cminage = request.form['childcare-min-age'] + cmaxage = request.form['childcare-max-age'] + cmincost = request.form['childcare-min-cost'] + cmaxcost = request.form['childcare-max-cost'] + ctype = request.form['childcare-type'] cursor3 = conn.cursor() - cursor3.execute("INSERT INTO Resource (Name, Username, Address_State, Address_City, Address_Zip, Address_Street, Description) VALUES (" + - resourceName + ", " + user + ", " + resourceState + ", " + resourceCity + ", " + resourceZip - + ", " + resourceStreet + ", " + resourceDescription + ");") - return redirect(url_for('edit_user')) - categories = session.get('categories') - return render_template('edit_add_resource.html', title = "Edit Resource", user = user, - categories = categories, resource = resource) + cursor3.execute("") + conn.commit() + + if 'education' in request.args: + emincost = request.form['education-min-cost'] + emaxcost = request.form['education-max-cost'] + eprereqs = request.form['education-prereqs'] + etype = request.form['education-type'] + + if 'employment' in request.args: + eminsalary = request.form['employment-min-salary'] + emaxsalary = request.form['employment-max-salary'] + emptype = request.form['emp-type'] + empskills = request.form['emp-skills'] + empchildcare = request.form['childcare'] + + if 'for_children' in request.args: + fcminage = request.form['for-children-min-age'] + fcmaxage = request.form['for-children-max-age'] + fctype = request.form['for-children-type'] + + if 'housing' in request.args: + hcapacity = request.form['housing-capacity'] + hgender = request.form['housing-gender'] + hminage = request.form['housing-min-age'] + hmaxage = request.form['housing-max-age'] + htype = request.form['housing-type'] + hserves = request.form['housing-serves'] + hchildren = request.form['takesChildren'] + + #if 'job_readiness' in request.args: + + + + + return redirect(url_for('edit_user')) + categories = session.get('categories') + return render_template('edit_add_resource.html', title = "Edit Resource", user = user, + categories = categories, resource = resource, phones = phones) + +@app.route('/addresource', methods = ['GET', 'POST']) +def addresource(): + if not session.get('logged_in'): + return redirect('login') + else: + user = session.get('user') + conn = mysql.connection + cursor = conn.cursor() + if request.method == 'POST': + resourceName = request.form['resourceName'] + resourcePhone = request.form['resourcePhone'] + resourceStreet = request.form['resourceStreet'] + resourceCity = request.form['resourceCity'] + resourceState = request.form['resourceState'] + resourceZip = request.form['resourceZip'] + resourceDescription = request.form['resourceDescription'] + cursor3 = conn.cursor() + cursor3.execute("INSERT INTO Resource (Name, Username, Address_State, Address_City, Address_Zip, Address_Street, Description) VALUES (" + + resourceName + ", " + user + ", " + resourceState + ", " + resourceCity + ", " + resourceZip + + ", " + resourceStreet + ", " + resourceDescription + ");") + return redirect(url_for('edit_user')) + categories = session.get('categories') + return render_template('edit_add_resource.html', title = "Add Resource", user = user, + categories = categories) +