Skip to content
Snippets Groups Projects
Select Git revision
  • cb0958073db6059e9399b7987460fe09eb352f50
  • development default protected
  • 3.2.x-stable
  • prepare
  • 6b369dc5
  • 3.1.x-stable
  • 3.0.x-stable
  • 2.4.x-stable
  • v3.2.61
  • v3.2.60
  • v3.2.59
  • v3.2.54
  • v3.2.53
  • v3.2.52
  • v3.2.51
  • v3.2.48
  • v3.2.45
  • v3.2.44.3
  • v3.2.44
  • v3.2.40
  • v3.2.13
  • v3.2.9
  • v3.2.8
  • v3.2.7
  • v3.2.6
  • v3.2.5
  • v3.2.4
  • v3.2.3
28 results

PartitionJobTests.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    editapi.py 3.43 KiB
    from server import *
    
    # name: (tablename, idcolumn, [editable_fields], [fields_to_set_at_creation_time])
    tabs = {
    	'courses': ('courses_data', 'id', ['visible', 'listed', 'title', 'short',
    			'handle', 'organizer', 'subject', 'semester', 'downloadable',
    			'internal', 'responsible','deleted','description'],
    			['created_by', 'time_created', 'time_updated']),
    	'lectures': ('lectures_data', 'id', ['visible', 'title', 'comment',
    			'internal', 'speaker', 'place', 'time', 'duration', 'jumplist','deleted'],
    			['course_id', 'time_created', 'time_updated']),
    	'videos': ('videos_data', 'id', ['visible','deleted'],
    			['created_by', 'time_created', 'time_updated']),
    	'chapters': ('chapters', 'id', ['time', 'text', 'visible', 'deleted'],
    			['created_by', 'time_created', 'time_updated']),
    	'announcements': ('announcements', 'id', ['text', 'level', 'visible',
    			'deleted', 'time_publish', 'time_expire'],
    			['created_by', 'time_created', 'time_updated']),
    	'featured': ('featured', 'id', ['title', 'text', 'internal', 'visible', 'deleted', 'param', 'param2', 'order'],
    			['created_by', 'time_created', 'time_updated', 'type']),
    	'perm': ('perm', 'id', ['type', 'param1', 'param2', 'deleted'],
    			['course_id', 'lecture_id', 'video_id', 'created_by', 'time_created', 'time_updated']),
    	'sorterrorlog': ('sorterrorlog_data', 'id', ['deleted'],
    			['time_created', 'time_updated'])
    }
    
    @app.route('/internal/edit', methods=['GET', 'POST'])
    @mod_required
    @csrf_protect
    def edit(prefix='', ignore=[]):
    	# All editable tables are expected to have a 'time_updated' field
    	ignore.append('ref')
    	ignore.append('prefix')
    	ignore.append('_csrf_token')
    	if not prefix and 'prefix' in request.args:
    		prefix = request.args['prefix']
    	changes = request.values.items()
    	if (request.method == 'POST') and (request.get_json()):
    		changes = request.get_json().items()
    	for key, val in changes:
    		if key in ignore:
    			continue
    		key = prefix+key
    		table, id, column = key.split('.', 2)
    		assert table in tabs
    		assert column in tabs[table][2]
    		modify('INSERT INTO changelog (`table`,id_value, id_key, field, value_new, value_old, `when`, who, executed) VALUES (?,?,?,?,?,(SELECT `%s` FROM %s WHERE %s = ?),?,?,1)'%(column, tabs[table][0], tabs[table][1]),
    				table, id, tabs[table][1], column, val, id, datetime.now(), session['user']['dbid'])
    		modify('UPDATE %s SET `%s` = ?, time_updated = ? WHERE `%s` = ?'%(tabs[table][0], column, tabs[table][1]), val, datetime.now(), id)
    	if 'ref' in request.values:
    		return redirect(request.values['ref'])
    	return "OK", 200
    
    @app.route('/internal/new/<table>', methods=['GET', 'POST'])
    @mod_required
    @csrf_protect
    def create(table):
    	assert table in tabs
    	defaults = {'created_by': session['user']['dbid'], 'time_created': datetime.now(), 'time_updated': datetime.now()}
    	columns = []
    	values = []
    	for column, val in defaults.items():
    		if column in tabs[table][3]:
    			columns.append(column)
    			values.append(val)
    	args = request.values.items()
    	if (request.method == 'POST') and (request.get_json()):
    		args = request.get_json().items()
    	for column, val in args:
    		if (column == 'ref') or (column == '_csrf_token'):
    			continue
    		assert column in tabs[table][2]+tabs[table][3]
    		assert column not in defaults
    		columns.append('`'+column+'`')
    		values.append(val)
    	id = modify('INSERT INTO %s (%s) VALUES (%s)'%(tabs[table][0],
    				','.join(columns), ','.join(['?']*len(values))), *values)
    	if 'ref' in request.values:
    		return redirect(request.values['ref'])
    	return str(id), 200