diff --git a/editapi.py b/editapi.py index 2a235c6d9ff2d86a7098027f5ff42aa961844cf8..07f5be79d38e58879f0f2a4ddccd051061f65a32 100644 --- a/editapi.py +++ b/editapi.py @@ -161,3 +161,21 @@ def create(table): if 'ref' in request.values: return redirect(request.values['ref']) return str(id), 200 + +@app.route('/internal/changelog') +@register_navbar('Changelog', icon='book') +@mod_required +def changelog(): + if 'page' in request.args: + page = max(0, int(request.args['page'])) + else: + page = 0 + if 'pagesize' in request.args: + pagesize = min(500, int(request.args['pagesize'])) + else: + pagesize = 50 + changelog = query('SELECT * FROM changelog LEFT JOIN users ON (changelog.who = users.id) ORDER BY `when` DESC LIMIT ? OFFSET ?', pagesize, page*pagesize) + pagecount = math.ceil(query('SELECT count(id) as count FROM changelog')[0]['count']/pagesize) + for entry in changelog: + entry['path'] = '.'.join([entry['table'], entry['id_value'], entry['field']]) + return render_template('changelog.html', changelog=changelog, page=page, pagesize=pagesize, pagecount=pagecount) diff --git a/jobs.py b/jobs.py index 8d4b3de294ec49ccb7a9ed4efb53159f6b100b51..59c50d0f9ab496805647a811ec6bccb59e74665a 100644 --- a/jobs.py +++ b/jobs.py @@ -15,6 +15,7 @@ def jobs_overview(): pagesize = min(500, int(request.args['pagesize'])) else: pagesize = 50 + pagecount = math.ceil(query('SELECT count(id) as count FROM jobs')[0]['count']/pagesize) worker = query('SELECT * FROM worker ORDER BY last_ping DESC') @@ -31,7 +32,7 @@ def jobs_overview(): 'worker': request.args.get('worker','%') } jobs = query('SELECT * FROM jobs WHERE (type like ?) AND (worker like ? OR (worker IS NULL AND ? = "%")) AND (state like ?) ORDER BY `time_created` DESC LIMIT ? OFFSET ?', filter['type'], filter['worker'], filter['worker'], filter['state'], pagesize, page*pagesize) - return render_template('jobs_overview.html',worker=worker,jobs=jobs, filter_values=filter_values, filter=filter, page=page, pagesize=pagesize) + return render_template('jobs_overview.html',worker=worker,jobs=jobs, filter_values=filter_values, filter=filter, page=page, pagesize=pagesize, pagecount=pagecount) def jobs_api_token_required(func): @wraps(func) diff --git a/server.py b/server.py index 70515447ed65c82f2cb2ffb27418dcb7bdb7a1f0..8da2b747ec74d4f1a3178faab66579d6a8bcb0b5 100644 --- a/server.py +++ b/server.py @@ -12,6 +12,7 @@ import traceback import string from socket import gethostname from ipaddress import ip_address, ip_network +import math app = Flask(__name__) @@ -21,6 +22,8 @@ app.add_template_global(random.randint, name='randint') app.add_template_global(datetime, name='datetime') app.add_template_global(timedelta, name='timedelta') app.add_template_global(gethostname, name='gethostname') +app.add_template_global(min, name='min') +app.add_template_global(max, name='max') scheduler = sched.scheduler() def run_scheduler(): @@ -565,23 +568,6 @@ def auth(): # For use with nginx auth_request return Response("Login required", 401, {'WWW-Authenticate': 'Basic realm="Login Required"'}) return "Not allowed", 403 -@app.route('/internal/changelog') -@register_navbar('Changelog', icon='book') -@mod_required -def changelog(): - if 'page' in request.args: - page = max(0, int(request.args['page'])) - else: - page = 0 - if 'pagesize' in request.args: - pagesize = min(500, int(request.args['pagesize'])) - else: - pagesize = 50 - changelog = query('SELECT * FROM changelog LEFT JOIN users ON (changelog.who = users.id) ORDER BY `when` DESC LIMIT ? OFFSET ?', pagesize, page*pagesize) - for entry in changelog: - entry['path'] = '.'.join([entry['table'], entry['id_value'], entry['field']]) - return render_template('changelog.html', changelog=changelog, page=page, pagesize=pagesize) - @app.route('/files/<filename>') def files(filename): return redirect(config['VIDEOPREFIX']+'/'+filename) diff --git a/templates/changelog.html b/templates/changelog.html index 4d0a8232b9f68126b32dee7aa7bf357e815c3c13..b721581714443d00b4e82d64d64b224dd2d5a0b1 100644 --- a/templates/changelog.html +++ b/templates/changelog.html @@ -8,10 +8,23 @@ </div> <div class="panel-body"> <p>Hier werden alle Änderungen an Kursen/Veranstaltungen/Videos etc. geloggt und können Rückgängig gemacht werden.</p> - <div style="margin-top: 10px;" class="col-xs-12"> - <a href="{{url_for('changelog', page=page-1) }}" class="pull-left btn btn-default">{{ "<<" }}</a> - <a href="{{url_for('changelog', page=page+1) }}" class="pull-right btn btn-default">{{ ">>" }}</a> - </div> + <ul class="pagination pull-right"> + <li class="page-item"> + <a class="page-link" href="{{url_for('changelog', page=page-1) }}"> + <span aria-hidden="true">«</span> + <span class="sr-only">Previous</span> + </a> + </li> + {% for i in range(max(0, pagecount - 5) ,min(pagecount, pagecount + 5)) %} + <li class="page-item"><a class="page-link" href="{{url_for('changelog', page=i) }}">{{ i }}</a></li> + {% endfor %} + <li class="page-item"> + <a class="page-link" href="{{url_for('changelog', page=page+1) }}"> + <span aria-hidden="true">»</span> + <span class="sr-only">Next</span> + </a> + </li> + </ul> </div> <div class="table-responsive"> <table class="table table-condensed"> diff --git a/templates/jobs_overview.html b/templates/jobs_overview.html index 3b2d63986a10e9c38b21baf994a5f2695792af6f..c7b7ea92957b027ac050ec2c6cf26c4c6788a954 100644 --- a/templates/jobs_overview.html +++ b/templates/jobs_overview.html @@ -42,7 +42,6 @@ <div class="panel-body"> <div class="row"> <form> - <a href="{{url_for('jobs_overview', page=page-1, **(request.args|filterdict(['page','pagesize'])) ) }}" class="pull-left btn btn-default col-xs-1">{{ "<<" }}</a> <div class="form-group col-xs-3"> <label for="type">Type</label> <input list="job_type" name="type" value="{{ filter.type }}"> @@ -71,8 +70,25 @@ </datalist> </div> <button type="submit" class="btn btn-primary col-xs-1">Filter</button> - <a href="{{url_for('jobs_overview', page=page+1, **(request.args|filterdict(['page','pagesize'])) ) }}" class="pull-right btn btn-default col-xs-1">{{ ">>" }}</a> </form> + <ul class="pagination pull-right"> + <li class="page-item"> + <a class="page-link" href="{{url_for('jobs_overview', page=page-1, **(request.args|filterdict(['page','pagesize']))) }}"> + <span aria-hidden="true">«</span> + <span class="sr-only">Previous</span> + </a> + </li> + {% for i in range(max(0, pagecount - 5) ,min(pagecount, pagecount + 5)) %} + <li class="page-item"><a class="page-link" href="{{url_for('jobs_overview', page=i, **(request.args|filterdict(['page','pagesize']))) }}">{{ i }}</a></li> + {% endfor %} + <li class="page-item"> + <a class="page-link" href="{{url_for('jobs_overview', page=page+1, **(request.args|filterdict(['page','pagesize']))) }}"> + <span aria-hidden="true">»</span> + <span class="sr-only">Next</span> + </a> + </li> + </ul> + </div> <table class="table"> <tr>