From 5b1eba52e919deaf3d5b64e5424875629fc5a2fe Mon Sep 17 00:00:00 2001 From: Niko Colon Date: Thu, 16 Aug 2018 18:17:56 -0400 Subject: [PATCH 1/4] Added pagination to query results and add links in the html page --- app/main/views.py | 13 +++++++------ app/static/js/base.js | 1 + app/templates/staff_directory.html | 9 ++++++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/main/views.py b/app/main/views.py index 3d81727d..1477c61f 100644 --- a/app/main/views.py +++ b/app/main/views.py @@ -35,19 +35,20 @@ def new_post(): @main.route('/staff-directory', methods=['GET', 'POST']) def staff_directory(): form = Staff_Directory_Search_Form() + page = flask_request.args.get('page',1, type=int) if form.search.data is "": - users = Users.query.order_by(Users.last_name) + users = Users.query.order_by(Users.last_name).paginate(page=page, per_page=10) elif form.filters.data == 'First Name': - users = Users.query.filter(Users.first_name.ilike('%' + form.search.data + '%')) + users = Users.query.filter(Users.first_name.ilike('%' + form.search.data + '%')).paginate(page=1, per_page=10) elif form.filters.data == 'Last Name': - users = Users.query.filter(Users.last_name.ilike('%' + form.search.data + '%')) + users = Users.query.filter(Users.last_name.ilike('%' + form.search.data + '%')).paginate(page=1, per_page=10) elif form.filters.data == 'Division': - users = Users.query.filter(Users.division.ilike('%' + form.search.data + '%')) + users = Users.query.filter(Users.division.ilike('%' + form.search.data + '%')).paginate(page=1, per_page=10) elif form.filters.data == 'Title': - users = Users.query.filter(Users.title.ilike('%' + form.search.data + '%')) + users = Users.query.filter(Users.title.ilike('%' + form.search.data + '%')).paginate(page=1, per_page=10) else: - users = Users.query.order_by(Users.last_name) + users = Users.query.order_by(Users.last_name).paginate(page=page, per_page=10) return render_template('staff_directory.html', users=users, form=form) diff --git a/app/static/js/base.js b/app/static/js/base.js index 2b094636..0750110d 100644 --- a/app/static/js/base.js +++ b/app/static/js/base.js @@ -81,6 +81,7 @@ $(function () { container: "body", content: function () { return $(this).next('.popper-content').html(); + } }); $(document).on("click", ".popover-content .close", function () { diff --git a/app/templates/staff_directory.html b/app/templates/staff_directory.html index a3ddedbe..c93f6331 100644 --- a/app/templates/staff_directory.html +++ b/app/templates/staff_directory.html @@ -39,7 +39,7 @@

Staff Directory

Email - {% for user in users %} + {% for user in users.items %} @@ -86,6 +86,13 @@

Staff Directory

{% endfor %} + {% for page_num in users.iter_pages() %} + {% if page_num %} +
{{ page_num }} + {% else %} + ... + {% endif %} + {% endfor %} {% endblock %} \ No newline at end of file From 2637459ab7616007e45fa6911c6c35712862c363 Mon Sep 17 00:00:00 2001 From: Niko Colon Date: Fri, 17 Aug 2018 14:52:31 -0400 Subject: [PATCH 2/4] Worked on fixing paginate bugs --- app/main/views.py | 19 +++++++++++++------ app/templates/staff_directory.html | 4 +++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/main/views.py b/app/main/views.py index 1477c61f..233286c6 100644 --- a/app/main/views.py +++ b/app/main/views.py @@ -35,24 +35,31 @@ def new_post(): @main.route('/staff-directory', methods=['GET', 'POST']) def staff_directory(): form = Staff_Directory_Search_Form() - page = flask_request.args.get('page',1, type=int) + page = flask_request.args.get('page', 1, type=int) if form.search.data is "": users = Users.query.order_by(Users.last_name).paginate(page=page, per_page=10) elif form.filters.data == 'First Name': - users = Users.query.filter(Users.first_name.ilike('%' + form.search.data + '%')).paginate(page=1, per_page=10) + users = Users.query.filter(Users.first_name.ilike('%' + form.search.data + '%')).paginate(page=page, per_page=10) + # users = Users.query.filter(Users.first_name.ilike('%' + form.search.data + '%')).paginate(page=1, per_page=10) + # return redirect('/search',) elif form.filters.data == 'Last Name': - users = Users.query.filter(Users.last_name.ilike('%' + form.search.data + '%')).paginate(page=1, per_page=10) + users = Users.query.filter(Users.last_name.ilike('%' + form.search.data + '%')).paginate(page=page, per_page=10) elif form.filters.data == 'Division': - users = Users.query.filter(Users.division.ilike('%' + form.search.data + '%')).paginate(page=1, per_page=10) + users = Users.query.filter(Users.division.ilike('%' + form.search.data + '%')).paginate(page=page, per_page=10) elif form.filters.data == 'Title': - users = Users.query.filter(Users.title.ilike('%' + form.search.data + '%')).paginate(page=1, per_page=10) + users = Users.query.filter(Users.title.ilike('%' + form.search.data + '%')).paginate(page=page, per_page=10) else: users = Users.query.order_by(Users.last_name).paginate(page=page, per_page=10) - return render_template('staff_directory.html', users=users, form=form) + return render_template('staff_directory.html', users=users, form=form, page=page) +@main.route('/search', methods=['GET','Post']) +# def show_results(users): +# form = Staff_Directory_Search_Form() +# render_template('search.html', users=users, form=form) + @main.route('/get_filter_options_list/', methods=['GET']) def get_filter_options_list(filter_value): users = Users.query.all() diff --git a/app/templates/staff_directory.html b/app/templates/staff_directory.html index c93f6331..997d3aa3 100644 --- a/app/templates/staff_directory.html +++ b/app/templates/staff_directory.html @@ -21,12 +21,14 @@

Staff Directory

-
+{# action="{{ url_for('main.staff_directory/1') }}"#} +
{{ form.submit (id="staff-directory-submit-test") }}
+ {{ page }}
From fd44d15c1c2a621a3c90f8ad2039fda6bf2fd273 Mon Sep 17 00:00:00 2001 From: Niko Colon Date: Tue, 21 Aug 2018 15:56:12 -0400 Subject: [PATCH 3/4] I added the paginate links, created the search file which outputs the results from the search bar, styled the paginate links and created the view for search file --- app/main/views.py | 60 +++++++++++--- app/static/css/staff_directory.css | 4 + app/templates/search.html | 125 +++++++++++++++++++++++++++++ app/templates/staff_directory.html | 45 ++++++++--- 4 files changed, 211 insertions(+), 23 deletions(-) create mode 100644 app/templates/search.html diff --git a/app/main/views.py b/app/main/views.py index 233286c6..3b634c8b 100644 --- a/app/main/views.py +++ b/app/main/views.py @@ -39,26 +39,62 @@ def staff_directory(): if form.search.data is "": users = Users.query.order_by(Users.last_name).paginate(page=page, per_page=10) + next_url = url_for('main.staff_directory', page=users.next_num) \ + if users.has_next else None + prev_url = url_for('main.staff_directory', page=users.prev_num) \ + if users.has_prev else None elif form.filters.data == 'First Name': - users = Users.query.filter(Users.first_name.ilike('%' + form.search.data + '%')).paginate(page=page, per_page=10) - # users = Users.query.filter(Users.first_name.ilike('%' + form.search.data + '%')).paginate(page=1, per_page=10) - # return redirect('/search',) + return redirect('/search/'+form.filters.data+'/'+form.search.data) elif form.filters.data == 'Last Name': - users = Users.query.filter(Users.last_name.ilike('%' + form.search.data + '%')).paginate(page=page, per_page=10) + return redirect('/search/' + form.filters.data + '/' + form.search.data) elif form.filters.data == 'Division': - users = Users.query.filter(Users.division.ilike('%' + form.search.data + '%')).paginate(page=page, per_page=10) + return redirect('/search/' + form.filters.data + '/' + form.search.data) elif form.filters.data == 'Title': - users = Users.query.filter(Users.title.ilike('%' + form.search.data + '%')).paginate(page=page, per_page=10) + return redirect('/search/' + form.filters.data + '/' + form.search.data) else: users = Users.query.order_by(Users.last_name).paginate(page=page, per_page=10) + next_url = url_for('main.staff_directory', page=users.next_num) \ + if users.has_next else None + prev_url = url_for('main.staff_directory', page=users.prev_num) \ + if users.has_prev else None - return render_template('staff_directory.html', users=users, form=form, page=page) + return render_template('staff_directory.html', users=users, form=form, page=page, next_url=next_url, prev_url=prev_url) +@main.route('/search//', methods=['GET', 'POST']) +def show_result(filter,input): + form = Staff_Directory_Search_Form() + page = flask_request.args.get('page', 1, type=int) + + if filter == 'First Name': + users = Users.query.filter(Users.first_name.ilike('%' + input + '%')).paginate(page=page, per_page=10) + next_url = url_for('search', filter=filter, input=input, page=users.next_num) \ + if users.has_next else None + prev_url = url_for('search', filter=filter, input=input, page=users.prev_num) \ + if users.has_prev else None + + elif filter == 'Last Name': + users = Users.query.filter(Users.last_name.ilike('%' + input + '%')).paginate(page=page, per_page=10) + next_url = url_for('search', filter=filter, input=input, page=users.next_num) \ + if users.has_next else None + prev_url = url_for('search', filter=filter, input=input, page=users.prev_num) \ + if users.has_prev else None + + elif filter == 'Division': + users = Users.query.filter(Users.division.ilike('%' + input + '%')).paginate(page=page, per_page=10) + next_url = url_for('search', filter=filter, input=input, page=users.next_num) \ + if users.has_next else None + prev_url = url_for('search', filter=filter, input=input, page=users.prev_num) \ + if users.has_prev else None + + elif filter == 'Title': + users = Users.query.filter(Users.title.ilike('%' + input + '%')).paginate(page=page, per_page=10) + next_url = url_for('search', filter=filter, input=input, page=users.next_num) \ + if users.has_next else None + prev_url = url_for('search', filter=filter, input=input, page=users.prev_num) \ + if users.has_prev else None + + return render_template('search.html', users=users, form=form, page=page, filter=filter, input=input, next_url=next_url, prev_url=prev_url) -@main.route('/search', methods=['GET','Post']) -# def show_results(users): -# form = Staff_Directory_Search_Form() -# render_template('search.html', users=users, form=form) @main.route('/get_filter_options_list/', methods=['GET']) def get_filter_options_list(filter_value): @@ -67,7 +103,7 @@ def get_filter_options_list(filter_value): if filter_value == "First Name": for user in users: users_array.append(user.first_name) - users_array=list(set(users_array)) + users_array = list(set(users_array)) if filter_value == "Last Name": for user in users: if user not in users_array: diff --git a/app/static/css/staff_directory.css b/app/static/css/staff_directory.css index 9367cffa..2089ad3e 100644 --- a/app/static/css/staff_directory.css +++ b/app/static/css/staff_directory.css @@ -137,4 +137,8 @@ height: 16px; width: 14px; margin-right:10px; +} + +.style-pagination-links{ + text-align:center; } \ No newline at end of file diff --git a/app/templates/search.html b/app/templates/search.html new file mode 100644 index 00000000..10ac43cf --- /dev/null +++ b/app/templates/search.html @@ -0,0 +1,125 @@ +{% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} + +{% block page_content %} + + + +
+ +
+ +
+
+
+ + +
{{ form.submit (id="staff-directory-submit-test") }}
+ + go back +
+
+
+ + + + + + + + + + {% for user in users.items %} + + + + + + + + + {% endfor %} + +
FirstLastDivisionTitlePhoneEmail
+ + {% if user.profile_picture_path %} + avatar + {% else %} + + {% endif %} + + +
+
+
+ {% if user.profile_picture_path %} + avatar + {% else %} + + {% endif %} +
+
+

{{ user.first_name }} {{ user.last_name }}

+

{{ user.title }}

+

{{ user.division }}

+
+ × +
+
Phone: {{ user.phone_number }}
+
Email: {{ user.email }}
+
Office: {{ user.room }}
+
+ {{ user.first_name }} +
{{ user.last_name }}{{ user.division }}{{ user.title }}{{ user.phone_number }}{{ user.email }}
+ + {{ filter }}{{ input }} + + +
+
+{% endblock %} \ No newline at end of file diff --git a/app/templates/staff_directory.html b/app/templates/staff_directory.html index 997d3aa3..a3b6f83f 100644 --- a/app/templates/staff_directory.html +++ b/app/templates/staff_directory.html @@ -21,14 +21,12 @@

Staff Directory

-{# action="{{ url_for('main.staff_directory/1') }}"#} -
+
{{ form.submit (id="staff-directory-submit-test") }}
- {{ page }}
@@ -88,13 +86,38 @@

Staff Directory

{% endfor %}
- {% for page_num in users.iter_pages() %} - {% if page_num %} - {{ page_num }} - {% else %} - ... - {% endif %} - {% endfor %} + {{ filter }}{{ input }} + +
-{% endblock %} \ No newline at end of file +{% endblock %} From 06434610485babe13c6fdd0c7662ac2517590a1c Mon Sep 17 00:00:00 2001 From: Niko Colon Date: Wed, 22 Aug 2018 11:13:30 -0400 Subject: [PATCH 4/4] Finished debugging pagination links, allowed form to be submitted in the the search page, and did some style change for the pagination links --- app/main/views.py | 34 ++++------------- app/static/css/staff_directory.css | 1 + app/templates/search.html | 59 +++++++++++++++++++----------- app/templates/staff_directory.html | 56 +++++++++++++++++----------- 4 files changed, 81 insertions(+), 69 deletions(-) diff --git a/app/main/views.py b/app/main/views.py index 3b634c8b..4c355a58 100644 --- a/app/main/views.py +++ b/app/main/views.py @@ -39,10 +39,7 @@ def staff_directory(): if form.search.data is "": users = Users.query.order_by(Users.last_name).paginate(page=page, per_page=10) - next_url = url_for('main.staff_directory', page=users.next_num) \ - if users.has_next else None - prev_url = url_for('main.staff_directory', page=users.prev_num) \ - if users.has_prev else None + elif form.filters.data == 'First Name': return redirect('/search/'+form.filters.data+'/'+form.search.data) elif form.filters.data == 'Last Name': @@ -53,12 +50,8 @@ def staff_directory(): return redirect('/search/' + form.filters.data + '/' + form.search.data) else: users = Users.query.order_by(Users.last_name).paginate(page=page, per_page=10) - next_url = url_for('main.staff_directory', page=users.next_num) \ - if users.has_next else None - prev_url = url_for('main.staff_directory', page=users.prev_num) \ - if users.has_prev else None - return render_template('staff_directory.html', users=users, form=form, page=page, next_url=next_url, prev_url=prev_url) + return render_template('staff_directory.html', users=users, form=form, page=page) @main.route('/search//', methods=['GET', 'POST']) def show_result(filter,input): @@ -67,33 +60,20 @@ def show_result(filter,input): if filter == 'First Name': users = Users.query.filter(Users.first_name.ilike('%' + input + '%')).paginate(page=page, per_page=10) - next_url = url_for('search', filter=filter, input=input, page=users.next_num) \ - if users.has_next else None - prev_url = url_for('search', filter=filter, input=input, page=users.prev_num) \ - if users.has_prev else None elif filter == 'Last Name': users = Users.query.filter(Users.last_name.ilike('%' + input + '%')).paginate(page=page, per_page=10) - next_url = url_for('search', filter=filter, input=input, page=users.next_num) \ - if users.has_next else None - prev_url = url_for('search', filter=filter, input=input, page=users.prev_num) \ - if users.has_prev else None elif filter == 'Division': users = Users.query.filter(Users.division.ilike('%' + input + '%')).paginate(page=page, per_page=10) - next_url = url_for('search', filter=filter, input=input, page=users.next_num) \ - if users.has_next else None - prev_url = url_for('search', filter=filter, input=input, page=users.prev_num) \ - if users.has_prev else None elif filter == 'Title': users = Users.query.filter(Users.title.ilike('%' + input + '%')).paginate(page=page, per_page=10) - next_url = url_for('search', filter=filter, input=input, page=users.next_num) \ - if users.has_next else None - prev_url = url_for('search', filter=filter, input=input, page=users.prev_num) \ - if users.has_prev else None - return render_template('search.html', users=users, form=form, page=page, filter=filter, input=input, next_url=next_url, prev_url=prev_url) + elif form.filters.data == 'First Name': + return redirect('/search/' + form.filters.data + '/' + form.search.data) + + return render_template('search.html', users=users, form=form, page=page, filter=filter, input=input) @main.route('/get_filter_options_list/', methods=['GET']) @@ -117,4 +97,4 @@ def get_filter_options_list(filter_value): users_array.append(user.title) users_array = list(set(users_array)) - return jsonify(users_array), 200 + return jsonify(users_array), 200 \ No newline at end of file diff --git a/app/static/css/staff_directory.css b/app/static/css/staff_directory.css index 2089ad3e..093e392e 100644 --- a/app/static/css/staff_directory.css +++ b/app/static/css/staff_directory.css @@ -141,4 +141,5 @@ .style-pagination-links{ text-align:center; + font-size:16px; } \ No newline at end of file diff --git a/app/templates/search.html b/app/templates/search.html index 10ac43cf..87af839d 100644 --- a/app/templates/search.html +++ b/app/templates/search.html @@ -21,14 +21,14 @@

Staff Directory

-
+
{{ form.submit (id="staff-directory-submit-test") }}
- go back
+
@@ -88,35 +88,52 @@

Staff Directory

- {{ filter }}{{ input }} diff --git a/app/templates/staff_directory.html b/app/templates/staff_directory.html index a3b6f83f..3a5202f6 100644 --- a/app/templates/staff_directory.html +++ b/app/templates/staff_directory.html @@ -21,7 +21,7 @@

Staff Directory

-
+
Staff Directory {% endfor %} - {{ filter }}{{ input }} +