Skip to content

Commit

Permalink
Merge branch 'main' into dependabot/npm_and_yarn/babel/traverse-7.23.2
Browse files Browse the repository at this point in the history
  • Loading branch information
SevenWaysDP authored Nov 28, 2023
2 parents f75927b + 2877264 commit 25ed3e2
Show file tree
Hide file tree
Showing 23 changed files with 350 additions and 214 deletions.
16 changes: 15 additions & 1 deletion ansible/roles/schulcloud-client-core/templates/deployment.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ metadata:
namespace: {{ NAMESPACE }}
labels:
app: client
app.kubernetes.io/part-of: schulcloud-verbund
app.kubernetes.io/version: {{ SCHULCLOUD_CLIENT_IMAGE_TAG }}
app.kubernetes.io/name: client
app.kubernetes.io/component: client
app.kubernetes.io/managed-by: ansible
git.branch: {{ SCHULCLOUD_CLIENT_BRANCH_NAME }}
git.repo: {{ SCHULCLOUD_CLIENT_REPO_NAME }}
spec:
replicas: {{ CLIENT_REPLICAS|default("1", true) }}
strategy:
Expand All @@ -21,9 +28,16 @@ spec:
metadata:
labels:
app: client
app.kubernetes.io/part-of: schulcloud-verbund
app.kubernetes.io/version: {{ SCHULCLOUD_CLIENT_IMAGE_TAG }}
app.kubernetes.io/name: client
app.kubernetes.io/component: client
app.kubernetes.io/managed-by: ansible
git.branch: {{ SCHULCLOUD_CLIENT_BRANCH_NAME }}
git.repo: {{ SCHULCLOUD_CLIENT_REPO_NAME }}
annotations:
spec:
securityContext:
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
Expand Down
18 changes: 14 additions & 4 deletions config/default.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,14 @@
"type": "string",
"description": "comma separated list of roles which GLOBAL_ANNOUNCEMENT_TEXT is shown to"
},
"BETTERMARKS_ANNOUNCEMENT_ENABLED": {
"DASHBOARD_ANNOUNCEMENT_ENABLED": {
"type": "boolean",
"default": false,
"description": "enbale bettermarks announcement, shown to all user roles specified in BETTERMARKS_ANNOUNCEMENT_ROLES"
"description": "enbale announcement on dashboard, shown to all user roles specified in DASHBOARD_ANNOUNCEMENT_ROLES"
},
"BETTERMARKS_ANNOUNCEMENT_ROLES": {
"DASHBOARD_ANNOUNCEMENT_ROLES": {
"type": "string",
"description": "comma separated list of roles which bettermarks announcement is shown to"
"description": "comma separated list of roles which dashboard announcement is shown to"
},
"GLOBAL_LOGIN_ANNOUNCEMENT_TYPE": {
"type": "string",
Expand Down Expand Up @@ -593,6 +593,11 @@
"default": false,
"description": "Changes the login flow to one that supports user login migrations"
},
"FEATURE_H5P_EDITOR_ENABLED": {
"type": "boolean",
"default": false,
"description": "If enabled, adds H5P editor to course topics."
},
"FEATURE_SHOW_NEW_CLASS_VIEW_ENABLED": {
"type": "boolean",
"default": false,
Expand All @@ -602,6 +607,11 @@
"type": "boolean",
"default": false,
"description": "Enables to get groups of type class in courses"
},
"FEATURE_NEST_SYSTEMS_API_ENABLED": {
"type": "boolean",
"default": true,
"description": "Uses the v3 api over the v1 api for systems"
}
},
"allOf": [
Expand Down
2 changes: 2 additions & 0 deletions config/global.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ const {
FEATURE_BUTTONS_ON_LOGINPAGE_ENABLED,
FEATURE_SHOW_NEW_CLASS_VIEW_ENABLED,
FEATURE_GROUPS_IN_COURSE_ENABLED,
FEATURE_NEST_SYSTEMS_API_ENABLED,
} = process.env;

const exp = {
Expand Down Expand Up @@ -84,6 +85,7 @@ const exp = {
FEATURE_BUTTONS_ON_LOGINPAGE_ENABLED,
FEATURE_SHOW_NEW_CLASS_VIEW_ENABLED,
FEATURE_GROUPS_IN_COURSE_ENABLED,
FEATURE_NEST_SYSTEMS_API_ENABLED,
};

// eslint-disable-next-line no-console
Expand Down
63 changes: 36 additions & 27 deletions controllers/administration.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const timesHelper = require('../helpers/timesHelper');
const router = express.Router();
const upload = multer({ storage: multer.memoryStorage() });

const { HOST, CONSENT_WITHOUT_PARENTS_MIN_AGE_YEARS } = require('../config/global');
const { HOST, CONSENT_WITHOUT_PARENTS_MIN_AGE_YEARS, FEATURE_NEST_SYSTEMS_API_ENABLED } = require('../config/global');
const { isUserHidden } = require('../helpers/users');

// eslint-disable-next-line no-unused-vars
Expand Down Expand Up @@ -466,8 +466,8 @@ const getDetailHandler = (service) => function detailHandler(req, res, next) {
.catch(next);
};

const getDeleteHandler = (service, redirectUrl) => function deleteHandler(req, res, next) {
api(req)
const getDeleteHandler = (service, redirectUrl, apiVersion = 'v1') => function deleteHandler(req, res, next) {
api(req, { version: apiVersion })
.delete(`/${service}/${req.params.id}`)
.then(() => {
if (redirectUrl) {
Expand Down Expand Up @@ -1617,7 +1617,8 @@ const renderClassEdit = (req, res, next) => {
class: currentClass,
gradeLevels,
isCustom,
referrer: '/administration/classes/',
referrer: Configuration.get('FEATURE_SHOW_NEW_CLASS_VIEW_ENABLED')
? '/administration/groups/classes/' : '/administration/classes/',
});
},
);
Expand Down Expand Up @@ -1848,7 +1849,8 @@ router.get(
students: filterStudents(res, students),
schoolUsesLdap: res.locals.currentSchoolData.ldapSchoolIdentifier,
notes,
referrer: '/administration/classes/',
referrer: Configuration.get('FEATURE_SHOW_NEW_CLASS_VIEW_ENABLED')
? '/administration/groups/classes/' : '/administration/classes/',
consentsMissing: usersWithoutConsent.length !== 0,
consentNecessary,
// eslint-disable-next-line max-len
Expand Down Expand Up @@ -1953,7 +1955,7 @@ router.post(
'ADMIN_VIEW',
);
if (isAdmin) {
res.redirect('/administration/classes/');
Configuration.get('FEATURE_SHOW_NEW_CLASS_VIEW_ENABLED') ? res.redirect('/administration/groups/classes/') : res.redirect('/administration/classes/');
} else {
res.redirect(`/administration/classes/${data._id}/manage`);
}
Expand Down Expand Up @@ -2764,7 +2766,7 @@ router.get('/systems/:id', getDetailHandler('systems'));
router.delete(
'/systems/:id',
removeSystemFromSchoolHandler,
getDeleteHandler('systems'),
getDeleteHandler('systems', undefined, FEATURE_NEST_SYSTEMS_API_ENABLED === 'true' ? 'v3' : 'v1'),
);

router.get('/rss/:id', async (req, res) => {
Expand Down Expand Up @@ -2878,27 +2880,34 @@ router.use(
const getSystemsBody = (systems) => systems.map((item) => {
const name = getSSOTypes().filter((type) => item.type === type.value);
let tableActions = [];
const editable = (item.type === 'ldap' && item.ldapConfig.provider === 'general')
|| item.type === 'moodle' || item.type === 'iserv';
const hasSystemPermission = permissionsHelper.userHasPermission(res.locals.currentUser, 'SYSTEM_EDIT');
const editable = item.ldapConfig?.provider === 'general';
const hasSystemEditPermission = permissionsHelper.userHasPermission(res.locals.currentUser, 'SYSTEM_EDIT');
const hasSystemCreatePermission = permissionsHelper.userHasPermission(res.locals.currentUser, 'SYSTEM_CREATE');

if (editable && hasSystemPermission) {
tableActions = tableActions.concat([
{
link: item.type === 'ldap' ? `/administration/ldap/config?id=${item._id}`
: `/administration/systems/${item._id}`,
class: item.type === 'ldap' ? 'btn-edit-ldap' : 'btn-edit',
icon: 'edit',
title: res.$t('administration.controller.link.editEntry'),
},
{
link: `/administration/systems/${item._id}`,
class: 'btn-delete--systems',
icon: 'trash-o',
method: 'delete',
title: res.$t('administration.controller.link.deleteEntry'),
},
]);
if (editable) {
if (hasSystemEditPermission) {
tableActions = tableActions.concat([
{
link: item.type === 'ldap' ? `/administration/ldap/config?id=${item._id}`
: `/administration/systems/${item._id}`,
class: item.type === 'ldap' ? 'btn-edit-ldap' : 'btn-edit',
icon: 'edit',
title: res.$t('administration.controller.link.editEntry'),
},
]);
}

if (hasSystemCreatePermission) {
tableActions = tableActions.concat([
{
link: `/administration/systems/${item._id}`,
class: 'btn-delete--systems',
icon: 'trash-o',
method: 'delete',
title: res.$t('administration.controller.link.deleteEntry'),
},
]);
}
}
return [
item.type === 'ldap' && item.ldapConfig.active === false
Expand Down
6 changes: 3 additions & 3 deletions controllers/dashboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ router.get('/', (req, res, next) => {
qs: {
$limit: 1,
$sort: {
createdAt: -1,
publishedAt: -1,
},
},
})
Expand Down Expand Up @@ -262,7 +262,7 @@ router.get('/', (req, res, next) => {
const newestRelease = newestReleases[0] || {};
const newRelease = !!(
Date.parse(userPreferences.releaseDate)
< Date.parse(newestRelease.createdAt)
< Date.parse(newestRelease.publishedAt)
);
const roles = user.roles.map((role) => role.name);
let homeworksFeedbackRequired = [];
Expand All @@ -278,7 +278,7 @@ router.get('/', (req, res, next) => {
if (newRelease || !userPreferences.releaseDate) {
api(req)
.patch(`/users/${user._id}`, {
json: { 'preferences.releaseDate': newestRelease.createdAt },
json: { 'preferences.releaseDate': newestRelease.publishedAt },
})
.catch(() => {
warn('failed to update user preference releaseDate');
Expand Down
2 changes: 1 addition & 1 deletion controllers/firstLogin.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ router.get('/', async (req, res, next) => {
}

// EMAIL
if (!res.locals.currentUser.source) {
if (!(res.locals.currentUser.source || res.locals.currentPayload.isExternalUser)) {
// only display the confirm email page if the user was not generated from an external source
submitPageIndex += 1;
sections.push('email');
Expand Down
39 changes: 0 additions & 39 deletions controllers/login.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,6 @@ const {
} = require('../helpers');
const { LoginSchoolsCache } = require('../helpers/cache');

Handlebars.registerHelper('oauthLink', (id) => {
const apiUrl = `${Configuration.get('PUBLIC_BACKEND_URL')}/v3/sso/login/${id}`;
return apiUrl;
});

// SSO Login
router.get('/tsp-login/', (req, res, next) => {
const {
Expand Down Expand Up @@ -353,26 +348,6 @@ router.all('/', async (req, res, next) => {
}
});

const mapErrorCodeToTranslation = (errorCode) => {
switch (errorCode) {
case 'sso_user_notfound':
return 'login.text.userNotFound';
case 'sso_oauth_access_denied':
return 'login.text.accessDenied';
case 'sso_jwt_problem':
case 'sso_oauth_invalid_request':
case 'sso_oauth_unsupported_response_type':
case 'sso_auth_code_step':
return 'login.text.oauthCodeStep';
case 'sso_internal_error':
return 'login.text.internalError';
case 'sso_user_not_found_after_provisioning':
return 'login.text.userNotFoundInUnprovisionedSchool';
default:
return 'login.text.loginFailed';
}
};

const renderLogin = async (req, res) => {
await authHelper.clearCookie(req, res);

Expand All @@ -381,20 +356,6 @@ const renderLogin = async (req, res) => {

let oauthErrorLogout = false;

// TODO N21-1374: remove old login flow
if (req.query.error) {
res.locals.notification = {
type: 'danger',
message: res.$t(mapErrorCodeToTranslation(req.query.error), {
systemName: 'moin.schule',
shortTitle: res.locals.theme.short_title,
}),
};
if (req.query.provider === 'iserv' && req.query.error !== 'sso_oauth_access_denied') {
oauthErrorLogout = true;
}
}

if (req.session.oauth2Logout) {
oauthErrorLogout = req.session.oauth2Logout.provider;

Expand Down
18 changes: 9 additions & 9 deletions helpers/handlebars/middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -209,18 +209,18 @@ module.exports = (req, res, next) => {
];

if (newClassViewEnabled) {
teacherChildren.splice(3, 0, {
name: res.$t('global.sidebar.link.administrationClassesNew'),
testId: 'Klassen (neu)',
teacherChildren.splice(2, 1, {
name: res.$t('global.sidebar.link.administrationClasses'),
testId: 'Klassen',
icon: // eslint-disable-next-line max-len
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M4 4H20V15.1648C20.7778 15.62 21.3824 16.1788 21.8399 16.7855C21.9429 16.5443 22 16.2788 22 16V4C22 2.89543 21.1046 2 20 2H4C2.89543 2 2 2.89543 2 4V16C2 16.6043 2.26802 17.146 2.69168 17.5128C2.81915 17.279 2.97043 17.0394 3.15 16.8C3.39346 16.4754 3.67575 16.1677 4 15.8832V4ZM11.6667 12.4944C11.1734 12.8241 10.5933 13 10 13C9.20435 13 8.44129 12.6839 7.87868 12.1213C7.31607 11.5587 7 10.7957 7 10C7 9.40666 7.17595 8.82664 7.50559 8.33329C7.83524 7.83994 8.30377 7.45543 8.85195 7.22836C9.40013 7.0013 10.0033 6.94189 10.5853 7.05765C11.1672 7.1734 11.7018 7.45912 12.1213 7.87868C12.5409 8.29824 12.8266 8.83279 12.9424 9.41473C13.0581 9.99667 12.9987 10.5999 12.7716 11.1481C12.5446 11.6962 12.1601 12.1648 11.6667 12.4944ZM10.5556 9.16853C10.3911 9.05865 10.1978 9 10 9C9.73478 9 9.48043 9.10536 9.29289 9.29289C9.10536 9.48043 9 9.73478 9 10C9 10.1978 9.05865 10.3911 9.16853 10.5556C9.27841 10.72 9.43459 10.8482 9.61732 10.9239C9.80004 10.9996 10.0011 11.0194 10.1951 10.9808C10.3891 10.9422 10.5673 10.847 10.7071 10.7071C10.847 10.5673 10.9422 10.3891 10.9808 10.1951C11.0194 10.0011 10.9996 9.80004 10.9239 9.61732C10.8482 9.43459 10.72 9.27841 10.5556 9.16853ZM15.0087 10C15.0087 11.0228 14.6951 12.021 14.11 12.86C14.3976 12.9526 14.6979 12.9998 15 13C15.7956 13 16.5587 12.6839 17.1213 12.1213C17.6839 11.5587 18 10.7957 18 10C18 9.20435 17.6839 8.44129 17.1213 7.87868C16.5587 7.31607 15.7956 7 15 7C14.6979 7.00018 14.3976 7.04741 14.11 7.14C14.6951 7.97897 15.0087 8.97718 15.0087 10ZM4 19C4 19 4 15 10 15C16 15 16 19 16 19V21H4V19ZM10 17C6.32 17 6 18.71 6 19H14C13.94 18.56 13.5 17 10 17ZM21 21V19C21 19 21 15.55 16.2 15.06C16.7466 15.5643 17.1873 16.1724 17.4964 16.8489C17.8054 17.5254 17.9766 18.2566 18 19V21H21Z"/></svg>',
isExternalIcon: true,
link: '/administration/groups/classes',
});

teacherChildrenWithoutStudents.splice(2, 0, {
name: res.$t('global.sidebar.link.administrationClassesNew'),
testId: 'Klassen (neu)',
teacherChildrenWithoutStudents.splice(1, 1, {
name: res.$t('global.sidebar.link.administrationClasses'),
testId: 'Klassen',
icon: // eslint-disable-next-line max-len
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M4 4H20V15.1648C20.7778 15.62 21.3824 16.1788 21.8399 16.7855C21.9429 16.5443 22 16.2788 22 16V4C22 2.89543 21.1046 2 20 2H4C2.89543 2 2 2.89543 2 4V16C2 16.6043 2.26802 17.146 2.69168 17.5128C2.81915 17.279 2.97043 17.0394 3.15 16.8C3.39346 16.4754 3.67575 16.1677 4 15.8832V4ZM11.6667 12.4944C11.1734 12.8241 10.5933 13 10 13C9.20435 13 8.44129 12.6839 7.87868 12.1213C7.31607 11.5587 7 10.7957 7 10C7 9.40666 7.17595 8.82664 7.50559 8.33329C7.83524 7.83994 8.30377 7.45543 8.85195 7.22836C9.40013 7.0013 10.0033 6.94189 10.5853 7.05765C11.1672 7.1734 11.7018 7.45912 12.1213 7.87868C12.5409 8.29824 12.8266 8.83279 12.9424 9.41473C13.0581 9.99667 12.9987 10.5999 12.7716 11.1481C12.5446 11.6962 12.1601 12.1648 11.6667 12.4944ZM10.5556 9.16853C10.3911 9.05865 10.1978 9 10 9C9.73478 9 9.48043 9.10536 9.29289 9.29289C9.10536 9.48043 9 9.73478 9 10C9 10.1978 9.05865 10.3911 9.16853 10.5556C9.27841 10.72 9.43459 10.8482 9.61732 10.9239C9.80004 10.9996 10.0011 11.0194 10.1951 10.9808C10.3891 10.9422 10.5673 10.847 10.7071 10.7071C10.847 10.5673 10.9422 10.3891 10.9808 10.1951C11.0194 10.0011 10.9996 9.80004 10.9239 9.61732C10.8482 9.43459 10.72 9.27841 10.5556 9.16853ZM15.0087 10C15.0087 11.0228 14.6951 12.021 14.11 12.86C14.3976 12.9526 14.6979 12.9998 15 13C15.7956 13 16.5587 12.6839 17.1213 12.1213C17.6839 11.5587 18 10.7957 18 10C18 9.20435 17.6839 8.44129 17.1213 7.87868C16.5587 7.31607 15.7956 7 15 7C14.6979 7.00018 14.3976 7.04741 14.11 7.14C14.6951 7.97897 15.0087 8.97718 15.0087 10ZM4 19C4 19 4 15 10 15C16 15 16 19 16 19V21H4V19ZM10 17C6.32 17 6 18.71 6 19H14C13.94 18.56 13.5 17 10 17ZM21 21V19C21 19 21 15.55 16.2 15.06C16.7466 15.5643 17.1873 16.1724 17.4964 16.8489C17.8054 17.5254 17.9766 18.2566 18 19V21H21Z"/></svg>',
isExternalIcon: true,
Expand Down Expand Up @@ -298,9 +298,9 @@ module.exports = (req, res, next) => {
];

if (newClassViewEnabled) {
adminChildItems.splice(4, 0, {
name: res.$t('global.sidebar.link.administrationClassesNew'),
testId: 'Klassen (neu)',
adminChildItems.splice(3, 1, {
name: res.$t('global.sidebar.link.administrationClasses'),
testId: 'Klassen',
icon: // eslint-disable-next-line max-len
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M4 4H20V15.1648C20.7778 15.62 21.3824 16.1788 21.8399 16.7855C21.9429 16.5443 22 16.2788 22 16V4C22 2.89543 21.1046 2 20 2H4C2.89543 2 2 2.89543 2 4V16C2 16.6043 2.26802 17.146 2.69168 17.5128C2.81915 17.279 2.97043 17.0394 3.15 16.8C3.39346 16.4754 3.67575 16.1677 4 15.8832V4ZM11.6667 12.4944C11.1734 12.8241 10.5933 13 10 13C9.20435 13 8.44129 12.6839 7.87868 12.1213C7.31607 11.5587 7 10.7957 7 10C7 9.40666 7.17595 8.82664 7.50559 8.33329C7.83524 7.83994 8.30377 7.45543 8.85195 7.22836C9.40013 7.0013 10.0033 6.94189 10.5853 7.05765C11.1672 7.1734 11.7018 7.45912 12.1213 7.87868C12.5409 8.29824 12.8266 8.83279 12.9424 9.41473C13.0581 9.99667 12.9987 10.5999 12.7716 11.1481C12.5446 11.6962 12.1601 12.1648 11.6667 12.4944ZM10.5556 9.16853C10.3911 9.05865 10.1978 9 10 9C9.73478 9 9.48043 9.10536 9.29289 9.29289C9.10536 9.48043 9 9.73478 9 10C9 10.1978 9.05865 10.3911 9.16853 10.5556C9.27841 10.72 9.43459 10.8482 9.61732 10.9239C9.80004 10.9996 10.0011 11.0194 10.1951 10.9808C10.3891 10.9422 10.5673 10.847 10.7071 10.7071C10.847 10.5673 10.9422 10.3891 10.9808 10.1951C11.0194 10.0011 10.9996 9.80004 10.9239 9.61732C10.8482 9.43459 10.72 9.27841 10.5556 9.16853ZM15.0087 10C15.0087 11.0228 14.6951 12.021 14.11 12.86C14.3976 12.9526 14.6979 12.9998 15 13C15.7956 13 16.5587 12.6839 17.1213 12.1213C17.6839 11.5587 18 10.7957 18 10C18 9.20435 17.6839 8.44129 17.1213 7.87868C16.5587 7.31607 15.7956 7 15 7C14.6979 7.00018 14.3976 7.04741 14.11 7.14C14.6951 7.97897 15.0087 8.97718 15.0087 10ZM4 19C4 19 4 15 10 15C16 15 16 19 16 19V21H4V19ZM10 17C6.32 17 6 18.71 6 19H14C13.94 18.56 13.5 17 10 17ZM21 21V19C21 19 21 15.55 16.2 15.06C16.7466 15.5643 17.1873 16.1724 17.4964 16.8489C17.8054 17.5254 17.9766 18.2566 18 19V21H21Z"/></svg>',
isExternalIcon: true,
Expand Down
13 changes: 9 additions & 4 deletions locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -1249,15 +1249,15 @@
"toTask": "Zur Aufgabe"
},
"text": {
"announcement": "Nehmen Sie an unserer Zufriedenheitsumfrage teil und helfen Sie uns, die Cloud zu verbessern. <a target=\"_blank\" aria-label=\"Zufriedenheitsumfrage\" class=\"alert-link\" rel=\"noopener noreferrer\" href=\"https://befragungen.dataport.de/umfrage/1732110/47pve9/\">Hier</a> geht’s zur Befragung.",
"emptyHomeworksInfo": "Keine gestellten Aufgaben. Du findest alle Aufgaben im Aufgaben-Bereich.",
"emptyNewsInfo": "Bisher gibt es keine News.",
"graded": "Bewertet",
"handedIn": "Abgegeben",
"noDueDate": "Kein Abgabedatum festgelegt",
"noMaterialsYetLookAtOthers": "Sie haben noch keine eigenen Materialien erstellt. Sie können sich aber auch Inspiration in Materialien Ihrer Kolleg:innen holen. Schauen Sie doch im <a href=\"/my-material\">\"Meine Materialien\"-Abschnitt</a> vorbei.",
"noNews": "Keine Neuigkeiten",
"notFound": "Keine aktuellen Einträge vorhanden.",
"bettermarksAnnouncement": "Neues bei bettermarks: Jetzt auch <a target=\"_blank\" aria-label=\"Unterrichtseinheiten für Klasse 5 und 6 bei bettermarks\" class=\"alert-link\" rel=\"noopener noreferrer\" href=\"https://de.bettermarks.com/unterrichten/\">Unterrichtseinheiten</a> für Klasse 5 und 6 neben den <a target=\"_blank\" aria-label=\"Übungs- und Testaufgaben für Klasse 4 bis 13 bei bettermarks\"class=\"alert-link\" rel=\"noopener noreferrer\" href=\"https://de.bettermarks.com/ueben-testen/\">Übungs- und Testaufgaben</a> für Jahrgangsstufe 4 bis 13!"
"notFound": "Keine aktuellen Einträge vorhanden."
}
},
"dataprivacy": {
Expand Down Expand Up @@ -1751,7 +1751,6 @@
"addons": "Add-ons",
"administration": "Administration",
"administrationClasses": "Klassen",
"administrationClassesNew": "Klassen (neu)",
"administrationCourses": "Kurse"
}
},
Expand Down Expand Up @@ -3184,7 +3183,8 @@
"geoGebraWorksheet": "GeoGebra Arbeitsblatt",
"material": "Lern-Material",
"neXboard": "neXboard",
"text": "Text"
"text": "Text",
"h5p": "H5P"
},
"input": {
"brainstormAboutXYZ": "Brainstorming zum Thema XYZ",
Expand Down Expand Up @@ -3225,5 +3225,10 @@
"text": {
"nextcloudLink": "Wir arbeiten an einem neuen Dateibereich. Dort können ab jetzt alle <b>neuen Dateien</b> gespeichert und verwaltet werden (Dateibereich öffnen). Alle Team-Mitglieder haben automatisch Zugriff auf die dort gespeicherten Dateien. Alle bereits <b>bestehenden Dateien</b> in der {{title}} sind weiterhin hier verfügbar."
}
},
"h5p": {
"text": {
"createAfterFirstSave": "H5P Inhalte können erst nach dem ersten Speichern erstellt werden."
}
}
}
Loading

0 comments on commit 25ed3e2

Please sign in to comment.