3992 Commits

Author SHA1 Message Date
233f5329af Fix supervisor gets phase 2 review request deadline hardcoded to 2020-03-08 before any reviewer is assigned. ()
Fixes .

**How to test:**

1. Switch user to supervisor 'Elsabet Employee <elsabet@example.com>', she has one project to supervise: 'A bachelor thesis'.
2. Click 'Phase 2 review', and fill the form 'Rough draft approval', click button 'Request review'.
3. The next view shows the status of the review request. Since there is no reviewer assigned, the row "Deadline: ..." no longer is visible.
4. Switch user to admin, edit project 'A bachelor thesis', assign a reviewer (like 'Eric Employee') to the project.
5. Switch user back to 'Elsabet Employee', click Phase 2 review again. The deadline now shows with correct date.

Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Reviewed-on: 
Reviewed-by: Andreas Svanberg <andreass@dsv.su.se>
Co-authored-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-committed-by: Tom Zhao <tom.zhao@dsv.su.se>
2025-05-09 13:21:27 +02:00
e34f231e92 Show supervisors the date they submitted the thesis for examination ()
Fixes 

## How to test
1. Go to https://scipro-supervisor-submit-to-examiner-date.branch.dsv.su.se
2. Log in as `einstein@example.com`
3. Open the project
4. See Galileo's date on the overview
5. Go to finishing up tab and see his date there as well
6. Go to Newtons tab and submit (it will stay in the unsubmitted view due to mocked APIs with fixed data)
7. Go to overview
8. See that Newtons submitted date is correctly shown as the moment you submitted

## Mocked APIs
This pull request will in addition to fixing  also set up mocked APIs for the integrations with grading service and Daisy. To use those mocked APIs remove any outside configuration (in Tomcat or otherwise) for `service.grading.url` and `daisy.api.{url,username,password}`.

To add new data to the mocked APIs see the YAML files in the `mock-api` directory. See [APImposter](https://gitea.dsv.su.se/DMC/apimposter) for more technical details how it works.

Reviewed-on: 
Reviewed-by: Tom Zhao <tom.zhao@dsv.su.se>
2025-05-09 12:49:16 +02:00
76138ef437 Supervisor calendar overview ()
Fixes 

Basic structure to render and show a calendar for the supervisors. Currently shows only first meeting events.

 ## How to test
1) Log in as salieri@example.com
2) Click on the tab 'Schedule Overview'
3) Verify that there are 2 events in the calendar.
     - One event has a clickable text, the other does not.
     - The one that has a clickable text is associated with a project.
     - The one without a clickable text is does not have a project yet.
4) Click on the clickable event to go that events project page.
5) Select 'First Meeting' tab
6) Set a new date and time for the first meeting.
7) Click on 'Schedule Overview' and verify.

After testing you can reset the state of the branch by going [here](https://gitea.dsv.su.se/DMC/scipro/actions/runs/672/jobs/0) and rerun all jobs a button top right.

Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Reviewed-on: 
Reviewed-by: Andreas Svanberg <andreass@dsv.su.se>
Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Co-committed-by: Nico Athanassiadis <nico@dsv.su.se>
2025-05-08 12:34:04 +02:00
5deff47108 Do not factor in deleted posts when counting unread threads ()
Fixes 

## How to test
1. Log in as `eric@example.com`
2. Create a thread in the forum
3. Log in as `stina@example.com`
4. Post a reply
5. Log in as `eric@example.com`
6. See that the project is flagged in the overview for having unread threads
7. Log in as `stina@example.com`
8. Delete the reply
9. Log in as `eric@example.com`
10. Project is no longer flagged as having unread threads

Reviewed-on: 
Reviewed-by: Tom Zhao <tom.zhao@dsv.su.se>
2025-05-07 09:33:35 +02:00
ed61c18a62 Allow deletion of entire forum threads ()
Only threads with no replies can be deleted. When a thread is deleted a notification is sent to the relevant parties.

Fixes 

## How to test
1. Log in as `eric@example.com` (supervisor) or as `sture@example.com` (author)
2. Open the forum in project "Putting the it in supervising"
3. Create a new thread
4. Delete the thread
5. Create a second thread
6. Post some replies as the different users
7. See that the thread (initial post) can't be deleted
8. Delete the replies
9. Delete the thread

Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
2025-05-06 11:59:55 +02:00
3477c8f0c5 Add foreign key constraint from table 'idea_student' to table 'program' ()
Fixes 

Reviewed-on: 
Reviewed-by: Andreas Svanberg <andreass@dsv.su.se>
Co-authored-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-committed-by: Tom Zhao <tom.zhao@dsv.su.se>
2025-04-25 10:59:23 +02:00
7504c267c5 Delete forum replies ()
Allows deleting (your own) forum replies.

Fixes 

## How to test

1. Log in as `eric@example.com` (supervisor) or as `sture@example.com` (author)
2. Open the forum in project "Putting the it in supervising"
3. Create a new thread
4. Post some replies as the different users
5. Delete the replies

Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-03-18 08:34:21 +01:00
6b77142a06 New Daisy API XSD ()
Allows a way to solve 

Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-03-18 07:33:38 +01:00
9ede262e7b Fix crash due to JSON parsing on "Finishing up" tab ()
The seemingly unused library `jersey-hk2` that got removed in  is used, if present, internally by the Jersey client to find and register Jackson modules (such as those that provide `java.time` support).

## How to test
1. Turn on the `DAISY-INTEGRATION` Maven profile (alongside `DEV`)
2. Configure some projects and their authors to have a Daisy connection
3. Log in as the supervisor
4. Go to the "Finishing up" tab in the project
5. See that it works compared to `develop` branch

Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-03-11 08:49:16 +01:00
de18f200a7 Make exemptions for project type apply to partner as well ()
Read  for context first

When authors select supervisor ideas during an open application period they are only allowed to select ideas corresponding to their degree type classification. This limitation can be lifted by giving the author an exemption for "Project type limitation" on the corresponding application period. However, this limitation is still enforced for any potential partner *even if* the have been given the same exemption. This change makes it so the exemption applies to any selected partner as well and not just the author selecting the supervisor idea.

## How to test
1. Log in as `oskar@example.com`
2. Go to "Ideas / My ideas" page
3. Click "Select from available ideas" on the application period "Supervisor ideas"
4. Open the one available idea
5. Try to select it with "Johan Student" as a partner
6. Log in as admin
7. Go to "Match / Application periods"
8. Click "Edit exemptions" on the "Supervisor ideas" period
9. Give "Johan Student" an exemption to "Project type limitation"
10. Repeat steps 1-5

Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-03-10 07:17:28 +01:00
5c5f03bd78 Let Spring Boot manage dependency versions ()
Since SciPro is now a Spring Boot-based application it is counter-productive to manage our own dependency versions.
* They could conflict with what Spring Boot assumes
* All libraries that are managed by Spring Boot are tested to work together

QueryDSL and JPA version properties are left in because they're needed for annotation processors (they can't be dependency managed).

Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-03-05 11:53:10 +01:00
d008bec815 Allow supervisors to request improvements from final seminar opponents ()
Fixes 

## How to test
1. (Optional) Log in as `sid@example.com` and submit an opposition report
   1. Go to the tab "Opposition & Active participation"
   2. Open the opposition "Putting the it in supervising" on the right
   3. Submit the report
2. Log in as `eric@example.com`
3. Go to the final seminar in the "Putting the it in supervising" project (or follow the notification if you did step 1)
4. Request improvements
5. Log in as `sid@example.com`
6. Follow the notification to submit the new opposition report

Click the "Re-run all jobs" button (top right) on https://gitea.dsv.su.se/DMC/scipro/actions/runs/457 to reset the database. It takes a few minutes.

Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-03-05 10:05:37 +01:00
a76b317b1c Improve test data creation ()
Currently there is only one class used to add test data; [`DataInitializer`](b9f7dd5a49/core/src/main/java/se/su/dsv/scipro/DataInitializer.java). That class is already very large and causes a lot of merge conflicts when multiple changes are in the pipeline as noted by .

This change makes it possible to have multiple classes adding test data so that each change adds its own class and thus there are no conflicts. It also has the benefit of making each class smaller and more self-contained for testing a specific feature.

Some additional infrastructure was added in the form of the `BaseData` and `Factory` (naming improvements notwithstanding) interfaces to help each class add its own test data and re-use common data.

Finally all test data related classes have been moved to their own module so they can be properly excluded when building for production but are included by default while developing.

Fixes 

## Future work
* Add a mechanism to work with date and time.
    Many processes (and therefore service method implementations) rely on the time between certain events. For example a final seminar must be scheduled a set amount of days in advance. In the ideal world, the test data is populated using these service methods to more accurately represent an achievable real world state. Therefore there must be a way to manipulate time when adding test data.
* Add more methods to the `Factory` interface as we discover more common steps that many populators must take.
* Add more base data available through the `BaseData` interface as we discover more common data that many populators need
    Care must be taken that this data is final and useful in its base state since populators will rely on that state.

Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-03-03 12:38:35 +01:00
7f9e72484a Remove unused javax.inject and jersey-hk2 dependencies ()
Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-03-03 07:59:14 +01:00
a71eeb5e2c Fix crash when editing an application period ()
Fixes 

## How to test
1. Log in as admin
2. Go to "Match / Application periods"
3. Click the edit icon (6th column)
4. Click "Save"

Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-03-03 07:48:46 +01:00
e71aa8120c Grading boundaries are wrong in supervisor view ()
They display old hard-coded text that does not reflect the current template.

Fixes 

Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Reviewed-on: 
Reviewed-by: Andreas Svanberg <andreass@dsv.su.se>
Co-authored-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-committed-by: Tom Zhao <tom.zhao@dsv.su.se>
2025-02-21 14:06:29 +01:00
03570fc6db Improve supervisor change integration ()
Previously when we wanted to change supervisor we had to make two calls against the daisy api.
A DELETE and a POST, this was brittle because if one of the calls failed we didn't have a good way of handling that.
This could leave the application in a state where a project could end up with 2 different supervisors.
This caused side effects and forced us to manually go into the databases and clean up the errors.

Now the daisy api is updated and we only need to do a POST to change the supervisor. See further documentation here
[POST /thesis/{id}/contributor](https://apitest.dsv.su.se/resource_Theses.html#resource_Theses_postContributor_id_projectParticipant_POST)

### IMPORTANT: Release needs to be synced with Daisy API

Reviewed-on: 
Reviewed-by: Andreas Svanberg <andreass@dsv.su.se>
Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Co-committed-by: Nico Athanassiadis <nico@dsv.su.se>
2025-02-21 00:27:22 +01:00
399d8f5275 Assign supervisor to student ideas no matter if target (goal) is reached ()
Fixes 

Reviewed-on: 
Reviewed-by: Andreas Svanberg <andreass@dsv.su.se>
Co-authored-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-committed-by: Tom Zhao <tom.zhao@dsv.su.se>
2025-02-18 09:59:23 +01:00
b9f7dd5a49 Update supervisor's idea table immediately upon scheduling a first meeting ()
Before, after scheduling a first meeting, they had to refresh the entire page to show the information in the table.

Fixes 

Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
2025-02-13 09:59:33 +01:00
304d0431c1 Deadline visible in "Rough draft approval" page ()
Previously deadline was only visible at the Reviewer start page, tab 'Rough draft approvals'.

Now the deadline is also shown when you go to the detail page of a rough draft.

Fixes issue 

Reviewed-on: 
Reviewed-by: Andreas Svanberg <andreass@dsv.su.se>
Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Co-committed-by: Nico Athanassiadis <nico@dsv.su.se>
2025-02-12 11:07:53 +01:00
5439d77d73 Require authors to fill in background, literature, problem, method, and interests when submitting ideas ()
Require authors to fill in background, literature, method, problem, and interests when submitting an idea.

Fixes 

## How to test
1. Navigate to https://scipro-student-idea-form-required-fields.branch.dsv.su.se/
2. Log in as `stig@example.com`
3. Go to "Ideas" / "My ideas"
4. Attempt to submit an idea without either of background, literature, method, problem, or interests

Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-01-17 09:45:27 +01:00
2784bca8f6 Improve XJC-binding (Issue 73) ()
Fixes 

In daisy.xsd there are two datatypes, one is called STATUS and another one is called Status. Since Windows file system is case insensitive, file STATUS.java and Status.java are considered as same name. This makes build on Windows impossible.

Solution: in XJC binding file, rename Status.java to Status2.java (the Status2.java belongs to Examination is endpoint/resource which is not used by Scipro).

Other small improvments:

- package name 'se.su.dsv.scipro.daisyExternal' is renamed to 'se.su.dsv.scipro.daisyexternal'.
- single import statements are applied.

Reviewed-on: 
Reviewed-by: Andreas Svanberg <andreass@dsv.su.se>
Co-authored-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-committed-by: Tom Zhao <tom.zhao@dsv.su.se>
2025-01-16 13:55:38 +01:00
e0e84df720 Reset the failure flag in workers on successful runs. ()
Reviewed-on: 
Reviewed-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-01-14 14:50:31 +01:00
b99c458160 Allow a single author to start multiple ideas of different types ()
Reviewed-on: 
Reviewed-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2025-01-13 12:17:53 +01:00
adf45414d5 Forum Message UI Improvement (Thesis Board ) ()
Fix 

**Requirements**

On supervisor's start page, a overview of the projects being supervised is shown as a table. One of columns is a flag and on clicking action the browser is redirected to forum page of that project.

Two improvements were asked:

1. If there is unread messages, show a tooltip if mouse is placed over the flag.
2. A number is shown to indicate number of unread messages.

**How to test**
1. Go to https://scipro-3470-forum-msg-ui-improvement.branch.dsv.su.se/
2. Log in as `eric@example.com`
3. Go to the project overview
4. Write something in the forum
5. Mark as unread (click the flag)
6. Go back to overview

Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Reviewed-on: 
Reviewed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-12-19 15:28:23 +01:00
69949bc688 Drop unused table grade (Thesis Leankit ) ()
Fix 

Reviewed-on: 
Reviewed-by: Andreas Svanberg <andreass@dsv.su.se>
Co-authored-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-committed-by: Tom Zhao <tom.zhao@dsv.su.se>
2024-12-19 12:42:16 +01:00
25117c8187 Switch authentication to OAuth 2 ()
This is one requirement in bringing  to reality.

Currently the way to log in to SciPro is by having a locally modified `web.xml` that emulates being authenticated via single sign-on (SSO). This method can not work on an automatically deployed test server. It is also not possible to have real SSO configured for the test servers due to their dynamic nature and that they are given a new hostname each time. Our current SSO solution requires there to be certificate issued to specific hostnames. Even if it were possible to get SSO set up how would the username received from SSO match to test data? We would have to have real usernames in our test data which is not desirable.

To solve both of the problems described above - requiring a locally modified version of a git tracked file and needing an authentication mechanism that works for dynamic test servers - a change of the authentication mechanism from Tomcat controlled SSO to application controlled OAuth 2 is proposed. There is already an OAuth 2 authorization server running in production which itself is authenticates users via SSO that will be used in production and for the permanent test servers. In development and for the dynamic test servers a local authorization server running in Docker is provided.

For "regular" users there will be no noticeable change, they will be prompted to log in via SSO and then they get access to the system. For users with high developer access they will, on the permanent test servers, be prompted to "issue token". On that page they can use the top form to authenticate as themselves based on their SSO authentication, or use the bottom form to issue a completely custom authentication and log in as whatever username they deem necessary. The temporary test servers and during local development will work similarly with the only difference being that there is no SSO log in first and you will be prompted to issue a token immediately. The default authentication (top form) will be a local sys-admin level user.

## How to test
1. Start the local OAuth 2 authorization server with `docker compose up`
2. Start SciPro
3. Attempt to log in

Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
2024-12-16 16:55:49 +01:00
a1d3d0be8d Fix certain milestones not getting activated ()
There was a missing bean definition that was responsible for marking certain milestones based on system events.

Fixes 

## How to test
1. Log in as an author
2. Go to "Peer" tab within a project
3. Request a peer review
4. [If needed] Switch to another author and request another review
5. Perform a peer review
6. See that the peer reviewer completed milestone (first or second depending) is marked as completed

Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-12-16 14:20:41 +01:00
5fbf4ec0c0 Switch from an in-memory HSQLDB to MariaDB during integration tests ()
Currently our integration tests run against an in-memory HSQLDB whose schema is created by Hibernate based on our JPA annotations. This has differences from the MariaDB schema created by our Flyway migrations. It is also a completely different database engine so who knows what other differences there are.

This proposal changes this so that it will instead use [Testcontainers](https://testcontainers.com/) to spin up a MariaDB Docker container that then has the Flyway migrations ran before being used in tests.

Pros:
 * Same database engine in tests as production
 * Flyway migrations are tested
 * Database schema is the same in tests as production (`NOT NULL` constraints, foreign keys, and so on)

Cons:
 * *Much* slower test executions and they will get slower over time as more migrations are added

Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
2024-12-16 13:55:33 +01:00
c6bd17d9ad Fix grade calculator being serialized ()
The new calculator that's based on templates has a reference to the @Entity for the template which should not be serialized.

Fixes 

## How to test/replicate
1. Log in as a supervisor
1. Open a project that's new enough to use a grading report template with grade limits
1. Go to the "Finishing up" tab
1. Go to the sub-tab for an individual author

Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-12-16 11:24:33 +01:00
1554d4bc27 Enforce code formatting via Prettier ()
Fixes  by introducing [Prettier](https://prettier.io/).

Prettier is an extremely opinionated formatter. It will reformat every single line according to its style. There are virtually no configuration options so there can be no discussion about formatting rules.

There are two parameters that are configurable; indent length and line length. Indent length has been set to 4 because that's the Java standard.

Line length defaults to 80 but has been increased to 100. The rational for this is that Prettier was created for JavaScript which is much less verbose than Java. Not only does every Java line start with 8 spaces of indentation vs. JavaScripts 0 or 2, it also has types wile JavaScript does not and uses `const` for variable declarations. Compare the two below examples as well as an actual example from the source code that is too long for the default 80 characters. I have no problem dropping down to the default 80 if that is preferred I just felt that with the average length of a line of Java code being pretty long, excessive wrapping would reduce readability.

```javascript
  const attributes = {
    ...
  };
```
```java
        Map<String, String> attributes = Map.of(
            ...
        );
```

Or the following real code which is 97 characters long.
```java
        Set<ProjectParticipant> contributors = daisyAPI.getContributors(project.getIdentifier());
```

Reviewed-on: 
Reviewed-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-12-02 14:17:59 +01:00
03ad12f435 Do not add duplicate supervisors in Daisy ()
Daisy's API does not support the function "change supervisor" and only what comes down to SQL INSERT and DELETE on a specific table. If the removal of the previous supervisor(s) failed the new one was still added. This change makes it so that if the removal of any (there is no limit in the API) current supervisor fails it will not attempt to add the new supervisor.

Fixes 

## How to test
1. Configure the Daisy integration in SciPro
2. Enable it (Maven profile)
3. The only currently known way to make removing a supervisor fail is to use a project where they've sent the thesis to the examiner
4. Find one such project in the test server for Daisy (or send one for examination from SciPro)
5. Change the supervisor of the project in SciPro
6. Run the job "Export projects to daisy" (System / Maintenance)
7. See that it logs the failure and that no duplicate supervisors were added to Daisy

Reviewed-on: 
Reviewed-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-12-02 11:28:37 +01:00
1180a7dbfd Fix crashes in the text matching job ()
With the migration to Spring it is much stricter in requiring @Transactional for all methods that write to the database.

Fixes 

Co-authored-by: Tom Zhao <tom.zhao@dsv.su.se>
Reviewed-on: 
Reviewed-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-12-02 10:58:00 +01:00
a2330ce2d5 Squash and fix migrations so they run against an empty schema ()
This is one requirement in bringing  to reality.

Currently there are some 450 migration scripts that have been added over the past 11 years. Unfortunately some of these migration scripts have some defects. Either from the fact that they are very old and from another database engine (MySQL vs currently MariaDB), make assumptions about the database name, or its contents. Due to these defects trying to bring an empty schema up-to-date by running all migrations will fail with [372](ff4c5b58b4/core/src/main/resources/db/migration/V372__update_and_insert_grading_criterion_template_master.sql) being the main blocker.

If it is not possible to bring an empty schema up-to-date it is a major hindrance to the plan of automatically deploying test servers for every pull request (). These changes makes it possible to bring an empty schema up to the latest version by squashing all migration scripts to a single new baseline with the necessary fixes to work on an empty schema.

There is a downside with the way it accomplishes this, it requires any non-empty schema to already be at version [392.2](ff4c5b58b4/core/src/main/resources/db/migration/V392_2__reflection_comment_by_supervisor.sql). [Flyway](https://www.red-gate.com/products/flyway/), the product we use for database migrations, does not support new baseline scripts in the free version, only in the paid edition. To get around this, Flyway is tricked into thinking the database has never used Flyway before by changing which database table stores the information about applied migrations. This is the reason the database has to be at the latest (392.2) version before deploying the new version of SciPro that include this change, because Flyway will have no way to see which of the old migrations have been applied.

An alternative would be to fix the old migrations so they would work on an empty schema. However, since every migration script is checksummed to see that the applied version is the correct one every database would have to be ["repaired"](https://documentation.red-gate.com/fd/repair-184127461.html) to update its checksums. This choice was not taken for two reasons:

 * It would require manual work in the database before deploying the new version of SciPro with the fixed migrations, similar to the requirement to first deploy the version of SciPro that includes the 392.2 migration.
 * Running all the migrations taken a lot of time, especially the new [391](ff4c5b58b4/core/src/main/resources/db/migration/V391__harmonize_table_attribute_name.sql). Squashing all migrations avoid this and makes spinning up new databases very quick

## How to test with an existing schema
1. Deploy commit [ff4c5b58b40db5fcb7754c259c3854194668c1e1](ff4c5b58b4) (current `develop` branch as of 2024-11-22)
2. Start the system to apply migrations up to and including 392.2
3. Switch to this branch
4. Start the system and see that the database will be considered baselined at version 2
5. Click around in the system and see that it still works

## How to test with an empty schema
1. Empty your database schema
2. Switch to this branch
3. Deploy the system
4. See that it migrates the schema and creates all the necessary tables
5. Log in as `admin@example.com` that is created by the `DataInitializer`

Reviewed-on: 
Reviewed-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-12-02 10:31:20 +01:00
aabb2e9d10 Fix saving the textboxes students fill in when submitting ideas ()
Background, literature, problem, method, and interests were not being saved due to explicitly having been marked as "do not save".

Multiple OTRS tickets have been filed for this problem; [391725](https://otrs.dsv.su.se/otrs/index.pl?Action=AgentTicketZoom;TicketID=391725#1422495), [391732](https://otrs.dsv.su.se/otrs/index.pl?Action=AgentTicketZoom;TicketID=391732#1422521), [391738](https://otrs.dsv.su.se/otrs/index.pl?Action=AgentTicketZoom;TicketID=391738#1422537), and [391757](https://otrs.dsv.su.se/otrs/index.pl?Action=AgentTicketZoom;TicketID=391757#1422590).

## How to test
1. Create an open application period under "Admin" / "Match" / "Application periods" (open meaning start is before today, end is after)
2. Log in as author
3. Submit an idea in the newly created period
4. See that neither of background, literature, problem, method, or interests textboxes are saved
5. Switch to this branch
6. Submit/update the idea
7. See that everything is saved

Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-11-25 11:24:08 +01:00
ff4c5b58b4 Allow changes to the reflection to be made after it's been submitted ()
Replaces 

Fixes card 3213 and 3412

There are minimum requirements for the reflection document submitted by authors at the end of the thesis process. Before now there was no way to handle the case when the reflection did not meet these minimum requirements.

This change makes it possible in two ways;
 1. The supervisor can request improvements to be made requiring the author to re-submit a new reflection inside SciPro
 2. The supervisor can directly edit the reflection themselves if it has been submitted out-of-band or for any other reason

Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
2024-11-21 19:20:47 +01:00
73307096c3 Fix some remaining issues from the Spring migration ()
A few missing `@Bean` definitions were discovered.

Spring also has a much stricter requirement about requiring `@Transactional` for every database change.

## How to test `@Bean GroupFacadeImpl`
1. Log in as a supervisor
2. Go to "My groups" and create a group
3. Go back to "My groups" and try to open the group

## How to test `@Bean IdeaFacadae`
1. Create an application period that is open ("Admin" / "Match" / "Application periods")
2. Log in as an author
3. Go to "Ideas" / "My ideas"
4. Click "Select from available ideas" in the period created in step 1

## How to test missing `@Transactional`
1. Log in as a user with notifications (or generate some by for example writing in the forum)
2. Go to "Notifications" in the top right
3. Click on any notification subject to navigate to it

## How to test crash while trying to schedule final seminar
1. Log in as a supervisor
2. Open a project and attempt to schedule a final seminar

## How to test crash while trying to upload final thesis as supervisor
1. Log in as supervisor
2. Note down the supervisors username
3. Open a project that has had a final seminar
4. Go to the "Finishing up" tab
5. Submit the supervisors username as the custom principal
6. Try to upload a final thesis

## How to test removal of approved final thesis
1. Log in as supervisor
2. Note down the supervisors username
3. Open a project that has had a final seminar
4. Go to the "Finishing up" tab
5. Submit the supervisors username as the custom principal
6. Upload a final thesis
7. Approve the final thesis
8. Remove the approval

## How to test crash while trying to schedule first meeting
1. Log in as supervisor
2. Open a project
3. Go to the "First meeting tab"
4. Try to submit

## How to test crash while trying to unselect an idea as an author
1. Create an application period that is open ("Admin" / "Match" / "Application periods")
2. Log in as an author
3. Go to "Ideas" / "My ideas"
4. Click "Select from available ideas" in the period created in step 1
5. Select any available supervisor idea
6. Go back to "Ideas" / "My ideas"
7. Open the selected idea
8. Hit unselect at the bottom

## How to test crash while trying to toggle milestone
1. Log in as supervisor
2. Open any project
3. Go to "Milestones" tab
4. Attempt to toggle both individual and project milestones

## How to test crash while trying to get user's note
1. Find a user without a row in the `note` table
2. Log in as that user
3. Click "My notes" in the top right

Reviewed-on: 
Reviewed-by: Nico Athanassiadis <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-11-20 12:56:21 +01:00
d89417ceea Fix intermittent sorting of criterion to actual order ()
When you tried to edit a grading template in  "Project management" -> "Grading Templates" the criterion could be shown in an order not reflecting the sortOrder of the criterion.
The reason was that we only got the arbitrary order depending on the insertion order in the database.

Changed the Collection to a List, it is now an ArrayList. Also added @OrderBy("sortOrder ASC") to actually sort by the order of the criterion thus ensuring visual order is intact.

Co-authored-by: Tom Zhao <tom.zhao@dsv.su.se>
Reviewed-on: 
Reviewed-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-authored-by: Nico Athanassiadis <nico@dsv.su.se>
Co-committed-by: Nico Athanassiadis <nico@dsv.su.se>
2024-11-14 12:39:41 +01:00
cfe61a9ed8 task/3382: Harmonize database names as snake_case ()
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Reviewed-on: 
Reviewed-by: ansv7779 <andreass@dsv.su.se>
Co-authored-by: Tom Zhao <tom.zhao@dsv.su.se>
Co-committed-by: Tom Zhao <tom.zhao@dsv.su.se>
2024-11-12 13:33:43 +01:00
8e5c9f5687 Allow longer final thesis titles ()
The titles entered are most often the same as the project title. The project title however has no length limit. When such a project tries to upload their final thesis the system will crash because the accepted long project title is rejected as the final thesis title.

This change removes the length limit on final thesis titles to bring them to parity with the project title.

See OTRS ticket [202411011026](https://otrs.dsv.su.se/otrs/index.pl?Action=AgentTicketZoom;TicketID=389771#1413199)

This change has already been done manually in the production system to resolve the above ticket.

## How to test
Submit a final thesis using a title longer than 255 characters and see that is accepted.

Reviewed-on: 
Reviewed-by: niat8586 <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-11-11 11:17:15 +01:00
ccac2c1cf8 Enable creating an API using Spring Web ()
SciPro will have to provide information to the upcoming student portal. Wicket does not have the ability to serve JSON in the usual REST way and is only able to serve HTML. The most common way to write JSON over HTTP API:s in Java is using Spring Web, but currently SciPro uses Guice for dependency injection rather than Spring which makes adding Spring Web a bit more tricky.

This pull request attempts to solve this by doing the following;
* Replacing Guice with Spring
* Adding a new API module that uses Spring Web
* Turning the entire system into a standard Spring Boot web application

The hope is that these changes will bring the following benefits;
* Harmonize our web stack (Daisy uses Spring and the new lecture hall system is full Spring Boot)
* Enable easy development of a traditional JSON over HTTP API
* Ease future recruitment by using the most common Java web frameworks

Reviewed-on: 
Reviewed-by: niat8586 <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-11-06 11:23:28 +01:00
e18af72336 Allows admins to manage grading report templates ()
# Manage grading report templates
Every once in a while the criteria used to asses theses and individual performance changes. When this happens the criteria in SciPro needs to be updated.

Up until now there has not been a GUI to do this and it has instead been done manually, sometimes using database migrations. It was also time-sensitive since there was only ever one template (per project type) in SciPro such that the change had to happen at the correct time when the new template was to take effect.

There was also the question of how to calculate the grade the author should receive based on the point sum from the supervisors assessment of all the criteria and these limits were hard-coded in the system.

These changes address all of the above;
 * There can be multiple templates per type.
 * Each template has a period during which it is are current.
 * Each template has defined the conversion of point sums to grades.

The periods can not overlap and a template remains current from its start date until another template's start date is reached. There can not be two templates (within a project type) that become valid on the same date.

## How to test
 1. Log in as administrator
 2. Go to "Project management"
 3. Go to "Grading templates"
 4. Create/edit new templates
 5. View current template

Card 3482

Co-authored-by: niat8586 <nico@dsv.su.se>
Reviewed-on: 
Reviewed-by: niat8586 <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-10-30 10:05:22 +01:00
d8e4f0dd22 Stop confusing Spring Boot with copied classes
These classes were copied from Spring Data a long time ago. Their existence on the class path confuses Spring Boot into thinking we use Spring Data JPA which we do not.
2024-10-28 14:02:31 +01:00
949de4a260 Allow supervisors to write a note associated with their projects ()
There is a need among supervisors to maintain some work notes for each project. Where they are in the process, what students need to do, and other such things.

This PR gives the supervisors the ability to write a note for each project on their overview page.

Card 3399

Reviewed-on: 
Reviewed-by: niat8586 <nico@dsv.su.se>
2024-07-10 13:43:27 +02:00
4dc0ba32d0 Enable supervisors to get an overview of forum activity ()
Their project overview page now include a column indicating if any thread in that forum has an unread post and it also acts as a quick link directly to the forum.

Fixes 
Card 3399

Reviewed-on: 
Reviewed-by: niat8586 <nico@dsv.su.se>
Co-authored-by: Andreas Svanberg <andreass@dsv.su.se>
Co-committed-by: Andreas Svanberg <andreass@dsv.su.se>
2024-07-10 13:18:20 +02:00
663b92eb3b 3380 Specify information URL about the review process for supervisors
Administrators want to inform the supervisors how the reviewers are assigned and what dates are important during the thesis writing process.

They can now configure an information URL for each type of project under "Admin / System / Type settings" that is shown to the supervisors as they enter the review process.
2024-05-27 16:29:23 +02:00
0c06dbd6a3 3392 Multiple reviews on the same project should not fulfil multiple targets
Targets set by administrators are based on how many projects the reviewer gets assigned. If there are multiple reviews on a single project due to rejecting earlier versions the reviewer does not get more time.
2024-05-22 12:49:15 +02:00
58cd2003a7 3392 Refactoring 2024-05-22 12:38:57 +02:00
a79ee20cba 3392 Failing test 2024-05-22 12:35:50 +02:00
e8e8bf8a68 3376 Upgrade Hibernate 2024-05-07 12:23:48 +02:00