Ankündigungen (News)
Ankündigungen informieren Stud.IP-Nutzer über neuste Ereignisse rund um die Lehre. In Stud.IP können Ankündigungen z.B. systemweit (global) oder für einen bestimmten Nutzerkreis erstellt werden.
Schema “news”
Abschnitt betitelt „Schema “news”“Ankündigungen bestehen aus ihrem Inhalt und einigen Meta-Daten. Die Dauer der Sichtbarkeit einer Anküdnigung wird durch ihre Attribute publication-start und end bestimmt (siehe Relationen).
Attribute
Abschnitt betitelt „Attribute“| Attribut | Beschreibung |
|---|---|
| title | Name einer news |
| content | Inhalt einer News |
| mkdate | Erstellungs-Datum einer News |
| chdate | Datum der letzten Änderung |
| publication-start | Start der Sichtbarkeit für den Nutzerkreis einer News |
| publication-end | Ende der Sichtbarkeit für den Nutzerkreis einer News |
| comments-allowed | Bestimmung, ob Kommentare erlaubt sind (Boolean) |
Ein Beispiel zum erstellen einer News anhand des Schemas folgt in News anlegen.
Relationen
Abschnitt betitelt „Relationen“| Relation | Beschreibung |
|---|---|
| author | Ersteller einer News |
| ranges | global, institute, semester, course, users |
Der Range einer News gibt an wo sie publiziert wird und somit auch für wen sie sichtbar ist.
Schema “comments”
Abschnitt betitelt „Schema “comments”“Kommentare werden in Stud.IP an eine Ankündigung angehangen, wenn der Ersteller der News die Erlaubnis vergeben hat.
Attribute
Abschnitt betitelt „Attribute“| Attribut | Beschreibung |
|---|---|
| content | Inhalt eines Kommentars |
| mkdate | Erstellungs-Datum |
| chdate | Datum der letzten Änderung |
Relationen
Abschnitt betitelt „Relationen“| Relation | Beschreibung |
|---|---|
| author | Der Ersteller des Kommentars |
| news | Die kommentierte News |
News anlegen
Abschnitt betitelt „News anlegen“Das Anlegen einer News ist in verschiedenen Kontexten möglich. Sie kann global als systemweite News, kursintern oder nutzerbezogen angelegt werden.
Eine globale News anlegen
Abschnitt betitelt „Eine globale News anlegen“POST /news
Autorisierung
Abschnitt betitelt „Autorisierung“Die Erstellung einer globalen News erfordern zur Zeit noch Root-Rechte. Es wird diskutiert ob hier Adminrechte reichen.
curl --request POST \ --url https://example.com/news \ --header "Content-Type: application/vnd.api+json" \ --header "Authorization: Basic `echo -ne "root@studip:testing" | base64`" \ --data '{"data": {"type": "news","attributes": {"title": "Neue News","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine neue News sieht das Tageslicht."}}}'Eine Kurs-News anlegen
Abschnitt betitelt „Eine Kurs-News anlegen“POST /courses/{id}/news
curl --request POST \ --url https://example.com/courses/<COURSE-ID>/news \ --header "Content-Type: application/vnd.api+json" \ --header "Authorization: Basic `echo -ne "test_dozent:testing" | base64`" \ --data '{"data": {"type": "news","attributes": {"title": "Neue News","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine neue News sieht das Tageslicht."}}}'| Parameter | Beschreibung |
|---|---|
| id | Die ID des Kurses |
Autorisierung
Abschnitt betitelt „Autorisierung“Der Nutzer muss mindestens Dozenten- oder Adminrechte innerhalb des Kurses haben.
Eine Nutzer-News anlegen
Abschnitt betitelt „Eine Nutzer-News anlegen“POST /users/{id}/news
curl --request POST \ --url https://example.com/users/<USER-ID>/news \ --header "Content-Type: application/vnd.api+json" \ --header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \ --data '{"data": {"type": "news","attributes": {"title": "Neue News","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine neue News sieht das Tageslicht."}}}'| Parameter | Beschreibung |
|---|---|
| id | Die ID des Users |
Autorisierung
Abschnitt betitelt „Autorisierung“Der Nutzer muss mindestens User-Rechte haben.
Einen Kommentar anlegen
Abschnitt betitelt „Einen Kommentar anlegen“POST /news/{id}/comments
curl --request POST \ --url https://example.com/news/<NEWS-ID>/comments \ --header "Content-Type: application/vnd.api+json" \ --header "Authorization: Basic `echo -ne "test_dozent:testing" | base64`" \ --data '{"data": {"type": "comments","attributes": {"content": "Ein Kommentar wurde geupdatet"}}}'Autorisierung
Abschnitt betitelt „Autorisierung“ Der Nutzer muss mindestens User-Rechte haben.| Parameter | Beschreibung |
|---|---|
| id | Die ID der News |
Eine News ändern
Abschnitt betitelt „Eine News ändern“PATCH /news/{id}
| Parameter | Beschreibung |
|---|---|
| id | Die ID der News |
Die Data-Felder beim Update einer News sind optional.
curl --request PATCH \ --url https://example.com/news/<NEWS-ID> \ --header "Content-Type: application/vnd.api+json" \ --header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \ --data '{"data": {"type": "news","attributes": {"title": "Aenderungen","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine News wurde geaendert."}}}'Autorisierung
Abschnitt betitelt „Autorisierung“Der Nutzer muss Inhaber der News sein oder die entsprechenden Root-Rechtebesitzen.Eine News ansehen
Abschnitt betitelt „Eine News ansehen“GET /news/{id}
| Parameter | Beschreibung |
|---|---|
| id | Die ID der News |
curl --request GET \ --url https://example.com/news/<NEWS-ID> \ --header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \Autorisierung
Abschnitt betitelt „Autorisierung“ Der Nutzer muss Inhaber der News sein oder die entsprechenden Range-Rechte besitzen.Der Request liefert JSON ähnlich wie dieses:
{ "data": { "type": "news", "id": "6a8be7e4859e9c781ecc47a2c3498435", "attributes": { "title": "A testing title", "content": "Lorem ipsum dolor sit amet, consectetur adipisicing elit", "mkdate": "2019-04-23T12:10:26+02:00", "chdate": "2019-04-23T12:10:26+02:00", "publication-start": "2019-04-23T12:10:26+02:00", "publication-end": "2019-05-07T12:10:26+02:00", "comments-allowed": true }, "relationships": { "author": { "data": { "type": "users", "id": "e7a0a84b161f3e8c09b4a0a2e8a58147" }, "links": { "related": "jsonapi.php/v1/users/e7a0a84b161f3e8c09b4a0a2e8a58147" } }, "ranges": { "data": [
], "links": { "self": "jsonapi.php/v1/news/6a8be7e4859e9c781ecc47a2c3498435/relationships/ranges" } } }, "links": { "self": "jsonapi.php/v1/news/6a8be7e4859e9c781ecc47a2c3498435" } }}Alle Kurs-News
Abschnitt betitelt „Alle Kurs-News“GET /courses/{id}/news
| Parameter | Beschreibung |
|---|---|
| id | Die ID des Kurses |
curl --request GET \ --url https://example.com/course/<COURSE-ID>/news \ --header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \Autorisierung
Abschnitt betitelt „Autorisierung“Der Nutzer muss mindestens Teilnehmer des Kurses sein.
Der Request liefert JSON ähnlich wie dieses:
{ "meta": { "page": { "offset": 0, "limit": 30, "total": 4 } }, "links": { "first": "/stud35/plugins.php/argonautsplugin/courses/1b7d3834e42c1569947e0eab7b63ed19/news?page%5Boffset%5D=0&page%5Blimit%5D=30", "last": "/stud35/plugins.php/argonautsplugin/courses/1b7d3834e42c1569947e0eab7b63ed19/news?page%5Boffset%5D=0&page%5Blimit%5D=30" }, "data": [ { "type": "news", "id": "9dc34d7414e9d6c2789923649a64673e", "attributes": { "title": "Fakenews", "content": "This is fakenews232", "mkdate": "2018-06-20T10:40:43+02:00", "chdate": "2018-06-20T10:57:37+02:00", "publication-start": "2018-06-21T12:00:00+02:00", "publication-end": "2066-12-09T22:00:00+01:00", "comments-allowed": true }, "relationships": { "author": { "data": { "type": "users", "id": "76ed43ef286fb55cf9e41beadb484a9f" }, "links": { "related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f" } }, "ranges": { "data": [ { "type": "courses", "id": "1b7d3834e42c1569947e0eab7b63ed19" } ], "links": { "self": "/stud35/plugins.php/argonautsplugin/news/9dc34d7414e9d6c2789923649a64673e/relationships/ranges" } } }, "links": { "self": "/stud35/plugins.php/argonautsplugin/news/9dc34d7414e9d6c2789923649a64673e" } }, { "type": "news", "id": "0e8df7da383d7515c4dc081bfe889897", "attributes": { "title": "Fakenews", "content": "This is fakenews232", "mkdate": "2018-06-19T16:08:51+02:00", "chdate": "2018-06-20T09:50:02+02:00", "publication-start": "2018-06-19T16:08:51+02:00", "publication-end": "2066-12-05T15:08:51+01:00", "comments-allowed": true }, "relationships": { "author": { "data": { "type": "users", "id": "76ed43ef286fb55cf9e41beadb484a9f" }, "links": { "related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f" } }, "ranges": { "data": [ { "type": "courses", "id": "1b7d3834e42c1569947e0eab7b63ed19" } ], "links": { "self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges" } } }, "links": { "self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897" } }, { "type": "news", "id": "191ce64590a28b3e038b09e85ea53178", "attributes": { "title": "Fakenews", "content": "This is fakenews", "mkdate": "2018-05-08T11:42:11+02:00", "chdate": "2018-05-08T11:42:11+02:00", "publication-start": "2018-05-08T11:42:11+02:00", "publication-end": "2066-09-19T20:24:22+01:00", "comments-allowed": true }, "relationships": { "author": { "data": { "type": "users", "id": "76ed43ef286fb55cf9e41beadb484a9f" }, "links": { "related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f" } }, "ranges": { "data": [ { "type": "courses", "id": "1b7d3834e42c1569947e0eab7b63ed19" } ], "links": { "self": "/stud35/plugins.php/argonautsplugin/news/191ce64590a28b3e038b09e85ea53178/relationships/ranges" } } }, "links": { "self": "/stud35/plugins.php/argonautsplugin/news/191ce64590a28b3e038b09e85ea53178" } }, { "type": "news", "id": "a355b8d628d8656eb93dc527fe1209f3", "attributes": { "title": "Fakenews", "content": "This is fakenews", "mkdate": "2018-05-08T11:35:56+02:00", "chdate": "2018-05-08T11:35:56+02:00", "publication-start": "2018-05-08T11:35:55+02:00", "publication-end": "2066-09-19T20:11:50+01:00", "comments-allowed": true }, "relationships": { "author": { "data": { "type": "users", "id": "76ed43ef286fb55cf9e41beadb484a9f" }, "links": { "related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f" } }, "ranges": { "data": [ { "type": "courses", "id": "1b7d3834e42c1569947e0eab7b63ed19" } ], "links": { "self": "/stud35/plugins.php/argonautsplugin/news/a355b8d628d8656eb93dc527fe1209f3/relationships/ranges" } } }, "links": { "self": "/stud35/plugins.php/argonautsplugin/news/a355b8d628d8656eb93dc527fe1209f3" } } ]}Alle Nutzer-News
Abschnitt betitelt „Alle Nutzer-News“GET /users/{id}/news
| Parameter | Beschreibung |
|---|---|
| id | Die ID des Nutzers |
curl --request GET \ --url https://example.com/user/<USER-ID>/news \ --header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \Autorisierung
Abschnitt betitelt „Autorisierung“Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.
Der Request liefert JSON ähnlich wie dieses:
{ "data": { "type": "news", "id": "0e8df7da383d7515c4dc081bfe889897", "attributes": { "title": "Neue News", "content": "Eine neue News sieht das Tageslicht.", "mkdate": "2018-06-19T16:08:51+02:00", "chdate": "2018-08-15T14:22:38+02:00", "publication-start": "2018-06-19T16:08:51+02:00", "publication-end": "2066-12-05T15:08:51+01:00", "comments-allowed": true }, "relationships": { "author": { "data": { "type": "users", "id": "76ed43ef286fb55cf9e41beadb484a9f" }, "links": { "related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f" } }, "ranges": { "data": [ { "type": "users", "id": "1b7d3834e42c1569947e0eab7b63ed19" } ], "links": { "self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges" } } }, "links": { "self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897" } }}Alle News-Kommentare
Abschnitt betitelt „Alle News-Kommentare“GET /news/{id}/comments
| Parameter | Beschreibung |
|---|---|
| id | Die ID einer News |
Alle globalen News
Abschnitt betitelt „Alle globalen News“GET /studip/news
curl --request GET \ --url https://example.com/user/studip/news \ --header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \Autorisierung
Abschnitt betitelt „Autorisierung“Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.Der Request liefert JSON ähnlich wie dieses:
{ "data": { "type": "news", "id": "0e8df7da383d7515c4dc081bfe889897", "attributes": { "title": "Globale News", "content": "Eine neue News sieht das Tageslicht.", "mkdate": "2018-06-19T16:08:51+02:00", "chdate": "2018-08-15T14:22:38+02:00", "publication-start": "2018-06-19T16:08:51+02:00", "publication-end": "2066-12-05T15:08:51+01:00", "comments-allowed": true }, "relationships": { "author": { "data": { "type": "users", "id": "76ed43ef286fb55cf9e41beadb484a9f" }, "links": { "related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f" } }, "ranges": { "data": [ { "type": "global", "id": "studip" } ], "links": { "self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges" } } }, "links": { "self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897" } }}Alle News des aktuell eingeloggten Nutzers abrufen
Abschnitt betitelt „Alle News des aktuell eingeloggten Nutzers abrufen“`GET /news`curl --request GET \ --url https://example.com/news \ --header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \Autorisierung
Abschnitt betitelt „Autorisierung“Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.Der Request liefert JSON ähnlich wie dieses:
{ "data": { "type": "news", "id": "0e8df7da383d7515c4dc081bfe889897", "attributes": { "title": "Neue News", "content": "Eine neue News sieht das Tageslicht.", "mkdate": "2018-06-19T16:08:51+02:00", "chdate": "2018-08-15T14:22:38+02:00", "publication-start": "2018-06-19T16:08:51+02:00", "publication-end": "2066-12-05T15:08:51+01:00", "comments-allowed": true }, "relationships": { "author": { "data": { "type": "users", "id": "76ed43ef286fb55cf9e41beadb484a9f" }, "links": { "related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f" } }, "ranges": { "data": [ { "type": "users", "id": "1b7d3834e42c1569947e0eab7b63ed19" } ], "links": { "self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges" } } }, "links": { "self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897" } }}Eine News löschen
Abschnitt betitelt „Eine News löschen“DELETE /news/{id}
| Parameter | Beschreibung |
|---|---|
| id | Die ID der News |
Authorisierung
Abschnitt betitelt „Authorisierung“Diese Route kann nur vom Nutzer der betreffenden Nachrichten genutzt werden.
curl --request DELETE \ --url https://example.com/news/<NEWS-ID> \ --header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \Autorisierung
Abschnitt betitelt „Autorisierung“ Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.Einen Kommentar löschen
Abschnitt betitelt „Einen Kommentar löschen“DELETE /comments/{id}
| Parameter | Beschreibung |
|---|---|
| id | Die ID eines Kommentars |
curl --request DELETE \ --url https://example.com/comments/studip/news \ --header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \Alle News-Ranges
Abschnitt betitelt „Alle News-Ranges“GET /news/{id}/relationships/ranges
see http://jsonapi.org/format/#fetching-relationships
News-Ranges setzen
Abschnitt betitelt „News-Ranges setzen“PATCH /news/{id}/relationships/ranges
see http://jsonapi.org/format/#crud-updating-to-many-relationships
News-Ranges hinzufügen
Abschnitt betitelt „News-Ranges hinzufügen“POST /news/{id}/relationships/ranges
see http://jsonapi.org/format/#crud-updating-to-many-relationships
News-Ranges löschen
Abschnitt betitelt „News-Ranges löschen“DELETE /news/{id}/relationships/ranges
see http://jsonapi.org/format/#crud-updating-to-many-relationships