diff --git a/app/templates/dashboard.html b/app/templates/dashboard.html
index dee30fc..f99b2dd 100644
--- a/app/templates/dashboard.html
+++ b/app/templates/dashboard.html
@@ -144,53 +144,11 @@
Type |
Serial |
Master |
- Action |
+ Action |
- {% for domain in domains %}
-
-
- {{ domain.name }}
- |
-
- {% if domain.dnssec %}
-
- {% else %}
-
- {% endif %}
- |
-
- {{ domain.type }}
- |
-
- {% if domain.serial == 0 %}{{ domain.notified_serial }}{% else %}{{domain.serial}}{% endif %}
- |
-
- {% if domain.master == '[]'%}N/A {% else %}{{ domain.master|display_master_name }}{% endif %}
- |
- {% if current_user.role.name !='Administrator' %}
-
-
- |
- {% else %}
-
-
-
- |
- {% endif %}
-
- {% endfor %}
+
@@ -214,13 +172,16 @@
"ordering" : false,
"info" : false,
"autoWidth" : false
- });
+ });
// set up domain list
$("#tbl_domain_list").DataTable({
"paging" : true,
"lengthChange" : true,
"searching" : true,
"ordering" : true,
+ "processing" : true,
+ "serverSide" : true,
+ "ajax" : "{{ url_for('dashboard_domains') }}",
"info" : false,
"autoWidth" : false,
{% if default_domain_table_size_setting in ['10','25','50','100'] %}
diff --git a/app/views.py b/app/views.py
index 8cc8761..dfd8c4c 100644
--- a/app/views.py
+++ b/app/views.py
@@ -271,10 +271,6 @@ def logout():
@login_required
def dashboard():
d = Domain().update()
- if current_user.role.name == 'Administrator':
- domains = Domain.query.all()
- else:
- domains = User(id=current_user.id).get_domain()
# stats for dashboard
domain_count = Domain.query.count()
@@ -287,7 +283,69 @@ def dashboard():
uptime = filter(lambda uptime: uptime['name'] == 'uptime', statistics)[0]['value']
else:
uptime = 0
- return render_template('dashboard.html', domains=domains, domain_count=domain_count, users=users, history_number=history_number, uptime=uptime, histories=history)
+ return render_template('dashboard.html', domain_count=domain_count, users=users, history_number=history_number, uptime=uptime, histories=history)
+
+
+@app.route('/dashboard-domains', methods=['GET'])
+@login_required
+def dashboard_domains():
+ if current_user.role.name == 'Administrator':
+ domains = Domain.query
+ else:
+ domains = User(id=current_user.id).get_domain()
+
+ template = app.jinja_env.get_template("dashboard_domain.html")
+ render = template.make_module(vars={"current_user": current_user})
+
+ columns = [Domain.name, Domain.dnssec, Domain.type, Domain.serial, Domain.master]
+ # History.created_on.desc()
+ order_by = []
+ for i in range(len(columns)):
+ column_index = request.args.get("order[%d][column]" % i)
+ sort_direction = request.args.get("order[%d][dir]" % i)
+ if column_index is None:
+ break
+ if sort_direction != "asc" and sort_direction != "desc":
+ sort_direction = "asc"
+
+ column = columns[int(column_index)]
+ order_by.append(getattr(column, sort_direction)())
+
+ if order_by:
+ domains = domains.order_by(*order_by)
+
+ total_count = domains.count()
+
+ search = request.args.get("search[value]")
+ if search:
+ start = "" if search.startswith("^") else "%"
+ end = "" if search.endswith("$") else "%"
+ domains = domains.filter(Domain.name.ilike(start + search.strip("^$") + end))
+
+ filtered_count = domains.count()
+
+ start = int(request.args.get("start", 0))
+ length = min(int(request.args.get("length", 0)), 100)
+ domains = domains[start:start + length]
+
+ data = []
+ for domain in domains:
+ data.append([
+ render.name(domain),
+ render.dnssec(domain),
+ render.type(domain),
+ render.serial(domain),
+ render.master(domain),
+ render.actions(domain),
+ ])
+
+ response_data = {
+ "draw": int(request.args.get("draw", 0)),
+ "recordsTotal": total_count,
+ "recordsFiltered": filtered_count,
+ "data": data,
+ }
+ return jsonify(response_data)
@app.route('/domain/', methods=['GET', 'POST'])