diff --git a/admin/index.html b/admin/index.html index c98b5a9528af06d04e1bbf7b2b9433ec7935f380..f19fe0c12871efc80e5e687086b5b9fc5bf26719 100644 --- a/admin/index.html +++ b/admin/index.html @@ -106,21 +106,11 @@ <img height="40" style="margin: 5px;" src="res/logo/wheel.svg" id="wheel-logo" class="smooth" alt="Loading Wheel"> </div> - <ul class="nav navbar-nav navbar-left cust-menu"> + <ul class="nav navbar-nav navbar-left cust-menu pull-left"> </ul> - <ul class="nav navbar-nav navbar-right"> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> - <span class="glyphicon glyphicon-user" aria-hidden="true"></span> - <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <li><a href="#settings"><span class="glyphicon glyphicon-wrench" aria-hidden="true"></span> Settings</a></li> - <li role="separator" class="divider"></li> - <li><a href="#" class="logoutAction"><span class="glyphicon glyphicon-off" aria-hidden="true"></span> Logout</a></li> - </ul> - </li> + <ul class="nav navbar-nav navbar-right pull-right"> + <li><a href="#" class="logoutAction"><span class="glyphicon glyphicon-off" aria-hidden="true"></span></a></li> </ul> </div> </nav> diff --git a/admin/lib/amiv/amivcore.js b/admin/lib/amiv/amivcore.js index 7d1a209abb531051b8ef4593607266401993f2b7..6509256212a1823056dec1f2dab5a19b731b08e3 100644 --- a/admin/lib/amiv/amivcore.js +++ b/admin/lib/amiv/amivcore.js @@ -1,303 +1,311 @@ (function(window) { - 'use strict'; - // Library NameSpace - var lns = 'amivcore' + 'use strict'; + // Library NameSpace + var lns = 'amivcore' - function libgen() { - // Lib to returned - var lib = {}; - - // Core - var core = { - // Important vars n' stuff - lib: { - api_url: 'https://amiv-apidev.vsos.ethz.ch', - spec_url: 'lib/amiv/spec.json', - authenticated: false, - ready: false, - req_time_out: 5000, - on_interval: 100, - show_errors: false, - }, - // Header Setup - header: { - req:{ - 'get': ['Content-Type','Authorization'], - 'post': ['Content-Type','Authorization'], - 'put': ['Content-Type','Authorization','If-Match'], - 'patch': ['Content-Type','Authorization','If-Match'], - 'delete': ['Content-Type','Authorization','If-Match'], - }, - make: { - 'Content-Type': function(){ - return 'application/json' - }, - 'Authorization': function(){ - if(get('cur_token') != null) - return 'Basic ' + btoa(get('cur_token') + ':'); - return ''; - }, - 'If-Match': function(){ - return null; - } - } - } - } - - // Utility empty function for no callback - function dummy(){}; - - //Save and get into localStorage - function set(cname, cvalue, exdays) { - window.localStorage.setItem('glob-'+cname, cvalue); - } - function get(cname) { - return window.localStorage.getItem('glob-'+cname); - } + function libgen() { + // Lib to returned + var lib = {}; - // Make Request - function req(attr, callback) { - callback = callback || function(msg) { - console.log(msg); - }; - $.ajax({ - url: core.lib.api_url + attr.path, - data: attr.data, - method: attr.method, - dataType: 'json', - timeout: core.lib.req_time_out, - headers: attr.headers, - error: function(res) { - if (core.lib.show_errors) console.log(res); - callback(res); - }, - }).done(function(res){ - callback(res); - }); - } - - function makeFunc(domain, m) { - return function(attr, callback) { - attr = attr || {}; - var curLib = {} - for (var curAttr in attr['data']) - curLib[curAttr] = attr['data'][curAttr]; + // Core + var core = { + // Important vars n' stuff + lib: { + api_url: 'https://amiv-apidev.vsos.ethz.ch', + //api_url: 'https://nicco.io/amiv', + spec_url: 'lib/amiv/spec.json', + //spec_url: 'https://nicco.io/amiv/docs/spec.json', + authenticated: false, + ready: false, + req_time_out: 5000, + on_interval: 100, + auth_interval: 5000, + auth_allowed_fails: 5, + auth_fails: 0, + show_errors: false, + }, + // Header Setup + header: { + req: { + 'get': ['Content-Type', 'Authorization'], + 'post': ['Content-Type', 'Authorization'], + 'put': ['Content-Type', 'Authorization', 'If-Match'], + 'patch': ['Content-Type', 'Authorization', 'If-Match'], + 'delete': ['Content-Type', 'Authorization', 'If-Match'], + }, + make: { + 'Content-Type': function() { + return 'application/json' + }, + 'Authorization': function() { + if (get('cur_token') != null) + return 'Basic ' + btoa(get('cur_token') + ':'); + return ''; + }, + 'If-Match': function() { + return null; + } + } + } + } - var hdr = {}; - for (var curHdr in attr['header']) - hdr[curHdr] = attr['header'][curHdr]; + // Utility empty function for no callback + function dummy() {}; - var curPath = '/' + domain; - var curLink = curPath; - if (attr['id'] != undefined) { - curPath += '/' + attr['id']; - curLink += '/{_id}'; + //Save and get into localStorage + function set(cname, cvalue, exdays) { + window.localStorage.setItem('glob-' + cname, cvalue); } - if (get('cur_token') != null) - hdr['Authorization'] = 'Basic ' + btoa(get('cur_token') + ':'); + function get(cname) { + return window.localStorage.getItem('glob-' + cname); + } - if (m != 'GET') { - if (m == 'POST' || m == 'PUT') - for (var param in lib[domain]['methods'][m][curLink]['params']) - if (lib[domain]['methods'][m][curLink]['params'][param]['required'] == true) - if (curLib[lib[domain]['methods'][m][curLink]['params'][param]['name']] == undefined) - return 'Error: Missing ' + lib[domain]['methods'][m][curLink]['params'][param]['name']; - hdr['Content-Type'] = 'application/json'; - curLib = JSON.stringify(curLib); + // Make Request + function req(attr, callback) { + callback = callback || function(msg) { + console.log(msg); + }; + $.ajax({ + url: core.lib.api_url + attr.path, + data: attr.data, + method: attr.method, + dataType: 'json', + timeout: core.lib.req_time_out, + headers: attr.headers, + error: function(res) { + if (core.lib.show_errors) console.log(res); + callback(res); + }, + }).done(function(res) { + callback(res); + }); } - req({ - path: curPath, - method: m, - data: curLib, - headers: hdr, - }, callback); - return true; - }; - } - $.ajax({ - url: core.lib.spec_url, - dataType: 'json', - timeout: 5000, - success: function(d) { - var data = d['domains']; - for (var domain in data) { - lib[domain] = {}; - lib[domain].methods = []; - for (var p in data[domain]['paths']) { - for (var m in data[domain]['paths'][p]) { - if (lib[domain].methods[m] == undefined) lib[domain].methods[m] = {}; - lib[domain].methods[m][p] = data[domain]['paths'][p][m]; - } - } - for (var m in lib[domain]['methods']) { - lib[domain][m] = makeFunc(domain, m); - } + function makeFunc(domain, m) { + return function(attr, callback) { + attr = attr || {}; + var curLib = {} + for (var curAttr in attr['data']) + curLib[curAttr] = attr['data'][curAttr]; + + var hdr = {}; + for (var curHdr in attr['header']) + hdr[curHdr] = attr['header'][curHdr]; + + var curPath = '/' + domain; + var curLink = curPath; + if (attr['id'] != undefined) { + curPath += '/' + attr['id']; + curLink += '/{_id}'; + } + + if (get('cur_token') != null) + hdr['Authorization'] = 'Basic ' + btoa(get('cur_token') + ':'); + + if (m != 'GET') { + if (m == 'POST' || m == 'PUT') + for (var param in lib[domain]['methods'][m][curLink]['params']) + if (lib[domain]['methods'][m][curLink]['params'][param]['required'] == true) + if (curLib[lib[domain]['methods'][m][curLink]['params'][param]['name']] == undefined) + return 'Error: Missing ' + lib[domain]['methods'][m][curLink]['params'][param]['name']; + hdr['Content-Type'] = 'application/json'; + curLib = JSON.stringify(curLib); + } + req({ + path: curPath, + method: m, + data: curLib, + headers: hdr, + }, callback); + return true; + }; } - checkAuth(); - }, - error: function(d) { - console.log('Cannot reach initialization spec: '+core.lib.spec_url); - console.log(d); - } - }); - function checkAuth() { - if (get('cur_token') != null) { - lib.sessions.GET({ - data: { - where: 'token==["' + get('cur_token') + '"]' - } - }, function(res) { - if (res !== undefined && res.hasOwnProperty('_items') && res['_items'].length > 0) - core.lib.authenticated = true; - else - core.lib.authenticated = false; - core.lib.ready = true; - checkAuth(); + $.ajax({ + url: core.lib.spec_url, + dataType: 'json', + timeout: 5000, + success: function(d) { + var data = d['domains']; + for (var domain in data) { + lib[domain] = {}; + lib[domain].methods = []; + for (var p in data[domain]['paths']) { + for (var m in data[domain]['paths'][p]) { + if (lib[domain].methods[m] == undefined) lib[domain].methods[m] = {}; + lib[domain].methods[m][p] = data[domain]['paths'][p][m]; + } + } + for (var m in lib[domain]['methods']) { + lib[domain][m] = makeFunc(domain, m); + } + } + checkAuth(); + }, + error: function(d) { + console.log('Cannot reach initialization spec: ' + core.lib.spec_url); + console.log(d); + } }); - } else { - core.lib.authenticated = false; - core.lib.ready = true; - checkAuth(); - } - } - - // Get the etag - lib.getEtag = function(curDomain, curId, callback) { - return lib[curDomain].GET({ - id: curId - }, function(res) { - callback(res['_etag']); - }); - } - - // Returns whether user is logged in - lib.authenticated = function() { - return core.lib.authenticated; - } - - // Login function - lib.login = function(curUser, curPass, callback) { - callback = callback || dummy; - req({ - path: '/sessions/', - method: 'POST', - data: JSON.stringify({ - user: curUser.toLowerCase(), - password: curPass - }), - headers: { - 'Content-Type': 'application/json', - }, - }, function(msg) { - var reqVar = ['token', 'user_id', 'id']; - for (var i in reqVar) { - lib['cur_' + reqVar[i]] = msg[reqVar[i]]; + + function checkAuth() { + if (get('cur_token') != null) { + lib.sessions.GET({ + data: { + where: 'token==["' + get('cur_token') + '"]' + } + }, function(res) { + if (res !== undefined && res.hasOwnProperty('_items') && res['_items'].length > 0) + core.lib.authenticated = true; + else + core.lib.authenticated = false; + core.lib.ready = true; + setTimeout(checkAuth, core.lib.auth_interval); + }); + } else { + core.lib.authenticated = false; + core.lib.ready = true; + setTimeout(checkAuth, core.lib.auth_interval); + } } - if (msg['_status'] == 'OK') { - set('cur_token_id', msg['id'], 1); - set('cur_token', msg['token'], 1); - set('cur_user_id', parseInt(msg['user_id']), 1); - callback(true); - } else { - set('cur_token_id', null); - set('cur_token', null); - set('cur_user_id', null); - callback(false); + + // Get the etag + lib.getEtag = function(curDomain, curId, callback) { + return lib[curDomain].GET({ + id: curId + }, function(res) { + callback(res['_etag']); + }); } - }); - } - // Logout - lib.logout = function() { - // Deleting token from api and unsetting the vars - lib.sessions.DELETE({id: get('cur_token_id')}, function(res){ - set('cur_token', null); - set('cur_token_id', null); - set('cur_user_id', null); - }); - } - - // Get info about the current user - lib.user = function(attr, callback) { - callback = callback || dummy; - lib.users.GET({ - id: get('cur_user_id') - }, function(res) { - if (typeof attr === 'object') { - var ret = {}; - for (var key in attr) - ret[attr[key]] = res[attr[key]]; - callback(ret); - } else { - callback(res[attr]); + // Returns whether user is logged in + lib.authenticated = function() { + return core.lib.authenticated; } - }); - } - - // Get the necessary field for specific requests - lib.getRequiredFields = function(domain, type, wId) { - var curTree; - var resAttr = {}; - if (wId) - curTree = lib[domain]['methods'][type]['/' + domain + '/{_id}']['params']; - else - curTree = lib[domain]['methods'][type]['/' + domain]['params']; - if (curTree.length == 0) return false; - else { - for (var i = 0; i < curTree.length; i++) - if (curTree[i].required == true) - resAttr[curTree[i].name] = curTree[i]; - } - return resAttr; - } - //On function - lib.on = function(trigger, callback){ - if(callback){ - lib.on_mem[trigger].callback = callback; - lib.on_mem[trigger].func(); - } - } - lib.on_mem = { - ready: { - func: function() { - if (core.lib.ready) - lib.on_mem.ready.callback(); - else setTimeout(function() { - lib.on_mem.ready.func(); - }, core.lib.on_interval); - } - }, - login: { - func: function(){ - if(core.lib.authenticated && !lib.on_mem.login.prev) - lib.on_mem.login.callback(); - lib.on_mem.login.prev = core.lib.authenticated; - setTimeout(lib.on_mem.login.func, core.lib.on_interval); - }, - prev: false, - }, - logout: { - func: function(){ - if(!core.lib.authenticated && lib.on_mem.logout.prev) - lib.on_mem.logout.callback(); - lib.on_mem.logout.prev = core.lib.authenticated; - setTimeout(lib.on_mem.logout.func, core.lib.on_interval); - }, - prev: false, - }, - } + // Login function + lib.login = function(curUser, curPass, callback) { + callback = callback || dummy; + req({ + path: '/sessions/', + method: 'POST', + data: JSON.stringify({ + user: curUser.toLowerCase(), + password: curPass + }), + headers: { + 'Content-Type': 'application/json', + }, + }, function(msg) { + var reqVar = ['token', 'user_id', 'id']; + for (var i in reqVar) { + lib['cur_' + reqVar[i]] = msg[reqVar[i]]; + } + if (msg['_status'] == 'OK') { + set('cur_token_id', msg['id'], 1); + set('cur_token', msg['token'], 1); + set('cur_user_id', parseInt(msg['user_id']), 1); + callback(true); + } else { + set('cur_token_id', null); + set('cur_token', null); + set('cur_user_id', null); + callback(false); + } + }); + } - return lib; - } + // Logout + lib.logout = function() { + // Deleting token from api and unsetting the vars + lib.sessions.DELETE({ + id: get('cur_token_id') + }, function(res) { + set('cur_token', null); + set('cur_token_id', null); + set('cur_user_id', null); + }); + } - if (typeof(window[lns]) === 'undefined') { - window[lns] = libgen(); - } else { - console.log(lns+' already defined, please solve conflict'); - } + // Get info about the current user + lib.user = function(attr, callback) { + callback = callback || dummy; + lib.users.GET({ + id: get('cur_user_id') + }, function(res) { + if (typeof attr === 'object') { + var ret = {}; + for (var key in attr) + ret[attr[key]] = res[attr[key]]; + callback(ret); + } else { + callback(res[attr]); + } + }); + } + + // Get the necessary field for specific requests + lib.getRequiredFields = function(domain, type, wId) { + var curTree; + var resAttr = {}; + if (wId) + curTree = lib[domain]['methods'][type]['/' + domain + '/{_id}']['params']; + else + curTree = lib[domain]['methods'][type]['/' + domain]['params']; + if (curTree.length == 0) return false; + else { + for (var i = 0; i < curTree.length; i++) + if (curTree[i].required == true) + resAttr[curTree[i].name] = curTree[i]; + } + return resAttr; + } + + //On function + lib.on = function(trigger, callback) { + if (callback) { + lib.on_mem[trigger].callback = callback; + lib.on_mem[trigger].func(); + } + } + lib.on_mem = { + ready: { + func: function() { + if (core.lib.ready) + lib.on_mem.ready.callback(); + else setTimeout(function() { + lib.on_mem.ready.func(); + }, core.lib.on_interval); + } + }, + login: { + func: function() { + if (core.lib.authenticated && !lib.on_mem.login.prev) + lib.on_mem.login.callback(); + lib.on_mem.login.prev = core.lib.authenticated; + setTimeout(lib.on_mem.login.func, core.lib.on_interval); + }, + prev: false, + }, + logout: { + func: function() { + if (!core.lib.authenticated && lib.on_mem.logout.prev) + lib.on_mem.logout.callback(); + lib.on_mem.logout.prev = core.lib.authenticated; + setTimeout(lib.on_mem.logout.func, core.lib.on_interval); + }, + prev: false, + }, + } + + return lib; + } + + if (typeof(window[lns]) === 'undefined') { + window[lns] = libgen(); + } else { + console.log(lns + ' already defined, please solve conflict'); + } })(window); diff --git a/admin/lib/amiv/spec.json b/admin/lib/amiv/spec.json index 671f633f5c9304b1236210a307f66386ca16960d..6dd3ffaf8f993ea8026d011db6153132f79eade1 100644 --- a/admin/lib/amiv/spec.json +++ b/admin/lib/amiv/spec.json @@ -1,2405 +1 @@ -{ - "domains": { - "files": { - "paths": { - "/files/{_id}": { - "PUT": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Replace a File" - }, - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a File" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a File" - } - }, - "/files": { - "POST": { - "params": [ - { - "required": false, - "type": "objectid", - "name": "study_doc", - "data_relation": { - "field": "id", - "resource": "studydocuments", - "embeddable": true - } - }, - { - "name": "name", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "required": true, - "type": "media", - "name": "data" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "unique": false, - "name": "study_doc_id", - "data_relation": { - "field": "id", - "resource": "studydocuments", - "embeddable": false - }, - "required": true, - "type": "objectid" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - } - ], - "label": "Create a File" - }, - "GET": { - "params": [], - "label": "Retrieve all files" - } - } - }, - "description": {} - }, - "studydocuments": { - "paths": { - "/studydocuments/{_id}": { - "PUT": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Replace a Studydocument" - }, - "PATCH": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - }, - { - "required": false, - "type": "objectid", - "name": "files", - "data_relation": { - "field": "id", - "resource": "files", - "embeddable": true - } - }, - { - "name": "name", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "name": "professor", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "name": "exam_session", - "nullable": true, - "required": false, - "maxlength": 10, - "unique": false, - "type": "string" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "name": "author_name", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "unique": false, - "name": "semester", - "nullable": true, - "required": false, - "type": "integer" - }, - { - "name": "department", - "nullable": true, - "required": false, - "maxlength": 4, - "unique": false, - "type": "string" - }, - { - "name": "lecture", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "name": "type", - "nullable": true, - "required": false, - "maxlength": 30, - "unique": false, - "type": "string" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - } - ], - "label": "Update a Studydocument" - }, - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a Studydocument" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a Studydocument" - } - }, - "/studydocuments": { - "POST": { - "params": [ - { - "required": false, - "type": "objectid", - "name": "files", - "data_relation": { - "field": "id", - "resource": "files", - "embeddable": true - } - }, - { - "name": "name", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "name": "professor", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "name": "exam_session", - "nullable": true, - "required": false, - "maxlength": 10, - "unique": false, - "type": "string" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "name": "author_name", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "unique": false, - "name": "semester", - "nullable": true, - "required": false, - "type": "integer" - }, - { - "name": "department", - "nullable": true, - "required": false, - "maxlength": 4, - "unique": false, - "type": "string" - }, - { - "name": "lecture", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "name": "type", - "nullable": true, - "required": false, - "maxlength": 30, - "unique": false, - "type": "string" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - } - ], - "label": "Create a Studydocument" - }, - "GET": { - "params": [], - "label": "Retrieve all studydocuments" - } - } - }, - "description": { - "fields": { - "semester": "Study-Semester as an Integer starting with first semester Bachelor." - }, - "general": "Study-documents are basically all documents that are connected to a course. This resource provides meta-data for the assigned files." - } - }, - "users": { - "paths": { - "/users/{_id}": { - "PUT": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Replace a User" - }, - "PATCH": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - }, - { - "name": "legi", - "nullable": true, - "required": false, - "maxlength": 8, - "unique": true, - "type": "string" - }, - { - "unique": false, - "name": "firstname", - "maxlength": 50, - "required": true, - "type": "string" - }, - { - "required": false, - "type": "objectid", - "name": "sessions", - "data_relation": { - "field": "id", - "resource": "sessions", - "embeddable": true - } - }, - { - "required": false, - "type": "objectid", - "name": "groupmemberships", - "data_relation": { - "field": "id", - "resource": "groupusermembers", - "embeddable": true - } - }, - { - "unique": false, - "name": "lastname", - "maxlength": 50, - "required": true, - "type": "string" - }, - { - "name": "rfid", - "nullable": true, - "required": false, - "maxlength": 6, - "unique": true, - "type": "string" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "regex": "^.+@.+$", - "name": "email", - "required": true, - "maxlength": 100, - "unique": true, - "type": "string" - }, - { - "name": "phone", - "nullable": true, - "required": false, - "maxlength": 20, - "unique": false, - "type": "string" - }, - { - "name": "membership", - "default": "none", - "required": true, - "maxlength": 13, - "unique": false, - "type": "string" - }, - { - "required": false, - "type": "objectid", - "name": "eventsignups", - "data_relation": { - "field": "id", - "resource": "eventsignups", - "embeddable": true - } - }, - { - "name": "nethz", - "nullable": true, - "required": false, - "maxlength": 30, - "unique": true, - "type": "string", - "empty": false - }, - { - "name": "gender", - "required": true, - "allowed": [ - "male", - "female" - ], - "unique": false, - "type": "string", - "maxlength": 6 - }, - { - "name": "department", - "nullable": true, - "required": false, - "allowed": [ - "itet", - "mavt" - ], - "unique": false, - "type": "string", - "maxlength": 5 - }, - { - "name": "password", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - }, - { - "name": "send_newsletter", - "nullable": true, - "default": true, - "required": false, - "unique": false, - "type": "boolean" - } - ], - "label": "Update a User" - }, - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a User" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a User" - } - }, - "/users/{nethz}": { - "GET": { - "params": [ - { - "name": "nethz", - "nullable": true, - "required": false, - "maxlength": 30, - "unique": true, - "type": "string", - "empty": false - } - ], - "label": "Retrieve a User" - } - }, - "/users": { - "POST": { - "params": [ - { - "name": "legi", - "nullable": true, - "required": false, - "maxlength": 8, - "unique": true, - "type": "string" - }, - { - "unique": false, - "name": "firstname", - "maxlength": 50, - "required": true, - "type": "string" - }, - { - "required": false, - "type": "objectid", - "name": "sessions", - "data_relation": { - "field": "id", - "resource": "sessions", - "embeddable": true - } - }, - { - "required": false, - "type": "objectid", - "name": "groupmemberships", - "data_relation": { - "field": "id", - "resource": "groupusermembers", - "embeddable": true - } - }, - { - "unique": false, - "name": "lastname", - "maxlength": 50, - "required": true, - "type": "string" - }, - { - "name": "rfid", - "nullable": true, - "required": false, - "maxlength": 6, - "unique": true, - "type": "string" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "regex": "^.+@.+$", - "name": "email", - "required": true, - "maxlength": 100, - "unique": true, - "type": "string" - }, - { - "name": "phone", - "nullable": true, - "required": false, - "maxlength": 20, - "unique": false, - "type": "string" - }, - { - "name": "membership", - "default": "none", - "required": true, - "maxlength": 13, - "unique": false, - "type": "string" - }, - { - "required": false, - "type": "objectid", - "name": "eventsignups", - "data_relation": { - "field": "id", - "resource": "eventsignups", - "embeddable": true - } - }, - { - "name": "nethz", - "nullable": true, - "required": false, - "maxlength": 30, - "unique": true, - "type": "string", - "empty": false - }, - { - "name": "gender", - "required": true, - "allowed": [ - "male", - "female" - ], - "unique": false, - "type": "string", - "maxlength": 6 - }, - { - "name": "department", - "nullable": true, - "required": false, - "allowed": [ - "itet", - "mavt" - ], - "unique": false, - "type": "string", - "maxlength": 5 - }, - { - "name": "password", - "nullable": true, - "required": false, - "maxlength": 100, - "unique": false, - "type": "string" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - }, - { - "name": "send_newsletter", - "nullable": true, - "default": true, - "required": false, - "unique": false, - "type": "boolean" - } - ], - "label": "Create a User" - }, - "GET": { - "params": [], - "label": "Retrieve all users" - } - } - }, - "description": { - "methods": { - "GET": "Authorization is required for most of the fields" - }, - "general": "In general, the user data will be generated from LDAP-Data. However, one might change the RFID-Number or the membership-status. Extraordinary members may not have a LDAP-Account and can therefore access all given fields." - } - }, - "": { - "paths": { - "/": { - "GET": {} - } - }, - "description": {} - }, - "purchases": { - "paths": { - "/purchases": { - "POST": { - "params": [ - { - "unique": false, - "name": "slot", - "nullable": true, - "required": false, - "type": "integer" - }, - { - "name": "user_id", - "nullable": true, - "required": false, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "unique": false, - "name": "timestamp", - "nullable": true, - "required": false, - "type": "datetime" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "name": "type", - "nullable": true, - "required": false, - "maxlength": 5, - "unique": false, - "type": "string" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - } - ], - "label": "Create a Purchase" - }, - "GET": { - "params": [], - "label": "Retrieve all purchases" - } - }, - "/purchases/{_id}": { - "PUT": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Replace a Purchase" - }, - "PATCH": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - }, - { - "unique": false, - "name": "slot", - "nullable": true, - "required": false, - "type": "integer" - }, - { - "name": "user_id", - "nullable": true, - "required": false, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "unique": false, - "name": "timestamp", - "nullable": true, - "required": false, - "type": "datetime" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "name": "type", - "nullable": true, - "required": false, - "maxlength": 5, - "unique": false, - "type": "string" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - } - ], - "label": "Update a Purchase" - }, - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a Purchase" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a Purchase" - } - } - }, - "description": { - "fields": { - "slot": "Slot in the machine which was purchased(different items, which may have different prices)." - }, - "general": "A beer machine or kaffi machine transaction. Users should be able to get beer or kaffi, if their last timestamp is older than one day and they are AMIV members. This resource is used to log their purchases." - } - }, - "docs": { - "paths": { - "/docs/": { - "GET": {} - }, - "/docs/spec.json": { - "GET": {} - } - }, - "description": {} - }, - "groupusermembers": { - "paths": { - "/groupusermembers/{_id}": { - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a Groupusermember" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a Groupusermember" - } - }, - "/groupusermembers": { - "POST": { - "params": [ - { - "name": "group_id", - "self_enrollment_must_be_allowed": true, - "required": true, - "unique_combination": [ - "groupusermembers", - "user_id" - ], - "data_relation": { - "field": "id", - "resource": "groups", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "name": "user_id", - "unique_combination": [ - "groupusermembers", - "group_id" - ], - "required": true, - "only_self_enrollment_for_group": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - } - ], - "label": "Create a Groupusermember" - }, - "GET": { - "params": [], - "label": "Retrieve all groupusermembers" - } - } - }, - "description": { - "general": "Assignment of registered users to groups." - } - }, - "eventsignups": { - "paths": { - "/eventsignups/{_id}": { - "PUT": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Replace a Eventsignup" - }, - "PATCH": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - }, - { - "unique": false, - "name": "additional_fields", - "nullable": true, - "required": false, - "type": "json_event_field" - }, - { - "name": "user_id", - "unique_combination": [ - "eventsignups", - "event_id" - ], - "required": true, - "not_patchable": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "only_self_enrollment_for_event": true, - "unique": false, - "type": "objectid" - }, - { - "signup_requirements": true, - "name": "event_id", - "unique_combination": [ - "eventsignups", - "user_id", - "email" - ], - "required": true, - "not_patchable": true, - "data_relation": { - "field": "id", - "resource": "events", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "regex": "^.+@.+$", - "name": "email", - "email_signup_must_be_allowed": true, - "nullable": true, - "required": false, - "unique_combination": [ - "eventsignups", - "event_id" - ], - "not_patchable": true, - "maxlength": 100, - "unique": false, - "type": "objectid", - "only_anonymous": true - }, - { - "name": "_confirmed", - "nullable": true, - "default": false, - "required": false, - "unique": false, - "type": "boolean" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - } - ], - "label": "Update a Eventsignup" - }, - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a Eventsignup" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a Eventsignup" - } - }, - "/eventsignups": { - "GET": { - "params": [], - "label": "Retrieve all eventsignups" - } - } - }, - "description": { - "fields": { - "additional_fields": "Data-schema depends on 'additional_fields' from the mapped event. Please provide in json-format.", - "user_id": "To sign up as external user, set 'user_id' to '-1'", - "email": "For registered users, this is just a projection of your general email-address. External users need to provide their email here." - }, - "general": "You can signup here for an existing event inside of the registration-window. External Users can only sign up to public events." - } - }, - "static": { - "paths": { - "/static/bootstrap/{filename}": { - "GET": {} - }, - "/static/{filename}": { - "GET": {} - } - }, - "description": {} - }, - "groups": { - "paths": { - "/groups": { - "POST": { - "params": [ - { - "required": false, - "type": "objectid", - "name": "user_subscribers", - "data_relation": { - "field": "id", - "resource": "groupusermembers", - "embeddable": true - } - }, - { - "required": false, - "type": "objectid", - "name": "addresses", - "data_relation": { - "field": "id", - "resource": "forwardaddresses", - "embeddable": true - } - }, - { - "unique": true, - "name": "name", - "maxlength": 100, - "required": true, - "type": "string" - }, - { - "unique": false, - "name": "has_zoidberg_share", - "default": false, - "required": true, - "type": "boolean" - }, - { - "unique": false, - "name": "allow_self_enrollment", - "default": false, - "required": true, - "type": "boolean" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "unique": false, - "name": "moderator_id", - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "required": true, - "type": "objectid" - }, - { - "required": false, - "type": "objectid", - "name": "owner", - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": true - } - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - }, - { - "unique": false, - "name": "permissions", - "nullable": true, - "required": false, - "type": "permissions_jsonschema" - } - ], - "label": "Create a Group" - }, - "GET": { - "params": [], - "label": "Retrieve all groups" - } - }, - "/groups/{_id}": { - "PUT": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Replace a Group" - }, - "PATCH": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - }, - { - "required": false, - "type": "objectid", - "name": "user_subscribers", - "data_relation": { - "field": "id", - "resource": "groupusermembers", - "embeddable": true - } - }, - { - "required": false, - "type": "objectid", - "name": "addresses", - "data_relation": { - "field": "id", - "resource": "forwardaddresses", - "embeddable": true - } - }, - { - "unique": true, - "name": "name", - "maxlength": 100, - "required": true, - "type": "string" - }, - { - "unique": false, - "name": "has_zoidberg_share", - "default": false, - "required": true, - "type": "boolean" - }, - { - "unique": false, - "name": "allow_self_enrollment", - "default": false, - "required": true, - "type": "boolean" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "unique": false, - "name": "moderator_id", - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "required": true, - "type": "objectid" - }, - { - "required": false, - "type": "objectid", - "name": "owner", - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": true - } - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - }, - { - "unique": false, - "name": "permissions", - "nullable": true, - "required": false, - "type": "permissions_jsonschema" - } - ], - "label": "Update a Group" - }, - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a Group" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a Group" - } - } - }, - "description": { - "fields": { - "has_zoidberg_share": "Wether the group has a share in the amiv storage", - "allow_self_enrollment": "If true, the group can be seen by all users and they can subscribe themselves", - "permissions": "permissions the group grants. has to be according to the jsonschema available at /notyetavailable" - }, - "general": "This resource describes the different teams in AMIV.A group can grant API permissions and can be reached with several addresses. To see the subscriptions, have a look at '/groupusermembers'. To see the mail addresses, see '/forwardaddresses'." - } - }, - "forwardaddresses": { - "paths": { - "/forwardaddresses/{_id}": { - "PUT": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Replace a Forwardaddresse" - }, - "PATCH": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - }, - { - "name": "group_id", - "required": true, - "data_relation": { - "field": "id", - "resource": "groups", - "embeddable": false - }, - "only_groups_you_moderate": true, - "unique": false, - "type": "objectid" - }, - { - "required": false, - "type": "objectid", - "name": "group", - "data_relation": { - "field": "id", - "resource": "groups", - "embeddable": true - } - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - }, - { - "unique": true, - "name": "address", - "maxlength": 100, - "required": true, - "type": "string" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - } - ], - "label": "Update a Forwardaddresse" - }, - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a Forwardaddresse" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a Forwardaddresse" - } - }, - "/forwardaddresses": { - "POST": { - "params": [ - { - "name": "group_id", - "required": true, - "data_relation": { - "field": "id", - "resource": "groups", - "embeddable": false - }, - "only_groups_you_moderate": true, - "unique": false, - "type": "objectid" - }, - { - "required": false, - "type": "objectid", - "name": "group", - "data_relation": { - "field": "id", - "resource": "groups", - "embeddable": true - } - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - }, - { - "unique": true, - "name": "address", - "maxlength": 100, - "required": true, - "type": "string" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - } - ], - "label": "Create a Forwardaddresse" - }, - "GET": { - "params": [], - "label": "Retrieve all forwardaddresses" - } - } - }, - "description": { - "fields": { - "address": "E-Mail address to forward" - }, - "general": "An email address associated with a group. By adding an address here, all mails sent to that address will be forwarded to all members of the associated group." - } - }, - "media": { - "paths": { - "/media/{_id}": { - "GET": {} - } - }, - "description": {} - }, - "sessions": { - "paths": { - "/sessions/{_id}": { - "PUT": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Replace a Session" - }, - "PATCH": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - }, - { - "unique": false, - "name": "token", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": false, - "name": "user_id", - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "required": true, - "type": "objectid" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - } - ], - "label": "Update a Session" - }, - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a Session" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a Session" - } - }, - "/sessions": { - "GET": { - "params": [], - "label": "Retrieve all sessions" - } - } - }, - "description": { - "methods": { - "POST": "Login and aquire a login token. Post the fields 'user' and 'password', the response will contain the token." - }, - "general": "A session is used to authenticate a user after he provided login data. To acquire a session use POST, which will give you a token to use as the user field of HTTP basic auth header with an empty password. POST requires user and password fields." - } - }, - "storage": { - "paths": { - "/storage/{filename}": { - "GET": {} - } - }, - "description": {} - }, - "joboffers": { - "paths": { - "/joboffers": { - "POST": { - "params": [ - { - "unique": false, - "name": "title_de", - "nullable": true, - "required": false, - "type": "string" - }, - { - "name": "company", - "nullable": true, - "required": false, - "maxlength": 30, - "unique": false, - "type": "string" - }, - { - "unique": false, - "name": "title_en", - "nullable": true, - "required": false, - "type": "string" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "unique": false, - "name": "description_en", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": false, - "name": "time_end", - "nullable": true, - "required": false, - "type": "datetime" - }, - { - "filetype": [ - "png", - "jpeg" - ], - "required": false, - "type": "media", - "name": "logo" - }, - { - "filetype": [ - "pdf" - ], - "required": false, - "type": "media", - "name": "pdf" - }, - { - "unique": false, - "name": "description_de", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - } - ], - "label": "Create a Joboffer" - }, - "GET": { - "params": [], - "label": "Retrieve all joboffers" - } - }, - "/joboffers/{_id}": { - "PUT": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Replace a Joboffer" - }, - "PATCH": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - }, - { - "unique": false, - "name": "title_de", - "nullable": true, - "required": false, - "type": "string" - }, - { - "name": "company", - "nullable": true, - "required": false, - "maxlength": 30, - "unique": false, - "type": "string" - }, - { - "unique": false, - "name": "title_en", - "nullable": true, - "required": false, - "type": "string" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "unique": false, - "name": "description_en", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": false, - "name": "time_end", - "nullable": true, - "required": false, - "type": "datetime" - }, - { - "filetype": [ - "png", - "jpeg" - ], - "required": false, - "type": "media", - "name": "logo" - }, - { - "filetype": [ - "pdf" - ], - "required": false, - "type": "media", - "name": "pdf" - }, - { - "unique": false, - "name": "description_de", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - } - ], - "label": "Update a Joboffer" - }, - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a Joboffer" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a Joboffer" - } - } - }, - "description": {} - }, - "confirmations": { - "paths": { - "/confirmations": { - "POST": {} - } - }, - "description": {} - }, - "events": { - "paths": { - "/events": { - "POST": { - "params": [ - { - "unique": false, - "name": "title_de", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": false, - "name": "allow_email_signup", - "default": false, - "required": true, - "type": "boolean" - }, - { - "readonly": true, - "unique": false, - "name": "signup_count", - "required": false, - "type": "string" - }, - { - "filetype": [ - "png", - "jpeg" - ], - "required": false, - "type": "media", - "name": "img_thumbnail" - }, - { - "name": "time_end", - "nullable": true, - "later_than": "time_start", - "required": false, - "dependencies": [ - "time_start" - ], - "unique": false, - "type": "datetime" - }, - { - "required": false, - "type": "objectid", - "name": "signups", - "data_relation": { - "field": "id", - "resource": "eventsignups", - "embeddable": true - } - }, - { - "unique": false, - "name": "time_register_start", - "nullable": true, - "required": false, - "type": "datetime" - }, - { - "unique": false, - "name": "catchphrase_en", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": false, - "name": "description_de", - "nullable": true, - "required": false, - "type": "string" - }, - { - "name": "time_register_end", - "nullable": true, - "later_than": "time_register_start", - "required": false, - "dependencies": [ - "time_register_start" - ], - "unique": false, - "type": "datetime" - }, - { - "filetype": [ - "png", - "jpeg" - ], - "required": false, - "type": "media", - "name": "img_banner" - }, - { - "unique": false, - "name": "time_start", - "nullable": true, - "required": false, - "type": "datetime" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "name": "spots", - "min": -1, - "if_this_then": [ - "time_register_start", - "time_register_end" - ], - "required": true, - "unique": false, - "type": "integer" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - }, - { - "name": "location", - "nullable": true, - "required": false, - "maxlength": 50, - "unique": false, - "type": "string" - }, - { - "name": "show_infoscreen", - "nullable": true, - "default": false, - "required": false, - "unique": false, - "type": "boolean" - }, - { - "unique": false, - "name": "additional_fields", - "nullable": true, - "required": false, - "type": "json_schema" - }, - { - "filetype": [ - "png", - "jpeg" - ], - "required": false, - "type": "media", - "name": "img_infoscreen" - }, - { - "name": "price", - "nullable": true, - "required": false, - "min": 0, - "unique": false, - "type": "integer" - }, - { - "unique": false, - "name": "title_en", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": false, - "name": "description_en", - "nullable": true, - "required": false, - "type": "string" - }, - { - "filetype": [ - "png", - "jpeg" - ], - "required": false, - "type": "media", - "name": "img_poster" - }, - { - "name": "show_announce", - "nullable": true, - "default": false, - "required": false, - "unique": false, - "type": "boolean" - }, - { - "name": "show_website", - "nullable": true, - "default": false, - "required": false, - "unique": false, - "type": "boolean" - }, - { - "unique": false, - "name": "catchphrase_de", - "nullable": true, - "required": false, - "type": "string" - } - ], - "label": "Create a Event" - }, - "GET": { - "params": [], - "label": "Retrieve all events" - } - }, - "/events/{_id}": { - "PUT": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Replace a Event" - }, - "PATCH": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - }, - { - "unique": false, - "name": "title_de", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": false, - "name": "allow_email_signup", - "default": false, - "required": true, - "type": "boolean" - }, - { - "readonly": true, - "unique": false, - "name": "signup_count", - "required": false, - "type": "string" - }, - { - "filetype": [ - "png", - "jpeg" - ], - "required": false, - "type": "media", - "name": "img_thumbnail" - }, - { - "name": "time_end", - "nullable": true, - "later_than": "time_start", - "required": false, - "dependencies": [ - "time_start" - ], - "unique": false, - "type": "datetime" - }, - { - "required": false, - "type": "objectid", - "name": "signups", - "data_relation": { - "field": "id", - "resource": "eventsignups", - "embeddable": true - } - }, - { - "unique": false, - "name": "time_register_start", - "nullable": true, - "required": false, - "type": "datetime" - }, - { - "unique": false, - "name": "catchphrase_en", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": false, - "name": "description_de", - "nullable": true, - "required": false, - "type": "string" - }, - { - "name": "time_register_end", - "nullable": true, - "later_than": "time_register_start", - "required": false, - "dependencies": [ - "time_register_start" - ], - "unique": false, - "type": "datetime" - }, - { - "filetype": [ - "png", - "jpeg" - ], - "required": false, - "type": "media", - "name": "img_banner" - }, - { - "unique": false, - "name": "time_start", - "nullable": true, - "required": false, - "type": "datetime" - }, - { - "name": "_author", - "nullable": true, - "required": false, - "readonly": true, - "data_relation": { - "field": "id", - "resource": "users", - "embeddable": false - }, - "unique": false, - "type": "objectid" - }, - { - "name": "spots", - "min": -1, - "if_this_then": [ - "time_register_start", - "time_register_end" - ], - "required": true, - "unique": false, - "type": "integer" - }, - { - "unique": true, - "name": "id", - "required": false, - "type": "integer" - }, - { - "name": "location", - "nullable": true, - "required": false, - "maxlength": 50, - "unique": false, - "type": "string" - }, - { - "name": "show_infoscreen", - "nullable": true, - "default": false, - "required": false, - "unique": false, - "type": "boolean" - }, - { - "unique": false, - "name": "additional_fields", - "nullable": true, - "required": false, - "type": "json_schema" - }, - { - "filetype": [ - "png", - "jpeg" - ], - "required": false, - "type": "media", - "name": "img_infoscreen" - }, - { - "name": "price", - "nullable": true, - "required": false, - "min": 0, - "unique": false, - "type": "integer" - }, - { - "unique": false, - "name": "title_en", - "nullable": true, - "required": false, - "type": "string" - }, - { - "unique": false, - "name": "description_en", - "nullable": true, - "required": false, - "type": "string" - }, - { - "filetype": [ - "png", - "jpeg" - ], - "required": false, - "type": "media", - "name": "img_poster" - }, - { - "name": "show_announce", - "nullable": true, - "default": false, - "required": false, - "unique": false, - "type": "boolean" - }, - { - "name": "show_website", - "nullable": true, - "default": false, - "required": false, - "unique": false, - "type": "boolean" - }, - { - "unique": false, - "name": "catchphrase_de", - "nullable": true, - "required": false, - "type": "string" - } - ], - "label": "Update a Event" - }, - "DELETE": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Delete a Event" - }, - "GET": { - "params": [ - { - "required": true, - "type": "string", - "name": "_id" - } - ], - "label": "Retrieve a Event" - } - } - }, - "description": { - "fields": { - "additional_fields": "must be provided in form of a JSON-Schema. You can add here fields you want to know from people signing up going further than their email-address", - "price": "Price of the event as Integer in Rappen.", - "allow_email_signup": "If False, only AMIV-Members can sign up for this event", - "spots": "For no limit, set to '0'. If no signup required, set to '-1'. Otherwise just provide an integer." - }, - "methods": { - "GET": "You are always allowed, even without session, to view AMIV-Events" - }, - "general": "An Event is basically everything happening in the AMIV. All time fields have the format YYYY-MM-DDThh:mmZ, e.g. 2014-12-20T11:50:06Z" - } - } - }, - "api_name": "API", - "base": "http:///", - "server_name": null -} \ No newline at end of file +{"domains":{"files":{"paths":{"/files/{_id}":{"PUT":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Replace a File"},"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a File"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a File"}},"/files":{"POST":{"params":[{"required":false,"type":"objectid","name":"study_doc","data_relation":{"field":"id","resource":"studydocuments","embeddable":true}},{"name":"name","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"required":true,"type":"media","name":"data"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"unique":false,"name":"study_doc_id","data_relation":{"field":"id","resource":"studydocuments","embeddable":false},"required":true,"type":"objectid"},{"unique":true,"name":"id","required":false,"type":"integer"}],"label":"Create a File"},"GET":{"params":[],"label":"Retrieve all files"}}},"description":{}},"studydocuments":{"paths":{"/studydocuments/{_id}":{"PUT":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Replace a Studydocument"},"PATCH":{"params":[{"required":true,"type":"string","name":"_id"},{"required":false,"type":"objectid","name":"files","data_relation":{"field":"id","resource":"files","embeddable":true}},{"name":"name","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"name":"professor","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"name":"exam_session","nullable":true,"required":false,"maxlength":10,"unique":false,"type":"string"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"name":"author_name","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"unique":false,"name":"semester","nullable":true,"required":false,"type":"integer"},{"name":"department","nullable":true,"required":false,"maxlength":4,"unique":false,"type":"string"},{"name":"lecture","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"name":"type","nullable":true,"required":false,"maxlength":30,"unique":false,"type":"string"},{"unique":true,"name":"id","required":false,"type":"integer"}],"label":"Update a Studydocument"},"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a Studydocument"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a Studydocument"}},"/studydocuments":{"POST":{"params":[{"required":false,"type":"objectid","name":"files","data_relation":{"field":"id","resource":"files","embeddable":true}},{"name":"name","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"name":"professor","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"name":"exam_session","nullable":true,"required":false,"maxlength":10,"unique":false,"type":"string"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"name":"author_name","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"unique":false,"name":"semester","nullable":true,"required":false,"type":"integer"},{"name":"department","nullable":true,"required":false,"maxlength":4,"unique":false,"type":"string"},{"name":"lecture","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"name":"type","nullable":true,"required":false,"maxlength":30,"unique":false,"type":"string"},{"unique":true,"name":"id","required":false,"type":"integer"}],"label":"Create a Studydocument"},"GET":{"params":[],"label":"Retrieve all studydocuments"}}},"description":{"fields":{"semester":"Study-Semester as an Integer starting with first semester Bachelor."},"general":"Study-documents are basically all documents that are connected to a course. This resource provides meta-data for the assigned files."}},"users":{"paths":{"/users/{_id}":{"PUT":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Replace a User"},"PATCH":{"params":[{"required":true,"type":"string","name":"_id"},{"name":"legi","nullable":true,"required":false,"maxlength":8,"unique":true,"type":"string"},{"unique":false,"name":"firstname","maxlength":50,"required":true,"type":"string"},{"required":false,"type":"objectid","name":"sessions","data_relation":{"field":"id","resource":"sessions","embeddable":true}},{"required":false,"type":"objectid","name":"groupmemberships","data_relation":{"field":"id","resource":"groupusermembers","embeddable":true}},{"unique":false,"name":"lastname","maxlength":50,"required":true,"type":"string"},{"name":"rfid","nullable":true,"required":false,"maxlength":6,"unique":true,"type":"string"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"regex":"^.+@.+$","name":"email","required":true,"maxlength":100,"unique":true,"type":"string"},{"name":"phone","nullable":true,"required":false,"maxlength":20,"unique":false,"type":"string"},{"name":"membership","default":"none","required":true,"maxlength":13,"unique":false,"type":"string"},{"required":false,"type":"objectid","name":"eventsignups","data_relation":{"field":"id","resource":"eventsignups","embeddable":true}},{"name":"nethz","nullable":true,"required":false,"maxlength":30,"unique":true,"type":"string","empty":false},{"name":"gender","required":true,"allowed":["male","female"],"unique":false,"type":"string","maxlength":6},{"name":"department","nullable":true,"required":false,"allowed":["itet","mavt"],"unique":false,"type":"string","maxlength":5},{"name":"password","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"unique":true,"name":"id","required":false,"type":"integer"},{"name":"send_newsletter","nullable":true,"default":true,"required":false,"unique":false,"type":"boolean"}],"label":"Update a User"},"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a User"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a User"}},"/users/{nethz}":{"GET":{"params":[{"name":"nethz","nullable":true,"required":false,"maxlength":30,"unique":true,"type":"string","empty":false}],"label":"Retrieve a User"}},"/users":{"POST":{"params":[{"name":"legi","nullable":true,"required":false,"maxlength":8,"unique":true,"type":"string"},{"unique":false,"name":"firstname","maxlength":50,"required":true,"type":"string"},{"required":false,"type":"objectid","name":"sessions","data_relation":{"field":"id","resource":"sessions","embeddable":true}},{"required":false,"type":"objectid","name":"groupmemberships","data_relation":{"field":"id","resource":"groupusermembers","embeddable":true}},{"unique":false,"name":"lastname","maxlength":50,"required":true,"type":"string"},{"name":"rfid","nullable":true,"required":false,"maxlength":6,"unique":true,"type":"string"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"regex":"^.+@.+$","name":"email","required":true,"maxlength":100,"unique":true,"type":"string"},{"name":"phone","nullable":true,"required":false,"maxlength":20,"unique":false,"type":"string"},{"name":"membership","default":"none","required":true,"maxlength":13,"unique":false,"type":"string"},{"required":false,"type":"objectid","name":"eventsignups","data_relation":{"field":"id","resource":"eventsignups","embeddable":true}},{"name":"nethz","nullable":true,"required":false,"maxlength":30,"unique":true,"type":"string","empty":false},{"name":"gender","required":true,"allowed":["male","female"],"unique":false,"type":"string","maxlength":6},{"name":"department","nullable":true,"required":false,"allowed":["itet","mavt"],"unique":false,"type":"string","maxlength":5},{"name":"password","nullable":true,"required":false,"maxlength":100,"unique":false,"type":"string"},{"unique":true,"name":"id","required":false,"type":"integer"},{"name":"send_newsletter","nullable":true,"default":true,"required":false,"unique":false,"type":"boolean"}],"label":"Create a User"},"GET":{"params":[],"label":"Retrieve all users"}}},"description":{"methods":{"GET":"Authorization is required for most of the fields"},"general":"In general, the user data will be generated from LDAP-Data. However, one might change the RFID-Number or the membership-status. Extraordinary members may not have a LDAP-Account and can therefore access all given fields."}},"":{"paths":{"/":{"GET":{}}},"description":{}},"purchases":{"paths":{"/purchases":{"POST":{"params":[{"unique":false,"name":"slot","nullable":true,"required":false,"type":"integer"},{"name":"user_id","nullable":true,"required":false,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"unique":false,"name":"timestamp","nullable":true,"required":false,"type":"datetime"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"name":"type","nullable":true,"required":false,"maxlength":5,"unique":false,"type":"string"},{"unique":true,"name":"id","required":false,"type":"integer"}],"label":"Create a Purchase"},"GET":{"params":[],"label":"Retrieve all purchases"}},"/purchases/{_id}":{"PUT":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Replace a Purchase"},"PATCH":{"params":[{"required":true,"type":"string","name":"_id"},{"unique":false,"name":"slot","nullable":true,"required":false,"type":"integer"},{"name":"user_id","nullable":true,"required":false,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"unique":false,"name":"timestamp","nullable":true,"required":false,"type":"datetime"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"name":"type","nullable":true,"required":false,"maxlength":5,"unique":false,"type":"string"},{"unique":true,"name":"id","required":false,"type":"integer"}],"label":"Update a Purchase"},"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a Purchase"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a Purchase"}}},"description":{"fields":{"slot":"Slot in the machine which was purchased(different items, which may have different prices)."},"general":"A beer machine or kaffi machine transaction. Users should be able to get beer or kaffi, if their last timestamp is older than one day and they are AMIV members. This resource is used to log their purchases."}},"docs":{"paths":{"/docs/":{"GET":{}},"/docs/spec.json":{"GET":{}}},"description":{}},"groupusermembers":{"paths":{"/groupusermembers/{_id}":{"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a Groupusermember"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a Groupusermember"}},"/groupusermembers":{"POST":{"params":[{"name":"group_id","self_enrollment_must_be_allowed":true,"required":true,"unique_combination":["groupusermembers","user_id"],"data_relation":{"field":"id","resource":"groups","embeddable":false},"unique":false,"type":"objectid"},{"name":"user_id","unique_combination":["groupusermembers","group_id"],"required":true,"only_self_enrollment_for_group":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"unique":true,"name":"id","required":false,"type":"integer"}],"label":"Create a Groupusermember"},"GET":{"params":[],"label":"Retrieve all groupusermembers"}}},"description":{"general":"Assignment of registered users to groups."}},"eventsignups":{"paths":{"/eventsignups/{_id}":{"PUT":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Replace a Eventsignup"},"PATCH":{"params":[{"required":true,"type":"string","name":"_id"},{"unique":false,"name":"additional_fields","nullable":true,"required":false,"type":"json_event_field"},{"name":"user_id","unique_combination":["eventsignups","event_id"],"required":true,"not_patchable":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"only_self_enrollment_for_event":true,"unique":false,"type":"objectid"},{"signup_requirements":true,"name":"event_id","unique_combination":["eventsignups","user_id","email"],"required":true,"not_patchable":true,"data_relation":{"field":"id","resource":"events","embeddable":false},"unique":false,"type":"objectid"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"regex":"^.+@.+$","name":"email","email_signup_must_be_allowed":true,"nullable":true,"required":false,"unique_combination":["eventsignups","event_id"],"not_patchable":true,"maxlength":100,"unique":false,"type":"objectid","only_anonymous":true},{"name":"_confirmed","nullable":true,"default":false,"required":false,"unique":false,"type":"boolean"},{"unique":true,"name":"id","required":false,"type":"integer"}],"label":"Update a Eventsignup"},"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a Eventsignup"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a Eventsignup"}},"/eventsignups":{"GET":{"params":[],"label":"Retrieve all eventsignups"}}},"description":{"fields":{"additional_fields":"Data-schema depends on 'additional_fields' from the mapped event. Please provide in json-format.","user_id":"To sign up as external user, set 'user_id' to '-1'","email":"For registered users, this is just a projection of your general email-address. External users need to provide their email here."},"general":"You can signup here for an existing event inside of the registration-window. External Users can only sign up to public events."}},"static":{"paths":{"/static/bootstrap/{filename}":{"GET":{}},"/static/{filename}":{"GET":{}}},"description":{}},"groups":{"paths":{"/groups":{"POST":{"params":[{"required":false,"type":"objectid","name":"user_subscribers","data_relation":{"field":"id","resource":"groupusermembers","embeddable":true}},{"required":false,"type":"objectid","name":"addresses","data_relation":{"field":"id","resource":"forwardaddresses","embeddable":true}},{"unique":true,"name":"name","maxlength":100,"required":true,"type":"string"},{"unique":false,"name":"has_zoidberg_share","default":false,"required":true,"type":"boolean"},{"unique":false,"name":"allow_self_enrollment","default":false,"required":true,"type":"boolean"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"unique":false,"name":"moderator_id","data_relation":{"field":"id","resource":"users","embeddable":false},"required":true,"type":"objectid"},{"required":false,"type":"objectid","name":"owner","data_relation":{"field":"id","resource":"users","embeddable":true}},{"unique":true,"name":"id","required":false,"type":"integer"},{"unique":false,"name":"permissions","nullable":true,"required":false,"type":"permissions_jsonschema"}],"label":"Create a Group"},"GET":{"params":[],"label":"Retrieve all groups"}},"/groups/{_id}":{"PUT":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Replace a Group"},"PATCH":{"params":[{"required":true,"type":"string","name":"_id"},{"required":false,"type":"objectid","name":"user_subscribers","data_relation":{"field":"id","resource":"groupusermembers","embeddable":true}},{"required":false,"type":"objectid","name":"addresses","data_relation":{"field":"id","resource":"forwardaddresses","embeddable":true}},{"unique":true,"name":"name","maxlength":100,"required":true,"type":"string"},{"unique":false,"name":"has_zoidberg_share","default":false,"required":true,"type":"boolean"},{"unique":false,"name":"allow_self_enrollment","default":false,"required":true,"type":"boolean"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"unique":false,"name":"moderator_id","data_relation":{"field":"id","resource":"users","embeddable":false},"required":true,"type":"objectid"},{"required":false,"type":"objectid","name":"owner","data_relation":{"field":"id","resource":"users","embeddable":true}},{"unique":true,"name":"id","required":false,"type":"integer"},{"unique":false,"name":"permissions","nullable":true,"required":false,"type":"permissions_jsonschema"}],"label":"Update a Group"},"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a Group"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a Group"}}},"description":{"fields":{"has_zoidberg_share":"Wether the group has a share in the amiv storage","allow_self_enrollment":"If true, the group can be seen by all users and they can subscribe themselves","permissions":"permissions the group grants. has to be according to the jsonschema available at /notyetavailable"},"general":"This resource describes the different teams in AMIV.A group can grant API permissions and can be reached with several addresses. To see the subscriptions, have a look at '/groupusermembers'. To see the mail addresses, see '/forwardaddresses'."}},"forwardaddresses":{"paths":{"/forwardaddresses/{_id}":{"PUT":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Replace a Forwardaddresse"},"PATCH":{"params":[{"required":true,"type":"string","name":"_id"},{"name":"group_id","required":true,"data_relation":{"field":"id","resource":"groups","embeddable":false},"only_groups_you_moderate":true,"unique":false,"type":"objectid"},{"required":false,"type":"objectid","name":"group","data_relation":{"field":"id","resource":"groups","embeddable":true}},{"unique":true,"name":"id","required":false,"type":"integer"},{"unique":true,"name":"address","maxlength":100,"required":true,"type":"string"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"}],"label":"Update a Forwardaddresse"},"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a Forwardaddresse"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a Forwardaddresse"}},"/forwardaddresses":{"POST":{"params":[{"name":"group_id","required":true,"data_relation":{"field":"id","resource":"groups","embeddable":false},"only_groups_you_moderate":true,"unique":false,"type":"objectid"},{"required":false,"type":"objectid","name":"group","data_relation":{"field":"id","resource":"groups","embeddable":true}},{"unique":true,"name":"id","required":false,"type":"integer"},{"unique":true,"name":"address","maxlength":100,"required":true,"type":"string"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"}],"label":"Create a Forwardaddresse"},"GET":{"params":[],"label":"Retrieve all forwardaddresses"}}},"description":{"fields":{"address":"E-Mail address to forward"},"general":"An email address associated with a group. By adding an address here, all mails sent to that address will be forwarded to all members of the associated group."}},"media":{"paths":{"/media/{_id}":{"GET":{}}},"description":{}},"sessions":{"paths":{"/sessions/{_id}":{"PUT":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Replace a Session"},"PATCH":{"params":[{"required":true,"type":"string","name":"_id"},{"unique":false,"name":"token","nullable":true,"required":false,"type":"string"},{"unique":false,"name":"user_id","data_relation":{"field":"id","resource":"users","embeddable":false},"required":true,"type":"objectid"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"unique":true,"name":"id","required":false,"type":"integer"}],"label":"Update a Session"},"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a Session"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a Session"}},"/sessions":{"GET":{"params":[],"label":"Retrieve all sessions"}}},"description":{"methods":{"POST":"Login and aquire a login token. Post the fields 'user' and 'password', the response will contain the token."},"general":"A session is used to authenticate a user after he provided login data. To acquire a session use POST, which will give you a token to use as the user field of HTTP basic auth header with an empty password. POST requires user and password fields."}},"storage":{"paths":{"/storage/{filename}":{"GET":{}}},"description":{}},"joboffers":{"paths":{"/joboffers":{"POST":{"params":[{"unique":false,"name":"title_de","nullable":true,"required":false,"type":"string"},{"name":"company","nullable":true,"required":false,"maxlength":30,"unique":false,"type":"string"},{"unique":false,"name":"title_en","nullable":true,"required":false,"type":"string"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"unique":false,"name":"description_en","nullable":true,"required":false,"type":"string"},{"unique":false,"name":"time_end","nullable":true,"required":false,"type":"datetime"},{"filetype":["png","jpeg"],"required":false,"type":"media","name":"logo"},{"filetype":["pdf"],"required":false,"type":"media","name":"pdf"},{"unique":false,"name":"description_de","nullable":true,"required":false,"type":"string"},{"unique":true,"name":"id","required":false,"type":"integer"}],"label":"Create a Joboffer"},"GET":{"params":[],"label":"Retrieve all joboffers"}},"/joboffers/{_id}":{"PUT":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Replace a Joboffer"},"PATCH":{"params":[{"required":true,"type":"string","name":"_id"},{"unique":false,"name":"title_de","nullable":true,"required":false,"type":"string"},{"name":"company","nullable":true,"required":false,"maxlength":30,"unique":false,"type":"string"},{"unique":false,"name":"title_en","nullable":true,"required":false,"type":"string"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"unique":false,"name":"description_en","nullable":true,"required":false,"type":"string"},{"unique":false,"name":"time_end","nullable":true,"required":false,"type":"datetime"},{"filetype":["png","jpeg"],"required":false,"type":"media","name":"logo"},{"filetype":["pdf"],"required":false,"type":"media","name":"pdf"},{"unique":false,"name":"description_de","nullable":true,"required":false,"type":"string"},{"unique":true,"name":"id","required":false,"type":"integer"}],"label":"Update a Joboffer"},"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a Joboffer"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a Joboffer"}}},"description":{}},"confirmations":{"paths":{"/confirmations":{"POST":{}}},"description":{}},"events":{"paths":{"/events":{"POST":{"params":[{"unique":false,"name":"title_de","nullable":true,"required":false,"type":"string"},{"unique":false,"name":"allow_email_signup","default":false,"required":true,"type":"boolean"},{"readonly":true,"unique":false,"name":"signup_count","required":false,"type":"string"},{"filetype":["png","jpeg"],"required":false,"type":"media","name":"img_thumbnail"},{"name":"time_end","nullable":true,"later_than":"time_start","required":false,"dependencies":["time_start"],"unique":false,"type":"datetime"},{"required":false,"type":"objectid","name":"signups","data_relation":{"field":"id","resource":"eventsignups","embeddable":true}},{"unique":false,"name":"time_register_start","nullable":true,"required":false,"type":"datetime"},{"unique":false,"name":"catchphrase_en","nullable":true,"required":false,"type":"string"},{"unique":false,"name":"description_de","nullable":true,"required":false,"type":"string"},{"name":"time_register_end","nullable":true,"later_than":"time_register_start","required":false,"dependencies":["time_register_start"],"unique":false,"type":"datetime"},{"filetype":["png","jpeg"],"required":false,"type":"media","name":"img_banner"},{"unique":false,"name":"time_start","nullable":true,"required":false,"type":"datetime"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"name":"spots","min":-1,"if_this_then":["time_register_start","time_register_end"],"required":true,"unique":false,"type":"integer"},{"unique":true,"name":"id","required":false,"type":"integer"},{"name":"location","nullable":true,"required":false,"maxlength":50,"unique":false,"type":"string"},{"name":"show_infoscreen","nullable":true,"default":false,"required":false,"unique":false,"type":"boolean"},{"unique":false,"name":"additional_fields","nullable":true,"required":false,"type":"json_schema"},{"filetype":["png","jpeg"],"required":false,"type":"media","name":"img_infoscreen"},{"name":"price","nullable":true,"required":false,"min":0,"unique":false,"type":"integer"},{"unique":false,"name":"title_en","nullable":true,"required":false,"type":"string"},{"unique":false,"name":"description_en","nullable":true,"required":false,"type":"string"},{"filetype":["png","jpeg"],"required":false,"type":"media","name":"img_poster"},{"name":"show_announce","nullable":true,"default":false,"required":false,"unique":false,"type":"boolean"},{"name":"show_website","nullable":true,"default":false,"required":false,"unique":false,"type":"boolean"},{"unique":false,"name":"catchphrase_de","nullable":true,"required":false,"type":"string"}],"label":"Create a Event"},"GET":{"params":[],"label":"Retrieve all events"}},"/events/{_id}":{"PUT":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Replace a Event"},"PATCH":{"params":[{"required":true,"type":"string","name":"_id"},{"unique":false,"name":"title_de","nullable":true,"required":false,"type":"string"},{"unique":false,"name":"allow_email_signup","default":false,"required":true,"type":"boolean"},{"readonly":true,"unique":false,"name":"signup_count","required":false,"type":"string"},{"filetype":["png","jpeg"],"required":false,"type":"media","name":"img_thumbnail"},{"name":"time_end","nullable":true,"later_than":"time_start","required":false,"dependencies":["time_start"],"unique":false,"type":"datetime"},{"required":false,"type":"objectid","name":"signups","data_relation":{"field":"id","resource":"eventsignups","embeddable":true}},{"unique":false,"name":"time_register_start","nullable":true,"required":false,"type":"datetime"},{"unique":false,"name":"catchphrase_en","nullable":true,"required":false,"type":"string"},{"unique":false,"name":"description_de","nullable":true,"required":false,"type":"string"},{"name":"time_register_end","nullable":true,"later_than":"time_register_start","required":false,"dependencies":["time_register_start"],"unique":false,"type":"datetime"},{"filetype":["png","jpeg"],"required":false,"type":"media","name":"img_banner"},{"unique":false,"name":"time_start","nullable":true,"required":false,"type":"datetime"},{"name":"_author","nullable":true,"required":false,"readonly":true,"data_relation":{"field":"id","resource":"users","embeddable":false},"unique":false,"type":"objectid"},{"name":"spots","min":-1,"if_this_then":["time_register_start","time_register_end"],"required":true,"unique":false,"type":"integer"},{"unique":true,"name":"id","required":false,"type":"integer"},{"name":"location","nullable":true,"required":false,"maxlength":50,"unique":false,"type":"string"},{"name":"show_infoscreen","nullable":true,"default":false,"required":false,"unique":false,"type":"boolean"},{"unique":false,"name":"additional_fields","nullable":true,"required":false,"type":"json_schema"},{"filetype":["png","jpeg"],"required":false,"type":"media","name":"img_infoscreen"},{"name":"price","nullable":true,"required":false,"min":0,"unique":false,"type":"integer"},{"unique":false,"name":"title_en","nullable":true,"required":false,"type":"string"},{"unique":false,"name":"description_en","nullable":true,"required":false,"type":"string"},{"filetype":["png","jpeg"],"required":false,"type":"media","name":"img_poster"},{"name":"show_announce","nullable":true,"default":false,"required":false,"unique":false,"type":"boolean"},{"name":"show_website","nullable":true,"default":false,"required":false,"unique":false,"type":"boolean"},{"unique":false,"name":"catchphrase_de","nullable":true,"required":false,"type":"string"}],"label":"Update a Event"},"DELETE":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Delete a Event"},"GET":{"params":[{"required":true,"type":"string","name":"_id"}],"label":"Retrieve a Event"}}},"description":{"fields":{"additional_fields":"must be provided in form of a JSON-Schema. You can add here fields you want to know from people signing up going further than their email-address","price":"Price of the event as Integer in Rappen.","allow_email_signup":"If False, only AMIV-Members can sign up for this event","spots":"For no limit, set to '0'. If no signup required, set to '-1'. Otherwise just provide an integer."},"methods":{"GET":"You are always allowed, even without session, to view AMIV-Events"},"general":"An Event is basically everything happening in the AMIV. All time fields have the format YYYY-MM-DDThh:mmZ, e.g. 2014-12-20T11:50:06Z"}}},"api_name":"API","base":"http:///","server_name":null} diff --git a/admin/lib/cust/main.css b/admin/lib/cust/main.css index 46eed464137f7895d0e7768bcb736f91e4d41462..1de6c3428b1f1670afec431a18ab3e208623f019 100644 --- a/admin/lib/cust/main.css +++ b/admin/lib/cust/main.css @@ -139,7 +139,7 @@ body { MAIN NAVBAR */ -.navbar-main .cust-menu>li { +.navbar-main .container-fluid>ul>li { float: left; } diff --git a/admin/lib/cust/main.js b/admin/lib/cust/main.js index ab4af9ad890d40e936f93794d54dc6d358a76efa..27febd792e77777f47b393aa43e894ab4b652ab7 100644 --- a/admin/lib/cust/main.js +++ b/admin/lib/cust/main.js @@ -22,18 +22,27 @@ var tools = { }, // Modal function - modalStatus: 0, + modalFunc: { + init: 0, + }, modal: function(attr) { attr = attr || {}; + if (attr.success !== undefined && typeof(attr.success) == 'function') + tools.modalFunc.success = attr.success; + if (attr.cancel !== undefined && typeof(attr.cancel) == 'function') + tools.modalFunc.cancel = attr.cancel; + if (!tools.modalFunc.init) { + $('.modalCont .modal-footer .btn-primary').click(function() { + $('.modalCont').off('hide.bs.modal').modal('hide'); + tools.modalFunc.success(); + }); + $('.modalCont').on('hide.bs.modal', tools.modalFunc.cancel); + tools.modalFunc.init = 1; + } $('.modalCont .modal-title').html(attr.head); $('.modalCont .modal-body').html(attr.body); - $('.modalCont .modal-footer .btn-primary').html(attr.button).click(function() { - $('.modalCont').off('hide.bs.modal').modal('hide'); - if (typeof(attr.success) == 'function') - attr.success(); - }); - if (typeof(attr.cancel) == 'function') - $('.modalCont').modal('show').on('hide.bs.modal', attr.cancel); + $('.modalCont .modal-footer .btn-primary').html(attr.button); + $('.modalCont').modal('show'); }, // Ajax loading gunction and getting the tools