diff --git a/lib/amiv/amivcore.js b/lib/amiv/amivcore.js index 5956dc5cc55e5c95aad27eeca8ac1caf9740a773..cb2e1c6cbb1e3c6d5248ecf1fa63c25c2fa58eaf 100644 --- a/lib/amiv/amivcore.js +++ b/lib/amiv/amivcore.js @@ -11,7 +11,7 @@ var core = { // Important vars n' stuff lib: { - //api_url: 'https://amiv-apidev.vsos.ethz.ch', + // api_url: 'https://amiv-apidev.vsos.ethz.ch', api_url: 'http://192.168.1.100', spec_url: 'lib/amiv/spec.json', //spec_url: 'https://nicco.io/amiv/docs/spec.json', @@ -62,7 +62,7 @@ }, 'datetime': function(dt) { var tmp = new Date(dt); - return new Date(dt).toJSON(); + return new Date(dt).toISOString().split('.')[0]+"Z"; } } } diff --git a/lib/amiv/spec.json b/lib/amiv/spec.json index 6dd3ffaf8f993ea8026d011db6153132f79eade1..1191dc5d833a0f85be463a5fe6344d8cba281d9c 100644 --- a/lib/amiv/spec.json +++ b/lib/amiv/spec.json @@ -1 +1,1797 @@ -{"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} + { + "api_name": "API", + "domains": { + "events": { + "paths": { + "/events/{_id}": { + "DELETE": { + "label": "Delete a Event", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "GET": { + "label": "Retrieve a Event", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "PATCH": { + "label": "Update a Event", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + }, + { + "nullable": true, + "maxlength": 500, + "type": "string", + "required": false, + "name": "catchphrase_de" + }, + { + "nullable": true, + "maxlength": 500, + "type": "string", + "required": false, + "name": "catchphrase_en" + }, + { + "nullable": true, + "maxlength": 50, + "type": "string", + "required": false, + "name": "location" + }, + { + "nullable": true, + "required": false, + "later_than": "time_start", + "dependencies": [ + "time_start" + ], + "name": "time_end", + "type": "datetime" + }, + { + "readonly": true, + "type": "integer", + "required": false, + "name": "signup_count" + }, + { + "nullable": false, + "type": "boolean", + "required": true, + "name": "show_announce" + }, + { + "nullable": false, + "type": "boolean", + "required": true, + "name": "show_infoscreen" + }, + { + "nullable": true, + "type": "integer", + "required": true, + "min": 0, + "requires_if_not_null": [ + "time_register_start", + "time_register_end", + "allow_email_signup" + ], + "name": "spots" + }, + { + "nullable": true, + "maxlength": 100, + "required": false, + "dependencies": [ + "catchphrase_de", + "description_de" + ], + "name": "title_de", + "type": "string" + }, + { + "nullable": true, + "maxlength": 100, + "required": false, + "dependencies": [ + "catchphrase_en", + "description_en" + ], + "name": "title_en", + "type": "string" + }, + { + "type": "media", + "required": false, + "filetype": [ + "png", + "jpeg" + ], + "name": "img_poster" + }, + { + "nullable": true, + "min": 0, + "type": "integer", + "required": false, + "name": "price" + }, + { + "nullable": true, + "maxlength": 10000, + "type": "string", + "required": false, + "name": "description_de" + }, + { + "type": "media", + "required": false, + "filetype": [ + "png", + "jpeg" + ], + "name": "img_banner" + }, + { + "type": "media", + "required": false, + "filetype": [ + "png", + "jpeg" + ], + "name": "img_thumbnail" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "nullable": false, + "depends_any": [ + "title_de", + "title_en" + ], + "required": true, + "name": "show_website", + "type": "boolean" + }, + { + "nullable": true, + "only_if_not_null": "spots", + "type": "json_schema", + "required": false, + "name": "additional_fields" + }, + { + "nullable": true, + "type": "datetime", + "required": false, + "name": "time_start" + }, + { + "nullable": true, + "type": "datetime", + "required": false, + "name": "time_register_start" + }, + + { + "nullable": true, + "type": "datetime", + "required": false, + "name": "time_advertising_start" + }, + { + "nullable": true, + "type": "datetime", + "required": false, + "name": "time_advertising_end" + }, + + + { + "nullable": true, + "maxlength": 10000, + "type": "string", + "required": false, + "name": "description_en" + }, + { + "nullable": false, + "type": "boolean", + "required": false, + "name": "allow_email_signup" + }, + { + "nullable": true, + "required": false, + "later_than": "time_register_start", + "dependencies": [ + "time_register_start" + ], + "name": "time_register_end", + "type": "datetime" + }, + { + "type": "media", + "required": false, + "filetype": [ + "png", + "jpeg" + ], + "name": "img_infoscreen" + } + ] + } + }, + "/events": { + "GET": { + "label": "Retrieve all events", + "params": [] + }, + "POST": { + "label": "Create a Event", + "params": [ + { + "nullable": true, + "maxlength": 500, + "type": "string", + "required": false, + "name": "catchphrase_de" + }, + { + "nullable": true, + "maxlength": 500, + "type": "string", + "required": false, + "name": "catchphrase_en" + }, + { + "nullable": true, + "maxlength": 50, + "type": "string", + "required": false, + "name": "location" + }, + { + "nullable": true, + "required": false, + "later_than": "time_start", + "dependencies": [ + "time_start" + ], + "name": "time_end", + "type": "datetime" + }, + { + "readonly": true, + "type": "integer", + "required": false, + "name": "signup_count" + }, + { + "nullable": false, + "type": "boolean", + "required": true, + "name": "show_announce" + }, + { + "nullable": false, + "type": "boolean", + "required": true, + "name": "show_infoscreen" + }, + { + "nullable": true, + "type": "integer", + "required": true, + "min": 0, + "requires_if_not_null": [ + "time_register_start", + "time_register_end", + "allow_email_signup" + ], + "name": "spots" + }, + + { + "nullable": true, + "type": "integer", + "required": false, + "min": 0, + "max": 10, + "name": "priority" + }, + + { + "nullable": true, + "maxlength": 100, + "required": false, + "dependencies": [ + "catchphrase_de", + "description_de" + ], + "name": "title_de", + "type": "string" + }, + { + "nullable": true, + "maxlength": 100, + "required": false, + "dependencies": [ + "catchphrase_en", + "description_en" + ], + "name": "title_en", + "type": "string" + }, + { + "type": "media", + "required": false, + "filetype": [ + "png", + "jpeg" + ], + "name": "img_poster" + }, + { + "nullable": true, + "min": 0, + "type": "integer", + "required": false, + "name": "price" + }, + { + "nullable": true, + "maxlength": 10000, + "type": "string", + "required": false, + "name": "description_de" + }, + { + "type": "media", + "required": false, + "filetype": [ + "png", + "jpeg" + ], + "name": "img_banner" + }, + { + "type": "media", + "required": false, + "filetype": [ + "png", + "jpeg" + ], + "name": "img_thumbnail" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "nullable": false, + "depends_any": [ + "title_de", + "title_en" + ], + "required": true, + "name": "show_website", + "type": "boolean" + }, + { + "nullable": true, + "only_if_not_null": "spots", + "type": "json_schema", + "required": false, + "name": "additional_fields" + }, + { + "nullable": true, + "type": "datetime", + "required": false, + "name": "time_start" + }, + { + "nullable": true, + "type": "datetime", + "required": false, + "name": "time_register_start" + }, + + + { + "nullable": true, + "type": "datetime", + "required": false, + "name": "time_advertising_start" + }, + { + "nullable": true, + "type": "datetime", + "required": false, + "name": "time_advertising_end" + }, + + + { + "nullable": true, + "maxlength": 10000, + "type": "string", + "required": false, + "name": "description_en" + }, + { + "nullable": false, + "type": "boolean", + "required": false, + "name": "allow_email_signup" + }, + { + "nullable": true, + "required": false, + "later_than": "time_register_start", + "dependencies": [ + "time_register_start" + ], + "name": "time_register_end", + "type": "datetime" + }, + { + "type": "media", + "required": false, + "filetype": [ + "png", + "jpeg" + ], + "name": "img_infoscreen" + } + ] + } + } + }, + "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", + "spots": "For no limit, set to '0'. If no signup required, set to '-1'. Otherwise just provide an integer.", + "allow_email_signup": "If False, only AMIV-Members can sign up for this event", + "price": "Price of the event as Integer in Rappen." + }, + "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" + } + }, + "groups": { + "paths": { + "/groups": { + "GET": { + "label": "Retrieve all groups", + "params": [] + }, + "POST": { + "label": "Create a Group", + "params": [ + { + "type": "list", + "required": false, + "unique_elements": true, + "schema": { + "regex": "^.+@.+$", + "maxlength": 100, + "type": "string" + }, + "name": "forward_to" + }, + { + "nullable": true, + "propertyschema": { + "api_resources": true, + "type": "string" + }, + "valueschema": { + "allowed": [ + "read", + "readwrite" + ], + "type": "string" + }, + "required": false, + "name": "permissions", + "type": "dict" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "nullable": true, + "type": "objectid", + "required": false, + "data_relation": { + "field": "_id", + "resource": "users" + }, + "name": "moderator" + }, + { + "unique_elements_for_resource": true, + "required": false, + "name": "receive_from", + "unique_elements": true, + "schema": { + "regex": "[a-z0-9_\\.-]+", + "maxlength": 100, + "type": "string" + }, + "type": "list" + }, + { + "type": "boolean", + "required": false, + "default": false, + "name": "allow_self_enrollment" + }, + { + "type": "boolean", + "required": false, + "default": false, + "name": "has_zoidberg_share" + }, + { + "maxlength": 100, + "unique": true, + "type": "string", + "required": true, + "empty": false, + "name": "name" + } + ] + } + }, + "/groups/{_id}": { + "DELETE": { + "label": "Delete a Group", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "GET": { + "label": "Retrieve a Group", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "PATCH": { + "label": "Update a Group", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + }, + { + "type": "list", + "required": false, + "unique_elements": true, + "schema": { + "regex": "^.+@.+$", + "maxlength": 100, + "type": "string" + }, + "name": "forward_to" + }, + { + "nullable": true, + "propertyschema": { + "api_resources": true, + "type": "string" + }, + "valueschema": { + "allowed": [ + "read", + "readwrite" + ], + "type": "string" + }, + "required": false, + "name": "permissions", + "type": "dict" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "nullable": true, + "type": "objectid", + "required": false, + "data_relation": { + "field": "_id", + "resource": "users" + }, + "name": "moderator" + }, + { + "unique_elements_for_resource": true, + "required": false, + "name": "receive_from", + "unique_elements": true, + "schema": { + "regex": "[a-z0-9_\\.-]+", + "maxlength": 100, + "type": "string" + }, + "type": "list" + }, + { + "type": "boolean", + "required": false, + "default": false, + "name": "allow_self_enrollment" + }, + { + "type": "boolean", + "required": false, + "default": false, + "name": "has_zoidberg_share" + }, + { + "maxlength": 100, + "unique": true, + "type": "string", + "required": true, + "empty": false, + "name": "name" + } + ] + } + } + }, + "description": { + "fields": { + "permissions": "permissions the group grants. has to be according to the jsonschema available at /notyetavailable", + "allow_self_enrollment": "If true, the group can be seen by all users and they can subscribe themselves", + "has_zoidberg_share": "If the group has a share in the amiv storage" + }, + "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 addresses of this group, see /groupaddressesTo see the members, have a look at '/groupmembers'. To see the addresses messages are forwarded to, see /groupforwards" + } + }, + "sessions": { + "paths": { + "/sessions": { + "DELETE": { + "label": "Delete all sessions", + "params": [] + }, + "GET": { + "label": "Retrieve all sessions", + "params": [] + }, + "POST": { + "label": "Create a Session", + "params": [ + { + "nullable": false, + "empty": false, + "required": true, + "name": "username", + "type": "string" + }, + { + "readonly": true, + "type": "objectid", + "required": false, + "data_relation": { + "cascade_delete": true, + "field": "_id", + "embeddable": true, + "resource": "users" + }, + "name": "user" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "readonly": true, + "type": "string", + "required": false, + "name": "token" + }, + { + "nullable": false, + "empty": false, + "required": true, + "name": "password", + "type": "string" + } + ] + } + }, + "/sessions/{_id}": { + "DELETE": { + "label": "Delete a Session", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "GET": { + "label": "Retrieve a Session", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + } + } + }, + "description": { + "methods": { + "GET": "Check token(s).", + "POST": "Login and aquire a login token. Post the fields 'username' and 'password', the response will contain the token. username can be either nethz, mail, or user_id" + }, + "general": "A session is used to authenticate a user after he provided login data. A POST to /session will return a token you can use in an Authorization header: token <yourtoken>" + } + }, + "joboffers": { + "paths": { + "/joboffers/{_id}": { + "DELETE": { + "label": "Delete a Joboffer", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "GET": { + "label": "Retrieve a Joboffer", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "PATCH": { + "label": "Update a Joboffer", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + }, + { + "nullable": true, + "type": "string", + "required": false, + "name": "description_en" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "type": "media", + "required": false, + "filetype": [ + "pdf" + ], + "name": "pdf" + }, + { + "nullable": true, + "maxlength": 30, + "type": "string", + "depends_any": [ + "title_de", + "title_en" + ], + "required": true, + "name": "company" + }, + { + "nullable": true, + "type": "string", + "required": false, + "name": "title_de" + }, + { + "nullable": true, + "type": "string", + "required": false, + "name": "title_en" + }, + { + "nullable": true, + "type": "datetime", + "required": false, + "name": "time_end" + }, + { + "type": "media", + "required": false, + "filetype": [ + "png", + "jpeg" + ], + "name": "logo" + }, + { + "nullable": true, + "unique": false, + "type": "string", + "required": false, + "name": "description_de" + } + ] + } + }, + "/joboffers": { + "GET": { + "label": "Retrieve all joboffers", + "params": [] + }, + "POST": { + "label": "Create a Joboffer", + "params": [ + { + "nullable": true, + "type": "string", + "required": false, + "name": "description_en" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "type": "media", + "required": false, + "filetype": [ + "pdf" + ], + "name": "pdf" + }, + { + "nullable": true, + "maxlength": 30, + "type": "string", + "depends_any": [ + "title_de", + "title_en" + ], + "required": true, + "name": "company" + }, + { + "nullable": true, + "type": "string", + "required": false, + "name": "title_de" + }, + { + "nullable": true, + "type": "string", + "required": false, + "name": "title_en" + }, + { + "nullable": true, + "type": "datetime", + "required": false, + "name": "time_end" + }, + { + "type": "media", + "required": false, + "filetype": [ + "png", + "jpeg" + ], + "name": "logo" + }, + { + "nullable": true, + "unique": false, + "type": "string", + "required": false, + "name": "description_de" + } + ] + } + } + }, + "description": { + "fields": {}, + "general": "A Job Offer posts repositoryUsers can post a job offer with the necessarycontent to fill out a job offer advertisement" + } + }, + "studydocuments": { + "paths": { + "/studydocuments": { + "DELETE": { + "label": "Delete all studydocuments", + "params": [] + }, + "GET": { + "label": "Retrieve all studydocuments", + "params": [] + }, + "POST": { + "label": "Create a Studydocument", + "params": [ + { + "nullable": true, + "maxlength": 100, + "type": "string", + "required": false, + "name": "lecture" + }, + { + "nullable": true, + "type": "integer", + "required": false, + "name": "semester" + }, + { + "type": "list", + "required": true, + "schema": { + "type": "media" + }, + "name": "files" + }, + { + "nullable": true, + "maxlength": 4, + "type": "string", + "required": false, + "name": "department" + }, + { + "nullable": true, + "maxlength": 5, + "type": "string", + "required": false, + "name": "coursesemester" + }, + { + "nullable": true, + "maxlength": 100, + "type": "string", + "required": false, + "name": "professor" + }, + { + "nullable": true, + "maxlength": 100, + "type": "string", + "required": false, + "name": "author" + }, + { + "nullable": true, + "maxlength": 100, + "type": "string", + "required": false, + "name": "name" + }, + { + "nullable": true, + "readonly": true, + "data_relation": { + "field": "_id", + "resource": "users" + }, + "required": false, + "name": "uploader", + "type": "objectid" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "nullable": true, + "maxlength": 30, + "type": "string", + "required": false, + "name": "type" + } + ] + } + }, + "/studydocuments/{_id}": { + "DELETE": { + "label": "Delete a Studydocument", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "GET": { + "label": "Retrieve a Studydocument", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "PATCH": { + "label": "Update a Studydocument", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + }, + { + "nullable": true, + "maxlength": 100, + "type": "string", + "required": false, + "name": "lecture" + }, + { + "nullable": true, + "type": "integer", + "required": false, + "name": "semester" + }, + { + "type": "list", + "required": true, + "schema": { + "type": "media" + }, + "name": "files" + }, + { + "nullable": true, + "maxlength": 4, + "type": "string", + "required": false, + "name": "department" + }, + { + "nullable": true, + "maxlength": 5, + "type": "string", + "required": false, + "name": "coursesemester" + }, + { + "nullable": true, + "maxlength": 100, + "type": "string", + "required": false, + "name": "professor" + }, + { + "nullable": true, + "maxlength": 100, + "type": "string", + "required": false, + "name": "author" + }, + { + "nullable": true, + "maxlength": 100, + "type": "string", + "required": false, + "name": "name" + }, + { + "nullable": true, + "readonly": true, + "data_relation": { + "field": "_id", + "resource": "users" + }, + "required": false, + "name": "uploader", + "type": "objectid" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "nullable": true, + "maxlength": 30, + "type": "string", + "required": false, + "name": "type" + } + ] + } + } + }, + "description": { + "fields": { + "author": "Original author of the uploaded files(Prof, Assistant, copyright owner)", + "semester": "Study-Semester as an Integer starting with first semester Bachelor.", + "uploader": "Read-only field describing which AMIV member uploaded the files", + "coursesemester": "Course Semester as Enum(HS/FS)+Integer" + }, + "general": "Study-documents are basically all documents that are connected to a course. All metadata is optional and intended to help finding the file. There are no strict categories, as those do not work well for courses available to many departements and aiming at all levels of experience." + } + }, + "users": { + "paths": { + "/users/{nethz}": { + "GET": { + "label": "Retrieve a User", + "params": [ + { + "nullable": true, + "maxlength": 30, + "default": null, + "unique": true, + "type": "string", + "required": false, + "not_patchable_unless_admin": true, + "empty": false, + "name": "nethz" + } + ] + } + }, + "/users/{_id}": { + "DELETE": { + "label": "Delete a User", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "GET": { + "label": "Retrieve a User", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "PATCH": { + "label": "Update a User", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + }, + { + "nullable": true, + "maxlength": 30, + "default": null, + "unique": true, + "type": "string", + "required": false, + "not_patchable_unless_admin": true, + "empty": false, + "name": "nethz" + }, + { + "maxlength": 100, + "unique": true, + "type": "string", + "required": true, + "regex": "^.+@.+$", + "name": "email" + }, + { + "nullable": true, + "empty": false, + "maxlength": 20, + "required": false, + "name": "phone", + "type": "string" + }, + { + "not_patchable_unless_admin": true, + "allowed": [ + "male", + "female" + ], + "unique": false, + "type": "string", + "required": true, + "maxlength": 6, + "name": "gender" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "nullable": false, + "maxlength": 50, + "type": "string", + "required": true, + "not_patchable_unless_admin": true, + "empty": false, + "name": "firstname" + }, + { + "nullable": true, + "maxlength": 8, + "unique": true, + "type": "string", + "required": false, + "not_patchable_unless_admin": true, + "name": "legi" + }, + { + "nullable": true, + "not_patchable_unless_admin": true, + "required": false, + "allowed": [ + "itet", + "mavt" + ], + "name": "department", + "type": "string" + }, + { + "nullable": true, + "type": "boolean", + "required": false, + "name": "send_newsletter" + }, + { + "nullable": true, + "maxlength": 100, + "default": null, + "type": "string", + "required": false, + "empty": false, + "name": "password" + }, + { + "nullable": false, + "maxlength": 50, + "type": "string", + "required": true, + "not_patchable_unless_admin": true, + "empty": false, + "name": "lastname" + }, + { + "maxlength": 13, + "allowed": [ + "none", + "regular", + "extraordinary", + "honorary" + ], + "unique": false, + "type": "string", + "required": true, + "not_patchable_unless_admin": true, + "name": "membership" + }, + { + "nullable": true, + "maxlength": 6, + "unique": true, + "type": "string", + "required": false, + "empty": false, + "name": "rfid" + } + ] + } + }, + "/users": { + "GET": { + "label": "Retrieve all users", + "params": [] + }, + "POST": { + "label": "Create a User", + "params": [ + { + "nullable": true, + "maxlength": 30, + "default": null, + "unique": true, + "type": "string", + "required": false, + "not_patchable_unless_admin": true, + "empty": false, + "name": "nethz" + }, + { + "maxlength": 100, + "unique": true, + "type": "string", + "required": true, + "regex": "^.+@.+$", + "name": "email" + }, + { + "nullable": true, + "empty": false, + "maxlength": 20, + "required": false, + "name": "phone", + "type": "string" + }, + { + "not_patchable_unless_admin": true, + "allowed": [ + "male", + "female" + ], + "unique": false, + "type": "string", + "required": true, + "maxlength": 6, + "name": "gender" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "nullable": false, + "maxlength": 50, + "type": "string", + "required": true, + "not_patchable_unless_admin": true, + "empty": false, + "name": "firstname" + }, + { + "nullable": true, + "maxlength": 8, + "unique": true, + "type": "string", + "required": false, + "not_patchable_unless_admin": true, + "name": "legi" + }, + { + "nullable": true, + "not_patchable_unless_admin": true, + "required": false, + "allowed": [ + "itet", + "mavt" + ], + "name": "department", + "type": "string" + }, + { + "nullable": true, + "type": "boolean", + "required": false, + "name": "send_newsletter" + }, + { + "nullable": true, + "maxlength": 100, + "default": null, + "type": "string", + "required": false, + "empty": false, + "name": "password" + }, + { + "nullable": false, + "maxlength": 50, + "type": "string", + "required": true, + "not_patchable_unless_admin": true, + "empty": false, + "name": "lastname" + }, + { + "maxlength": 13, + "allowed": [ + "none", + "regular", + "extraordinary", + "honorary" + ], + "unique": false, + "type": "string", + "required": true, + "not_patchable_unless_admin": true, + "name": "membership" + }, + { + "nullable": true, + "maxlength": 6, + "unique": true, + "type": "string", + "required": false, + "empty": false, + "name": "rfid" + } + ] + } + } + }, + "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." + } + }, + "purchases": { + "paths": { + "/purchases": { + "GET": { + "label": "Retrieve all purchases", + "params": [] + }, + "POST": { + "label": "Create a Purchase", + "params": [ + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "nullable": false, + "unique": false, + "required": true, + "name": "timestamp", + "type": "datetime" + }, + { + "nullable": false, + "not_patchable_unless_admin": true, + "allowed": [ + "beer", + "coffee" + ], + "unique": false, + "type": "string", + "required": true, + "maxlength": 6, + "name": "product" + }, + { + "nullable": false, + "data_relation": { + "field": "_id", + "embeddable": true, + "resource": "users" + }, + "unique": false, + "type": "objectid", + "required": true, + "name": "user" + } + ] + } + }, + "/purchases/{_id}": { + "GET": { + "label": "Retrieve a Purchase", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + } + } + }, + "description": { + "fields": {}, + "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." + } + }, + "groupmemberships": { + "paths": { + "/groupmemberships": { + "GET": { + "label": "Retrieve all groupmemberships", + "params": [] + }, + "POST": { + "label": "Create a Groupmembership", + "params": [ + { + "self_enrollment_required": true, + "data_relation": { + "cascade_delete": true, + "field": "_id", + "embeddable": true, + "resource": "groups" + }, + "required": true, + "name": "group", + "type": "objectid" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "data_relation": { + "cascade_delete": true, + "field": "_id", + "embeddable": true, + "resource": "users" + }, + "type": "objectid", + "required": true, + "only_self_or_moderator": true, + "unique_combination": [ + "group" + ], + "name": "user" + } + ] + } + }, + "/groupmemberships/{_id}": { + "DELETE": { + "label": "Delete a Groupmembership", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "GET": { + "label": "Retrieve a Groupmembership", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + } + } + }, + "description": { + "general": "Assignment of registered users to groups." + } + }, + "eventsignups": { + "paths": { + "/eventsignups": { + "GET": { + "label": "Retrieve all eventsignups", + "params": [] + }, + "POST": { + "label": "Create a Eventsignup", + "params": [ + { + "nullable": true, + "type": "json_event_field", + "required": false, + "name": "additional_fields" + }, + { + "nullable": false, + "email_signup_must_be_allowed": true, + "maxlength": 100, + "type": "string", + "required": false, + "regex": "^.+@.+$", + "not_patchable": true, + "name": "email" + }, + { + "nullable": true, + "readonly": true, + "type": "boolean", + "required": false, + "name": "confirmed" + }, + { + "nullable": false, + "data_relation": { + "field": "_id", + "embeddable": true, + "resource": "users" + }, + "type": "objectid", + "only_self_enrollment_for_event": true, + "required": false, + "not_patchable": true, + "name": "user" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "data_relation": { + "field": "_id", + "embeddable": true, + "resource": "events" + }, + "signup_requirements": true, + "type": "objectid", + "required": true, + "not_patchable": true, + "unique_combination": [ + "user", + "email" + ], + "name": "event" + } + ] + } + }, + "/eventsignups/{_id}": { + "DELETE": { + "label": "Delete a Eventsignup", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "GET": { + "label": "Retrieve a Eventsignup", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + } + ] + }, + "PATCH": { + "label": "Update a Eventsignup", + "params": [ + { + "type": "string", + "required": true, + "name": "_id" + }, + { + "nullable": true, + "type": "json_event_field", + "required": false, + "name": "additional_fields" + }, + { + "nullable": false, + "email_signup_must_be_allowed": true, + "maxlength": 100, + "type": "string", + "required": false, + "regex": "^.+@.+$", + "not_patchable": true, + "name": "email" + }, + { + "nullable": true, + "readonly": true, + "type": "boolean", + "required": false, + "name": "confirmed" + }, + { + "nullable": false, + "data_relation": { + "field": "_id", + "embeddable": true, + "resource": "users" + }, + "type": "objectid", + "only_self_enrollment_for_event": true, + "required": false, + "not_patchable": true, + "name": "user" + }, + { + "type": "objectid", + "required": false, + "name": "_id" + }, + { + "data_relation": { + "field": "_id", + "embeddable": true, + "resource": "events" + }, + "signup_requirements": true, + "type": "objectid", + "required": true, + "not_patchable": true, + "unique_combination": [ + "user", + "email" + ], + "name": "event" + } + ] + } + } + }, + "description": { + "fields": { + "additional_fields": "Data-schema depends on 'additional_fields' from the mapped event. Please provide in json-format.", + "email": "For registered users, this is just a projection of your general email-address. External users need to provide their email here.", + "user": "Provide either user or email." + }, + "methods": { + "PATCH": "Only additional_fields can be changed" + }, + "general": "You can signup here for an existing event inside of the registration-window. External Users can only sign up to public events." + } + } + }, + "base": "http:///", + "server_name": null +} \ No newline at end of file diff --git a/tools/events.tool b/tools/events.tool index 440e5b1ed6436019ee5358bd40dcc5899b62a022..f1996320753e007502c2e05368c49826f3baafba 100644 --- a/tools/events.tool +++ b/tools/events.tool @@ -18,11 +18,11 @@ <!-- modal for creating new events, easier to do it this way than js--> -<div class="modal fade" id="event-modal" role="dialog"> +<div class="modal fade" id="event-modal" role="dialog" data-etag=""> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal">×</button> + <button type="button" class="close" >×</button> <h4 class="modal-title" id="event-modal-title"></h4> </div> <div class="modal-body"> @@ -62,6 +62,28 @@ </span> </div> </div> + + + <div class="form-group"> + <label for="time_start">Start Advertising</label> + <div class="input-group date" id="time_advertising_start"> + <input type="text" class="form-control" /> + <span class="input-group-addon"> + <span class="glyphicon-calendar glyphicon"></span> + </span> + </div> + </div> + <!-- </div> --> + <!-- <div class="col-md-3"> --> + <div class="form-group"> + <label for="time_end">End Advertising</label> + <div class="input-group date" id="time_advertising_end"> + <input type="text" class="form-control" /> + <span class="input-group-addon"> + <span class="glyphicon-calendar glyphicon"></span> + </span> + </div> + </div> <!-- </div> --> <!-- </div> --> @@ -133,6 +155,11 @@ </label> </div> + <div class="form-group"> + <label for="price">Priority [1-10]</label> + <input type="number" class="form-control" min="0" id="priority" value=5></input> + </div> + <div class="form-group"> <label for="description_de">Additional Fields (JSON schema)</label> <textarea type="text" class="form-control" rows="3" id="additional_fields"></textarea> @@ -193,6 +220,7 @@ <script type="text/javascript"> var events = { + somethingChanged: false, showInTable: ['title_de', 'time_start', 'show_website', 'spots', 'signup_count'], curEventData: null, @@ -280,7 +308,7 @@ events.showInTable.forEach(function(i) { tmp += '<td>' + ret['_items'][n][i] + '</td>'; }); - $('.events-table tbody').append('<tr data-id="' + ret['_items'][n]['id'] + '">' + tmp + '</tr>'); + $('.events-table tbody').append('<tr data-id="' + ret['_items'][n]['_id'] + '">' + tmp + '</tr>'); } $('.events-table tbody tr').click(events.showDetails); $('#wheel-logo').css('transform', 'rotate(0deg)'); @@ -297,12 +325,41 @@ //show details of an event in a modal //TODO: fill the more beautiful event-modal showDetails: function() { + somethingChanged = false; + console.log($(this).attr('data-id')); amivcore.events.GET({ id: $(this).attr('data-id') }, function(ret) { curEventData = ret; console.log(curEventData); - $("#event-modal-title").val("edit event"); + $("#event-modal-title").text("Edit Event"); + $('#event-modal-footer').html('<button type="button" class="btn btn-default" data-dismiss="modal">Close</button><button type="button" class="btn btn-primary" onclick="events.inspectEvent()">update</button><button type="button" class="btn btn-danger" onclick="events.deleteEvent(' + etag +')">Delete</button>'); + var etag = ret['_etag']; + + $('#event-modal').attr('data-etag', etag); + + //fill fields of the form with content that has the same ID + $('#event-modal-form').find('input, textarea').val(function (index, value) { + return ret[this.id]; + }); + + //array of elements that are represented by checkboxes + var booleanEventData = ['signup-required', 'no-signup-limit', 'allow_email_signup', 'show_website', 'show_infoscreen', 'show_announce']; + + for (i = 0; i < booleanEventData.length; i++){ + $("#" + booleanEventData[i]).prop('checked', ret[booleanEventData[i]]); + } + + //set the datepickers + $('#event-modal').modal('show'); + + var dateEventData = ['time_start', 'time_end', 'time_register_start', 'time_register_end', 'time_advertising_start', 'time_advertising_end']; + for (i = 0; i < dateEventData.length; i++){ + if (ret[dateEventData[i]] != null){ + $('#' + dateEventData[i]).data("DateTimePicker").date(new Date(ret[dateEventData[i]])); + } + } + // var tmp = '<table class="table table-hover events-edit-table" data-etag="' + ret['_etag'] + '"><tbody>'; // for (var cur in ret) { // if (cur.charAt(0) != '_' && cur != 'signups') @@ -352,6 +409,26 @@ }); }, + + deleteEvent: function(etag) { + console.log('delete triggered'); + if (confirm("Delete " + curEventData.title_de + "?") == true) { + amivcore.events.DELETE({ + id: curEventData.id, + header: { + // 'If-Match': $('#event-modal').attr('data-etag') + 'If-Match': etag + } + }, function(response) { + console.log(response); + }); + events.get(); + tools.log('Event deleted', 'w'); + tools.modalClose(); + } else { + tools.log('Event not Deleted', 'i'); + } + }, /*showDetails: function() { amivcore.events.GET({ id: $(this).attr('data-id') @@ -437,12 +514,18 @@ newEvent["data"]["catchphrase_de"] = setNullIfEmpty($("#catchphrase_de").val()); if (!($("#time_start").data("DateTimePicker").date() == null)) { - //for now, because the api rejects .toISOString format - newEvent["data"]["time_start"] = $("#time_start").data("DateTimePicker").date().format("%Y-%m-%dT%H:%M:%SZ"); + newEvent["data"]["time_start"] = $("#time_start").data("DateTimePicker").date(); } if (!($("#time_end").data("DateTimePicker").date() == null)) { - //for now, because the api rejects .toISOString format - newEvent["data"]["time_end"] = $("#time_end").data("DateTimePicker").date().format("%Y-%m-%dT%H:%M:%SZ"); + newEvent["data"]["time_end"] = $("#time_end").data("DateTimePicker").date(); + } + + + if (!($("#time_advertising_start").data("DateTimePicker").date() == null)) { + newEvent["data"]["time_advertising_start"] = $("#time_advertising_start").data("DateTimePicker").date(); + } + if (!($("#time_end").data("DateTimePicker").date() == null)) { + newEvent["data"]["time_advertising_end"] = $("#time_advertising_end").data("DateTimePicker").date(); } if (!$("#signup-required").is(":checked")) { @@ -457,15 +540,13 @@ } if (!($("#time_register_start").data("DateTimePicker").date() == null)) { - //for now, because the api rejects .toISOString format - newEvent["data"]["time_register_start"] = $("#time_register_start").data("DateTimePicker").date().format("%Y-%m-%dT%H:%M:%SZ"); + newEvent["data"]["time_register_start"] = $("#time_register_start").data("DateTimePicker").date(); } else { tools.log('field "Start of Registration" required', 'e'); return; } if (!($("#time_register_end").data("DateTimePicker").date() == null)) { - //for now, because the api rejects .toISOString format - newEvent["data"]["time_register_end"] = $("#time_register_end").data("DateTimePicker").date().format("%Y-%m-%dT%H:%M:%SZ"); + newEvent["data"]["time_register_end"] = $("#time_register_end").data("DateTimePicker").date(); } else { tools.log('field "End of Registration" required', 'e'); return; @@ -485,6 +566,7 @@ newEvent["data"]["show_website"] = $("#show_website").is(':checked'); newEvent["data"]["show_infoscreen"] = $("#show_infoscreen").is(':checked'); newEvent["data"]["show_announce"] = $("#show_announce").is(':checked'); + newEvent["data"]["priority"] = (parseInt($("#priority").val())); newEvent["data"]["additional_fields"] = setNullIfEmpty($("#additional_fields").val()); newEvent["data"]["title_en"] = setNullIfEmpty($("#title_en").val()); @@ -511,18 +593,35 @@ //setting up the date time picker $(function() { $('#time_start').datetimepicker({ - locale: "de" + locale: "de", + sideBySide: true }); + $('#time_end').datetimepicker({ locale: "de", - useCurrent: false //Important! See issue #1075aa + useCurrent: false, //Important! See issue #1075aa + sideBySide: true + }); + + $('#time_advertising_start').datetimepicker({ + locale: "de", + sideBySide: true + }); + + $('#time_advertising_end').datetimepicker({ + locale: "de", + useCurrent: false, //Important! See issue #1075aa + sideBySide: true }); + $('#time_register_start').datetimepicker({ - locale: "de" + locale: "de", + sideBySide: true }); $('#time_register_end').datetimepicker({ locale: "de", - useCurrent: false //Important! See issue #107534 + useCurrent: false, //Important! See issue #107534 + sideBySide: true }); $("#time_register_start").on("dp.change", function(e) { $('#time_register_end').data("DateTimePicker").minDate(e.date); @@ -530,6 +629,12 @@ $("#time_register_end").on("dp.change", function(e) { $('#time_register_start').data("DateTimePicker").maxDate(e.date); }); + $("#time_advertising_start").on("dp.change", function(e) { + $('#time_advertising_end').data("DateTimePicker").minDate(e.date); + }); + $("#time_advertising_end").on("dp.change", function(e) { + $('#time_advertising_start').data("DateTimePicker").maxDate(e.date); + }); $("#time_start").on("dp.change", function(e) { $('#time_end').data("DateTimePicker").minDate(e.date); }); @@ -584,7 +689,7 @@ callback: function() { var tmp = '<div class="form-group"><select class="form-control events-sort-select">'; var cur = events.sort.cur(); - ['id', 'title_de', 'description_de', 'time_start', 'time_register_start', 'time_end', 'time_register_end', 'show_website', 'show_announce', 'show_infoscreen', 'price', '_updated', 'location'].forEach(function(i) { + ['_id', 'title_de', 'description_de', 'time_start', 'time_register_start', 'time_end', 'time_register_end', 'show_website', 'show_announce', 'show_infoscreen', 'price', '_updated', 'location'].forEach(function(i) { tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>⇡ ' + i + '</option>'; tmp += '<option value="-' + i + '"' + (('-' + i == cur) ? ' selected' : '') + '>⇣ ' + i + '</option>'; }); @@ -613,7 +718,7 @@ cur = ''; else cur = cur.split('==')[1]; - ['id', 'title_de', 'description_de', 'title_en', 'description_en', 'time_start', 'time_register_start', 'time_end', 'time_register_end', 'show_website', 'show_announce', 'show_infoscreen', 'price', '_updated', 'location'] + ['_id', 'title_de', 'description_de', 'title_en', 'description_en', 'time_start', 'time_register_start', 'time_end', 'time_register_end', 'show_website', 'show_announce', 'show_infoscreen', 'price', '_updated', 'location'] .forEach( function(i) { tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>' + i + '</option>'; @@ -648,6 +753,10 @@ $(document).ready(function() { $('[data-toggle="tooltip"]').tooltip(); + $('#event-modal-form').on('keyup change', 'input, select, textarea, span ', function(){ + console.log('changed shit'); + events.somethingChanged = true; + }); }); function setNullIfEmpty(formData) { diff --git a/tools/groups.tool b/tools/groups.tool index 83e315a62d151b8dfe729bc840bb7e938623d1c1..e3e375794a9b7fdefd17f6dc644b744a229908c6 100644 --- a/tools/groups.tool +++ b/tools/groups.tool @@ -78,7 +78,7 @@ where: groups.search.cur(), } }, function(ret) { - + console.log(ret); if (ret === undefined || ret['_items'].length == 0) { tools.log('No Data', 'w'); return; @@ -100,7 +100,7 @@ groups.showInTable.forEach(function(i) { tmp += '<td>' + ret['_items'][n][i] + '</td>'; }); - $('.groups-table tbody').append('<tr data-id="' + ret['_items'][n]['id'] + '">' + tmp + '</tr>'); + $('.groups-table tbody').append('<tr data-id="' + ret['_items'][n]['_id'] + '">' + tmp + '</tr>'); } $('.groups-table tbody tr').click(groups.showDetails); }); @@ -114,7 +114,7 @@ console.log(ret); curUserData = ret; - var tmp = '<div class="groups-edit-cont" data-etag="' + ret['_etag'] + '" data-id="' + ret['id'] + '">'; + var tmp = '<div class="groups-edit-cont" data-etag="' + ret['_etag'] + '" data-id="' + ret['_id'] + '">'; for (var cur in ret) if (cur.charAt(0) != '_') if (cur == 'user_subscribers') { @@ -236,7 +236,7 @@ $('.groups-user-add-form input').each(function() { newUserData[$(this).attr('name')] = $(this).val(); }); - newUserData['moderator_id'] = ret['_items'][0].id; + newUserData['moderator_id'] = ret['_items'][0]['_id']; console.log(newUserData); amivcore.groups.POST({ data: newUserData diff --git a/tools/users.tool b/tools/users.tool index 44a8a037343ac9870fdea346637cc18185e4cb4f..b4bf41bd032aac8989ef77d215d7a5e7656901ff 100644 --- a/tools/users.tool +++ b/tools/users.tool @@ -99,7 +99,7 @@ users.showInTable.forEach(function(i) { tmp += '<td>' + ret['_items'][n][i] + '</td>'; }); - $('.users-table tbody').append('<tr data-id="' + ret['_items'][n]['id'] + '">' + tmp + '</tr>'); + $('.users-table tbody').append('<tr data-id="' + ret['_items'][n]['_id'] + '">' + tmp + '</tr>'); } $('.users-table tbody tr').click(users.showDetails); }); @@ -249,7 +249,7 @@ callback: function() { var tmp = '<div class="form-group"><select class="form-control users-sort-select">'; var cur = users.sort.cur(); - ['id', 'firstname', 'lastname', 'membership', 'nethz'].forEach(function(i) { + ['_id', 'firstname', 'lastname', 'membership', 'nethz'].forEach(function(i) { tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>⇡ ' + i + '</option>'; tmp += '<option value="-' + i + '"' + (('-' + i == cur) ? ' selected' : '') + '>⇣ ' + i + '</option>'; }); @@ -278,7 +278,7 @@ cur = ''; else cur = cur.split('==')[1]; - ['id', 'firstname', 'lastname'].forEach(function(i) { + ['_id', 'firstname', 'lastname'].forEach(function(i) { tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>' + i + '</option>'; }); tmp += '</select><br><input type="text" value="' + cur + '" class="form-control users-search-val"></div>';