diff --git a/src/pages/assignments/[id].tsx b/src/pages/assignments/[id].tsx
index 07e2f010..712a02e9 100644
--- a/src/pages/assignments/[id].tsx
+++ b/src/pages/assignments/[id].tsx
@@ -52,8 +52,7 @@ export const getServerSideProps = withIronSessionSsr(async ({req, res, params})
const entity = await getEntityWithRoles(assignment.entity || "")
if (!entity) return redirect("/assignments")
- if (!doesEntityAllow(user, entity, 'view_assignments') && !["admin", "developer"].includes(user.type))
- return redirect("/assignments")
+ if (!doesEntityAllow(user, entity, 'view_assignments')) return redirect("/assignments")
const users = await (checkAccess(user, ["developer", "admin"]) ? getUsers() : getEntityUsers(entity.id));
@@ -296,6 +295,12 @@ export default function AssignmentView({user, users, entity, assignment}: Props)
return false;
};
+ const copyLink = async () => {
+ const origin = window.location.origin
+ await navigator.clipboard.writeText(`${origin}/exam?assignment=${assignment.id}`)
+ toast.success("The URL to the assignment has been copied to your clipboard!")
+ }
+
return (
<>
@@ -388,6 +393,9 @@ export default function AssignmentView({user, users, entity, assignment}: Props)
+
{assignment &&
(assignment.results.length === assignment.assignees.length || moment().isAfter(moment(assignment.endDate))) && (
+
+
+ {['student', 'teacher', 'corporate'].map((type) => (
+
+ ))}
+
diff --git a/src/pages/classrooms/create.tsx b/src/pages/classrooms/create.tsx
index c62682e8..b0192c08 100644
--- a/src/pages/classrooms/create.tsx
+++ b/src/pages/classrooms/create.tsx
@@ -12,7 +12,7 @@ import {USER_TYPE_LABELS} from "@/resources/user";
import {filterBy, mapBy, redirect, serialize} from "@/utils";
import {getEntities, getEntitiesWithRoles} from "@/utils/entities.be";
import {shouldRedirectHome} from "@/utils/navigation.disabled";
-import {getUserName} from "@/utils/users";
+import {getUserName, isAdmin} from "@/utils/users";
import {getEntitiesUsers, getLinkedUsers} from "@/utils/users.be";
import axios from "axios";
import clsx from "clsx";
@@ -22,11 +22,12 @@ import Head from "next/head";
import Link from "next/link";
import {useRouter} from "next/router";
import {Divider} from "primereact/divider";
-import {useMemo, useState} from "react";
+import {useEffect, useMemo, useState} from "react";
import {BsCheck, BsChevronLeft, BsClockFill, BsEnvelopeFill, BsStopwatchFill} from "react-icons/bs";
import {toast, ToastContainer} from "react-toastify";
import { requestUser } from "@/utils/api";
import { findAllowedEntities } from "@/utils/permissions";
+import { capitalize } from "lodash";
export const getServerSideProps = withIronSessionSsr(async ({req, res}) => {
const user = await requestUser(req, res)
@@ -34,8 +35,8 @@ export const getServerSideProps = withIronSessionSsr(async ({req, res}) => {
if (shouldRedirectHome(user)) return redirect("/")
- const users = await getEntitiesUsers(mapBy(user.entities, 'id'))
- const entities = await getEntitiesWithRoles(mapBy(user.entities, "id"));
+ const entities = await getEntitiesWithRoles(isAdmin(user) ? undefined : mapBy(user.entities, "id"));
+ const users = await getEntitiesUsers(mapBy(entities, 'id'))
const allowedEntities = findAllowedEntities(user, entities, "create_classroom")
return {
@@ -57,11 +58,16 @@ export default function Home({user, users, entities}: Props) {
const entityUsers = useMemo(() => !entity ? users : users.filter(u => mapBy(u.entities, 'id').includes(entity)), [entity, users])
- const {rows, renderSearch} = useListSearch([["name"], ["corporateInformation", "companyInformation", "name"]], entityUsers);
+ const {rows, renderSearch} = useListSearch(
+ [["name"], ["type"], ["corporateInformation", "companyInformation", "name"]], entityUsers
+ );
+
const {items, renderMinimal} = usePagination(rows, 16);
const router = useRouter();
+ useEffect(() => setSelectedUsers([]), [entity])
+
const createGroup = () => {
if (!name.trim()) return;
if (!entity) return;
@@ -140,6 +146,31 @@ export default function Home({user, users, entities}: Props) {
{renderSearch()}
{renderMinimal()}
+
+ {['student', 'teacher', 'corporate'].map((type) => (
+
+ ))}
+
diff --git a/src/pages/classrooms/index.tsx b/src/pages/classrooms/index.tsx
index a30561bf..657c49df 100644
--- a/src/pages/classrooms/index.tsx
+++ b/src/pages/classrooms/index.tsx
@@ -6,7 +6,7 @@ import {ToastContainer} from "react-toastify";
import Layout from "@/components/High/Layout";
import {GroupWithUsers, User} from "@/interfaces/user";
import {shouldRedirectHome} from "@/utils/navigation.disabled";
-import {getUserName} from "@/utils/users";
+import {getUserName, isAdmin} from "@/utils/users";
import {convertToUsers, getGroupsForEntities} from "@/utils/groups.be";
import {getSpecificUsers} from "@/utils/users.be";
import Link from "next/link";
@@ -28,7 +28,7 @@ export const getServerSideProps = withIronSessionSsr(async ({req, res}) => {
if (shouldRedirectHome(user)) return redirect("/")
const entityIDS = mapBy(user.entities, "id");
- const entities = await getEntitiesWithRoles(entityIDS)
+ const entities = await getEntitiesWithRoles(isAdmin(user) ? undefined : entityIDS)
const allowedEntities = findAllowedEntities(user, entities, "view_classrooms")
const groups = await getGroupsForEntities(mapBy(allowedEntities, 'id'));
diff --git a/src/utils/users.ts b/src/utils/users.ts
index 89b1353b..dae4fd80 100644
--- a/src/utils/users.ts
+++ b/src/utils/users.ts
@@ -44,3 +44,5 @@ export const getUserName = (user?: User) => {
if (user.type === "corporate" || user.type === "mastercorporate") return user.corporateInformation?.companyInformation?.name || user.name;
return user.name;
};
+
+export const isAdmin = (user: User) => ["admin", "developer"].includes(user.type)