diff --git a/Gemfile.lock b/Gemfile.lock
index 1d45ee01..6b068262 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,7 @@
GEM
remote: https://rubygems.org/
specs:
- activesupport (7.0.4.2)
+ activesupport (7.0.7)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
@@ -14,7 +14,7 @@ GEM
coffee-script-source (1.11.1)
colorator (1.1.0)
commonmarker (0.23.8)
- concurrent-ruby (1.2.0)
+ concurrent-ruby (1.2.2)
dnsruby (1.61.9)
simpleidn (~> 0.1)
em-websocket (0.5.3)
@@ -96,7 +96,7 @@ GEM
typhoeus (~> 1.3)
yell (~> 2.0)
http_parser.rb (0.8.0)
- i18n (1.12.0)
+ i18n (1.14.1)
concurrent-ruby (~> 1.0)
jekyll (3.9.3)
addressable (~> 2.4)
@@ -220,7 +220,7 @@ GEM
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
- minitest (5.17.0)
+ minitest (5.19.0)
nokogiri (1.14.1)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
diff --git a/README.md b/README.md
index 11a77943..869b49c7 100644
--- a/README.md
+++ b/README.md
@@ -41,8 +41,8 @@ by running:
```
* _NOTE: During the install, it may hang up when installing the
- dependency ``nokogiri``. Don't worry: press enter and it should
- continue.
+ dependency ``nokogiri``. Don't worry: continue waiting. If it still is stalling
+ here, press enter and it should continue._
* _NOTE: If an error is thrown during the installation process you
diff --git a/_docs/developer/development_instructions/index.md b/_docs/developer/development_instructions/index.md
index 69e655e7..aad612c5 100644
--- a/_docs/developer/development_instructions/index.md
+++ b/_docs/developer/development_instructions/index.md
@@ -55,8 +55,9 @@ Please also see [Installation Version Notes](/sysadmin/installation/version_note
## Website and Bin Script Changes
* If you have only made minor or modest visual changes to website
- (e.g., the html, css, twig, or php files), or other files in the
- `site` folder, you can apply those changes by running this shortcut:
+ (e.g., the html, css, twig, or php files), other files in the `site`
+ folder, or translation files in the Localization repository, you can
+ apply those changes by running this shortcut:
```
submitty_install_site
@@ -124,9 +125,7 @@ be able to reload the website and see the update.
See also: [PhpStorm configuration instructions](/developer/getting_started/phpstorm)
----
-
-## Clearing Your Browser Cache
+### Clearing Your Browser Cache
* If the JavaScript files have changed and there are errors or you do not see the
@@ -162,6 +161,9 @@ include more significant Submitty source code changes, it will likely
be necessary to conduct a more complete update and reset re-set of all
of the Submitty source code.
+
+
+
* In these cases, run this shortcut in the vagrant terminal:
```
@@ -186,9 +188,12 @@ of the Submitty source code.
sudo /usr/local/submitty/.setup/INSTALL_SUBMITTY.sh clean
```
----
-## Autograding Development
+Note: The above commands will also apply any necessary system and
+database [Migrations](/developer/development_instructions/migrations).
+
+
+### Autograding Development
In addition to the `submitty_install` command above, if you modify an
autograding configuration, you'll probably need to:
@@ -197,7 +202,6 @@ autograding configuration, you'll probably need to:
* [Batch Regrade Homeworks](/instructor/batch_regrade_submissions) already submitted to those gradeables.
-
---
## System Clock Testing & Troubleshooting
@@ -264,7 +268,8 @@ these changes.
* If you've changed the script to create a new course
(`create_course.sh`), or the schema for the master database
(`submitty_db.sql`), or the schema for the course databases
- (`course_tables.sql`), we need to delete all courses, and recreate
+ (`course_tables.sql`), or you changed student/gradeable data
+ we need to delete all courses and recreate
the course databases, users, and sample submission uploads.
_NOTE: Make sure you are not be connected to any DBs (e.g., through
@@ -283,9 +288,12 @@ these changes.
missing the hundreds of sample student submissions present in the
full installation.
- See also: [Database Migrations](/developer/development_instructions/migrations)
+
+ NOTE: This command will also have to be run twice a year on July 1st and January 1st when the test semester will change from fall to spring or vice versa.
+ See also: [Sample Course Data](/developer/development_instructions/sample_data)
+
---
## Complete System Re-Installation
@@ -322,3 +330,21 @@ these changes.
also destroy the databases, and any grading configuration or grading
work that has been done._
+---
+
+## Virtual Machine Recovery using Snapshots
+
+In the event of a non-recoverable error while working on Submitty the last resort is to, perform a fresh `vagrant up`. However, this process can be time-consuming. To avoid such situations and save time, it is highly recommended to take a snapshot when you first set up your Vagrant environment by following the tutorial links provided below:
+
+* [Virtual Box](https://www.youtube.com/watch?v=Kl-Qc6N9znw)
+
+* [VMWare](https://www.youtube.com/watch?v=DQutP_-2j3g)
+
+* [Vagrant](https://developer.hashicorp.com/vagrant/docs/cli/snapshot)
+
+By taking a snapshot at this initial stage, you can later revert to this saved state if needed, ensuring a quick recovery. Once you have restored the snapshot, you can then proceed with the following steps:
+
+1. Launch the virtual machine using `vagrant up`.
+2. Access the virtual machine with `vagrant ssh`.
+3. Run `submitty_install` command to conduct a more complete update and reset of all of the Submitty source code.
+
diff --git a/_docs/developer/development_instructions/localization.md b/_docs/developer/development_instructions/localization.md
new file mode 100644
index 00000000..0c77e7e5
--- /dev/null
+++ b/_docs/developer/development_instructions/localization.md
@@ -0,0 +1,139 @@
+---
+title: Localization / Language Support
+category: Developer > Development Instructions
+redirect_from:
+ - /developer/migrations
+---
+
+
+The goals of localization or internationalization include the
+translation of the website into multiple languages, to increase the
+accessibility of Submitty to users in all locales or regions.
+
+To contribute to Submitty's localization and translation efforts,
+follow these steps to update Twig templated files and provide
+translations for various text elements on the website.
+
+---
+
+## Server Language Specification
+
+By default, all Submitty pages will display in English based on the
+`en_US` locale. To modify the server default setting, the system
+administrator should edit the
+`/usr/local/submitty/config/submitty.json` file and add this line, e.g.:
+
+```
+ "default_locale": "fr_FR",
+```
+
+to specify an alternate locale.
+See also [Php Locale class](https://www.php.net/manual/en/class.locale.php).
+
+---
+
+## Individual Language Specification
+
+Each individual user can specify their own preferred locale if they do
+not wish to use the server default. Navigate to "My Profile" and
+choose the desired language and region settings.
+
+![](/images/student/user_profile_specify_locale.png)
+
+The dropdown menu will include all locales for which any translation
+is available in the
+[Localization](https://github.com/Submitty/Localization/tree/main/lang)
+repository. Where translation to the requested language is
+incomplete, the `en_US` locale will be used.
+
+---
+
+## Prepare a Website Page for Translation
+
+Submitty uses the Twig template engine to manage html source code with
+Php. Checkout the [Submitty source
+code](https://github.com/Submitty/Submitty) and locate the specific
+`.twig` template file(s) associated with the webpage that you would
+like to update.
+
+
+Identify an untranslated English plain text string in the Twig source
+code, for example:
+
+```
+
Text in the page I will translate
+```
+
+
+And replace that text string with the following syntax:
+
+```
+ { { localize("Page_Description.Text_To_Translate", "Text in the page I will translate") } }
+```
+
+The `localize` function requires two arguments:
+
+* The first argument is the hierarchical tag or label, separated by
+ one or more dots. The hierarchy should begin with the name of the
+ page, and intuitively name and organize/group all phrases that
+ appear on that page. The first part represents the role or purpose
+ of the page, while the second (and later) parts describes the text
+ you're translating. Use underscores to replace spaces in this part.
+ Avoid using apostrophes, quotes, accents, and other special
+ characters.
+
+* The second argument is the original English text that will be
+ displayed on the website if a translation in the user's language is
+ not available.
+
+
+Make a [pull request](/developer/getting_started/make_a_pull_request)
+with your proposed changes.
+
+---
+
+## Updating the en_US.json Phrase File
+
+When Twig files are edited to prepare or update one or more pages for
+translation, these pages will be reviewed and merged.
+
+When a new release/version of the Submitty source code is published
+with changes to one or more `.twig` files, **[TODO]** the
+[`en_US.json` file in the Localization repository](https://github.com/Submitty/Localization/blob/main/lang/en_US.json)
+will be automatically updated.
+
+---
+
+## Adding Translations to the Localization Repository
+
+Once the pull request is merged and a new version of Submitty is
+released, checkout the [Localization](https://github.com/Submitty/Localization/tree/main/lang)
+repository and navigate to the `Localization/lang` directory.
+
+If a JSON file for the language you're translating to isn't available,
+create one. The file name format is as follows:
+```
+_.json
+```
+
+Copy the content of the en_US.json file and paste it into the newly
+created or existing JSON file.
+
+Edit the JSON file by translating the "Text in the page I will
+translate" text within the "Page_Description" section. The JSON file
+format should resemble the following:
+
+```
+ {
+ "Page_Description": {
+ "Text_To_Translate": "Translated text for the page"
+ }
+ }
+```
+
+You should test your translation by following the
+[Development Instructions](/developer/development_instructions/index#incremental-development-updates).
+
+When you are finished, submit a pull request to the Localization
+repository with your new and/or modified JSON files.
+
diff --git a/_docs/developer/development_instructions/sample_data.md b/_docs/developer/development_instructions/sample_data.md
new file mode 100644
index 00000000..5615d6aa
--- /dev/null
+++ b/_docs/developer/development_instructions/sample_data.md
@@ -0,0 +1,76 @@
+---
+title: Sample Courses Data
+category: Developer > Development Instructions
+redirect_from:
+ - /developer/development_instructions/sample_data
+---
+
+As a developer, there are 5 sample courses:
+- **BLANK**
+ - Empty course.
+- **DEVELOPMENT**
+ - All files from `/more_autograding_examples/`, which mostly tests autograding.
+ - Most new features that need gradeables to test them will be put here.
+- **SAMPLE**
+ - A simultation of a "live" course mid-semester with lots of students and lots of submissions. Tests features such as ta grading, due dates, categories, etc.
+ - For manual & automated website testing.
+- **TUTORIAL**
+ - All tutorial gradeables are in sequence, emphasizing one new feature as they grow in complexity.
+- **PLAGIARISM**
+ - Used to test Lichen plagiarism detection.
+ - This is not available by default. You must clone the [Lichen Test Data](https://github.com/Submitty/LichenTestData) repository locally to see this.
+
+---
+
+## Predefined Data
+
+Predefined data is set using files in `/.setup/data/` and the script `/.setup/bin/setup_sample_courses.py`.
+
+| Data | Location |
+|------|----------|
+| Course Gradeables | `/.setup/data/courses` |
+| Forum Threads | `/.setup/data/forum` |
+| Polls | `/.setup/data/polls` |
+| Office Hours Queue | `/.setup/data/queue` |
+| Team Assignment | `/.setup/data/teams` |
+| Predefined Users | `/.setup/data/users` |
+
+---
+
+## Sample Courses Student Data
+
+Sample Courses Student Data is set using `.yml` files and the script `/.setup/bin/setup_sample_courses.py`.
+
+#### Predefined Users
+
+`setup_sample_courses.py` parses the yaml files in `.setup/data/users/`. If you want to know more about how to write the user yaml files, read `.setup/data/users.yml`, which explains all the options.
+
+#### Random Users
+
+`setup_sample_courses.py` also generates random users. Randomly generated users generate random family and given names, user ids based on the names chosen, random anonymous user ids, numeric ids, and pronouns. For more information, read the `generate_random_users` function in `setup_sample_courses.py`.
+
+Randomly generated students are the same in every build, unless you make changes to `setup_sample_courses.py` or related files. This is because the random seed is set to a specific value. This decision was to keep test cases consistent. However, if you make changes that utilize randomness, it may change the randomly generated students, thus making the test cases obsolete.
+
+If you make changes that use/alter random number generation, you may need to
+edit the following files:
+- Peer Review:
+ - `.setup/data/random/students.txt`
+ - `.setup/data/random/graders.txt`
+- Office Hours Queue:
+ - `.setup/data/queue/queue_data.json`
+- Discussion Forum:
+ - `.setup/data/forum/threads.txt`
+ - `.setup/data/forum/posts.txt`
+- Teams:
+ - `.setup/data/teams/sample_open_team_homework_teams.csv`
+
+These files are manually written for a given set of users (the set is predetermined due to
+the random's seed staying the same). If you make any changes that affects the contents of the
+set these files will be outdated and result in failure of recreate_sample_courses.
+
+You may also need to edit test cases in Cypress, Selenium, etc.
+
+---
+
+See also: [Re-Creating All Sample Course Data](/developer/development_instructions/index#re-creating-all-sample-course-data)
+
diff --git a/_docs/developer/development_instructions/trigger_functions.md b/_docs/developer/development_instructions/trigger_functions.md
new file mode 100644
index 00000000..7634405c
--- /dev/null
+++ b/_docs/developer/development_instructions/trigger_functions.md
@@ -0,0 +1,88 @@
+---
+title: Trigger Functions
+category: Developer > Development Instructions
+---
+
+Trigger functions are a useful tool to keep data in sync. When a
+database table's column is modified, a trigger function can be
+set up to activate and modify the database as appropiate.
+
+We use PL/pgSQL for our trigger functions, which is a procedural
+programming language part of PostgreSQL, the language our database
+queries are conducted in.
+
+### Editing an Existing Trigger Function
+To edit an existing trigger function, simply edit the appropiate file inside the
+``migrations/migrator/triggers`` directory. When you next run ``submitty_install``
+or the migrator manually, the trigger functions on the database will be updated
+with the changes to the code.
+
+### Creating New Trigger Functions
+To create a new trigger function,
+
+1. First, navigate to the ``migrations/migrator/triggers`` directory. Then choose
+ between the ``master`` and ``course`` folder. Choose the ``master`` folder if
+ your trigger function is activated by changes to the master database, and similarly,
+ choose the ``course`` if your trigger function is activated by changes to the course
+ database.
+
+2. Create your file ``trigger_function_name.sql`` with these contents:
+
+ ```
+ --
+ -- Name: trigger_function_name(); Type: FUNCTION; Schema: public; Owner: -
+ --
+
+ CREATE OR REPLACE FUNCTION public.trigger_function_name() RETURNS trigger
+ LANGUAGE plpgsql
+ AS $$
+ BEGIN
+ (Body)
+ END;
+ $$;
+
+ ```
+ Replace the body with the trigger function. We recommend
+ [this tutorial series](https://www.postgresqltutorial.com/postgresql-triggers/introduction-postgresql-trigger/)
+ on how to write them. Check other trigger functions we have for an idea
+ on the syntax. One of the most important ideas to note is that OLD.column represents
+ the column's date before the edit and NEW.column represents the column's data after the
+ edit.
+
+3. Create a migration (see [here](/developer/development_instructions/migrations)
+ on how to write a migration). Somewhere in the migration, include the following:
+
+ ```
+ CREATE OR REPLACE FUNCTION public.trigger_function_name()
+ RETURNS trigger
+ LANGUAGE plpgsql
+ AS $$
+ BEGIN
+ RETURN NEW;
+ END;
+ $$;
+
+ CREATE TRIGGER some_name_about_your_trigger_function
+ BEFORE/AFTER UPDATE/INSERT/DELETE ON public.the_table_your_function_is_activated_by
+ FOR EACH ROW EXECUTE PROCEDURE public.trigger_function_name();
+ ```
+ There's a few things to break down here. Your trigger function can be actived before or after
+ a table has a deletion, an insertion, or a value update on it. Pick either ``BEFORE`` or ``AFTER``. Pick either ``UPDATE``, ``INSERT``, or ``DELETE``. If you want your function to be activated on, say, an update or an insertion, write instead
+ ``UPDATE OR INSERT`` in the spot above.
+
+ Declaring the trigger function above is neccessary so that we can then
+ bind the trigger function to the appropiate action on the table. You do not need
+ the body to be blank, but we recommend it to be to avoid code duplication.
+ The blank body will be replaced by the migrator with the completed body in
+ your other file, so do not worry.
+
+ It can be strategic to choose when in your migration you include the code above,
+ as you may want your trigger function binded only after a table is created.
+
+4. Make sure you include in the down migration section the deletion of the trigger function.
+
+ ```
+ DROP TRIGGER IF EXISTS
+ the_same_name_about_your_trigger_function
+ ON public.the_table_your_function_is_activated_by;
+ ```
diff --git a/_docs/developer/development_instructions/troubleshooting.md b/_docs/developer/development_instructions/troubleshooting.md
index 94abf040..8b2c5e56 100644
--- a/_docs/developer/development_instructions/troubleshooting.md
+++ b/_docs/developer/development_instructions/troubleshooting.md
@@ -22,7 +22,7 @@ category: Developer > Development Instructions
use by another application running on your computer.
-* This may happen if you attempt to create mutliple Submitty VMs --
+* This may happen if you attempt to create multiple Submitty VMs --
perhaps unintentionally! E.g., if you have multiple directories on
your computer each with a clone/copy of the Submitty repo. It is
necessary to run `vagrant destroy` in each of these
@@ -34,6 +34,32 @@ category: Developer > Development Instructions
vagrant global-status
```
+* If you might have old, forgotten VMs from previous OS versions
+ hanging around it can be helpful to completely delete the `.vagrant`
+ folder in your repository. Also check to see if you have multiple
+ clones or backups of the repository and thus multiple `.vagrant`
+ folders on your machine.
+
+
+* You can scan to see what processes on your machine are using the
+ conflicting ports. Depending on your operating system, try these
+ commands:
+
+ ```
+ netstat -anvp tcp | awk 'NR<3 || /LISTEN/'
+ ```
+
+ ```
+ lsof -i | grep LISTEN
+ ```
+
+ Then you can type `kill ` with the `` of the process (if
+ you confirm you don't need that process). If you don't recognize
+ the process using the port in question, search to figure out if you
+ can or should disable it. For example, on MacOS, the AirPlay
+ Receiver in Control Center is using port 7000, so you may choose to
+ turn that off.
+
* You can choose to override the default ports and use an alternate
port through an environment variable. The current variables are
diff --git a/_docs/developer/getting_started/index.md b/_docs/developer/getting_started/index.md
index 24345439..43ab731c 100644
--- a/_docs/developer/getting_started/index.md
+++ b/_docs/developer/getting_started/index.md
@@ -12,7 +12,7 @@ redirect_from:
## Suggestions for New Developers
-* Join our Community Discussion on Slack:
+* Join our Community Discussion on Zulip:
[Contact Us](/contact)
* You'll need to set up the full system on your own computer. The
diff --git a/_docs/developer/getting_started/phpstorm.md b/_docs/developer/getting_started/phpstorm.md
index 2e860cc7..7ffad8f0 100644
--- a/_docs/developer/getting_started/phpstorm.md
+++ b/_docs/developer/getting_started/phpstorm.md
@@ -29,7 +29,7 @@ Set the following parameters under the `Connection` tab:
- `Port`: `2222`
- `User Name`: `root`
- `Authentication Type`: `Key pair (OpenSSH or PuTTY)`
- - `Private Key File`: `/.vagrant/machines/ubuntu-20.04/virtualbox/private_key`
+ - `Private Key File`: `/.vagrant/machines/ubuntu-22.04/virtualbox/private_key`
- `Key Passphrase`: leave empty
- `Root Path`: `/usr/local/submitty`
- `Web server URL`: `http://localhost:1511/`
diff --git a/_docs/developer/getting_started/vm_install_using_vagrant.md b/_docs/developer/getting_started/vm_install_using_vagrant.md
index 25edd710..3c00e19e 100644
--- a/_docs/developer/getting_started/vm_install_using_vagrant.md
+++ b/_docs/developer/getting_started/vm_install_using_vagrant.md
@@ -159,7 +159,7 @@ Below are quick steps to get everything installed and running.
the repo and use the git url from your fork instead, especially if you are looking to contribute.
_OPTIONAL: If you will be developing code in one of the companion
- Submitty repositories (e.g., AnalysisTools, Lichen, RainbowGrades, Tutorial), also
+ Submitty repositories (e.g., AnalysisTools, Lichen, Localization, RainbowGrades, Tutorial), also
clone those repositories to the same directory. For example:_
```
@@ -169,6 +169,7 @@ Below are quick steps to get everything installed and running.
└── GIT_CHECKOUT
├── AnalysisTools (optional)
├── Lichen (optional)
+ ├── Localization (optional)
├── RainbowGrades (optional)
├── Submitty
└── Tutorial (optional)
@@ -343,6 +344,7 @@ Below are quick steps to get everything installed and running.
| user | password | role |
|------|----------|-------|
+ | superuser | superuser | Superuser |
| vagrant | vagrant | OS user |
| root | vagrant | OS user |
| submitty_cgi | submitty_cgi | Submitty process |
@@ -423,6 +425,12 @@ Below are quick steps to get everything installed and running.
## Installation Troubleshooting
+* If your install becomes stuck on ``SSH auth method: private key`` for more than three minutes,
+ then what you can do is open Virtual Box, navigate to your VM, and click the green "Show" button.
+ Having the VM's terminal GUI open can seem to keep it awake for communication. While developing on Submitty,
+ this "Show" terminal option can sometimes lead to the VM being faster with loads, so it may be worth having the GUI
+ open even after your vagrant up.
+
* If your install seems to randomly freeze during `vagrant up`
with no explanation, then there are a couple of things that may be going wrong:
@@ -478,6 +486,15 @@ with no explanation, then there are a couple of things that may be going wrong:
Similar instructions for other OS.
+* If this error is thrown during `vagrant up` command:
+ ```
+ ubuntu-26.84: E: Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/main/g/gcc-9gcc-9_9.4.0-1ubuntu1-20.84.1_amd64.deb Connection fail [IP: 189.211.241.193]
+ ```
+ then you should use VPN to connect to the internet and then try `vagrant up`.This error usually occurs when you are outside the United States and the connection to the Ubuntu package repository is being blocked or restricted.
+
+ __Note:__ The IP address provided in the error message may vary.
+ ProtonVPN, which provides free VPN service can be used. You can download from their official website at (https://protonvpn.com). You can also use other VPN services.
+
* See also [Development Instructions Troubleshooting](/developer/development_instructions/troubleshooting)
@@ -503,7 +520,7 @@ with no explanation, then there are a couple of things that may be going wrong:
4. Retrieve the private key for the vagrant machine, located at `/.vagrant/machines///private_key`.
- At the time of writing, `` is `ubuntu-20.04`, and `` is `virtualbox`.
+ At the time of writing, `` is `ubuntu-22.04`, and `` is `virtualbox`.
5. Use SSH to connect from the remote device to the machine that is running the VM, and use SSH port forwarding (local forwarding) to forward the necessary ports.
diff --git a/_docs/developer/getting_started/vm_install_using_vagrant_apple_silicon.md b/_docs/developer/getting_started/vm_install_using_vagrant_apple_silicon.md
index ad525b5c..0c13d8e4 100644
--- a/_docs/developer/getting_started/vm_install_using_vagrant_apple_silicon.md
+++ b/_docs/developer/getting_started/vm_install_using_vagrant_apple_silicon.md
@@ -82,7 +82,7 @@ the installation process.
are looking to contribute.
_OPTIONAL: If you will be developing code in one of the companion
- Submitty repositories (e.g., AnalysisTools, Lichen, RainbowGrades, Tutorial), also
+ Submitty repositories (e.g., AnalysisTools, Lichen, Localization, RainbowGrades, Tutorial), also
clone those repositories to the same directory. For example:_
```
@@ -92,6 +92,7 @@ the installation process.
└── GIT_CHECKOUT
├── AnalysisTools (optional)
├── Lichen (optional)
+ ├── Localization (optional)
├── RainbowGrades (optional)
├── Submitty
└── Tutorial (optional)
@@ -170,7 +171,7 @@ the installation process.
If you do not see this message due to an error or the installation
has frozen, check out:
- * [Installation Troubleshooting](#installation-troubleshooting)
+ * [Installation Troubleshooting](/developer/getting_started/vm_install_using_vagrant#installation-troubleshooting)
* [Development Instructions Troubleshooting](/developer/development_instructions/troubleshooting)
diff --git a/_docs/developer/getting_started/worker_vm.md b/_docs/developer/getting_started/worker_vm.md
index 3854bb87..978491b5 100644
--- a/_docs/developer/getting_started/worker_vm.md
+++ b/_docs/developer/getting_started/worker_vm.md
@@ -1,5 +1,5 @@
---
-title: Virtual Box Worker Installation
+title: Worker VM Setup
category: Developer > Getting Started > Advanced Setup
redirect_from:
- /developer/worker_vm
@@ -9,42 +9,61 @@ If you are are developing or testing the distributed system for
automated grading, you may want to set up one or more *worker
machines* in addition to your primary vagrant virtual machine.
-## Automated Virtualbox Worker Installation
+## Automated Worker Installation
These steps will create a worker machine alongside the normal Submitty machine.
-1. Destroy `ubuntu-20.04` and `submitty-worker` vagrant machines (if they exist) with
+1. Make sure to destroy any existing vagrant machines with
```
vagrant destroy
```
-2. Create the Submitty VM and the worker VM with
+2. Ensure you have [Python 3](https://www.python.org/downloads/) installed on your machine
+
+3. Generate configuration for the desired number of worker machines
```
- WORKER_PAIR=1 vagrant up
+ python3 generate_workers.py [-n NUM] [--ip-range IP_RANGE] [--base-port PORT]
```
- On Windows you will have to first set the environment variable to 1 which lasts for the session of that console, then call vagrant up.
+ This will create or update a configuration file stored at `.vagrant/workers.json`.
+ Now you can create the virtual machines with:
```
- SET WORKER_PAIR=1
vagrant up
```
- If you want to unset the variable, you can do
- ```
- SET WORKER_PAIR=
- ```
- **NOTE**
- If you encounter error messages relating to IP addresses, you may need to change the IP for the `submitty-worker` machine in the `Vagrantfile` to avoid collisions.
+ If you happen to encounter error messages regarding IP addresses or port conflicts, you can manually edit the `workers.json` file as needed.
- When not using the Worker VM, it is recommended to set `enabled: false` under the `submitty-worker` machine in `/usr/local/submitty/config/autograding_workers.json` to avoid prolonged wait times when running `INSTALL_SUBMITTY.sh`.
+ __NOTE__: Do not edit the `workers.json` configuration file or run the aforementioned python script if there are any existing vagrant machines in your project. This can result in the existing VMs continuing to run in the background or storing their data with no clean way to remove them.
-3. To boot up both VMs after they have been halted, simply run
+4. To delete the worker machines and revert to a normal development setup, you can first run
```
- WORKER_PAIR=1 vagrant up
+ vagrant destroy
```
- using the same method as in step 2.
+ And confirm to delete all the existing virtual machines.
+
+ Next, you can delete the `workers.json` file, which will remove the worker configuration from your project.
+ The next `vagrant up` should only create the primary development virtual machine without any workers.
+
+---
+
+## Connecting to the Worker Machine
+
+If you would like to ensure the worker is functioning properly, or enter the worker machine for managing it directly, you can follow these steps.
+
+To connect to a worker machine through SSH, run:
+```
+vagrant ssh
+```
+
+If you want to test the connection between the primary VM and a worker, you can first `vagrant ssh` into the primary machine and then run this command to SSH into the worker from there:
+```
+su submitty_daemon -c ssh submitty@
+```
+The IP address of the worker machine will be indicated in the `.vagrant/workers.json` file.
+
+__NOTE__: Depending on the performance of your computer and the size of the autograding queue passed to the worker, the SSH command may hang for some time.
---
-## Manual Virtualbox Worker Installation
+## Manual Worker Installation (VirtualBox)
1. Open the Virtual Box application.
@@ -62,7 +81,7 @@ vagrant destroy
Choose `Dynamically allocated`
Specify size: e.g., 20GB
-5. Download the Ubuntu 20.04 installer 64 bit .iso.
+5. Download the Ubuntu 22.04 installer 64 bit .iso.
Save this somewhere on your host computer.
6. Click on `Start` to power on.
@@ -79,7 +98,7 @@ vagrant destroy
Then click through various menus, and wait a while installing system.
Then restart the VM to finish installation.
-8. At some point, it will suggest that you install updates for Ubuntu 20.04, go ahead and do that.
+8. At some point, it will suggest that you install updates for Ubuntu 22.04, go ahead and do that.
You'll probably have to reboot.
9. Allow ssh connections to the worker VM from outside (e.g., from your primary machine):
diff --git a/_docs/developer/google_summer_of_code/2023_Cameron_Peterson.md b/_docs/developer/google_summer_of_code/2023_Cameron_Peterson.md
new file mode 100644
index 00000000..fdf627db
--- /dev/null
+++ b/_docs/developer/google_summer_of_code/2023_Cameron_Peterson.md
@@ -0,0 +1,60 @@
+---
+title: Cameron Peterson
+category: Developer > Google Summer of Code 2023
+---
+
+## Continuous Integration Optimization
+My project for Google Summer of Code 2023 was to improve Submitty's Continuous Integration pipeline by both adding tests to increase code coverage, and improving the test time for faster feedback to developers. My first few pull requests (PRs) weren't directly related to testing, but they gave me an in-depth knowledge of the codebase, which allowed me to optimize and refactor existing tests.
+
+## Gradeable Creation
+My first few PRs related to GSOC 2023 were focusing on adding other ways to submit assignments to Submitty. The first PR was to add support for externally created Version Control System (VCS) repositories. In doing so, I was able to get in-depth knowledge on how Submitty handled obtaining and grading homework assignments, which was helpful for later testing improvements. The second PR was adding support for subdirectories within a repository. This gave me more knowledge on how gradeables were created, and how they were handled behind the scenes. The next two PRs were quality of life changes for the two previous PRs, one giving the ability to change the subdirectory settings after the gradeable was created, and one changing the error messages that the students receive in the event of a bad submission. The last main PR that I worked on for gradeables was adding VCS gradeables to the sample course. I also updated the documentation for the features that I added.
+
+### Main PR's for Gradeable Creation
+* [Private VCS Repos](https://github.com/Submitty/Submitty/pull/9382)
+* [VCS Subdirectory Support](https://github.com/Submitty/Submitty/pull/9317)
+* [Add/Remove Subdirectory After Created](https://github.com/Submitty/Submitty/pull/9423)
+* [VCS Submission Error Messages](https://github.com/Submitty/Submitty/pull/9399)
+* [VCS Gradeables in Sample Course](https://github.com/Submitty/Submitty/pull/6922)
+* [Documentation: Update Gradeable Creation](https://github.com/Submitty/submitty.github.io/pull/519)
+* [Documentation: Private VCS Repos](https://github.com/Submitty/submitty.github.io/pull/430)
+
+### Bugfixes for PR's
+* [Fix error message on Do Not Grade](https://github.com/Submitty/Submitty/pull/9448)
+* [Fix Sample Course Variables](https://github.com/Submitty/Submitty/pull/9480)
+* [Fix get_vcs_info Return Value](https://github.com/Submitty/Submitty/pull/9461)
+
+## Continuous Integration
+After finishing the PR's related to gradeables, I started working on improving the continuous integration (CI) pipeline. The first PR that got merged was an old PR that I took over, adding tests for PHP functions in the plagiarism section of Submitty. I also took over a PR to add Yamllint to the Github Actions pipeline. At this point, Submitty was using Selenium to do some end-to-end tests, and they were becoming flaky and increasingly difficult to test locally. We decided to switch from some Selenium tests, and some Cypress tests to entirely Cypress tests. I re-wrote or helped re-write multiple of the Selenium tests in Cypress, and helped write multiple tess from scratch. After all of the Selenium tests that were running in CI were changed to Cypress, I removed Selenium from the CI, and changed a couple of the tests to pass. At this point, all of the tests passed on a consistant basis, and none of them were flaky. I also did some small changes to increase the reliability of tests.
+
+## Main PR's for CI tests
+* [Replace Forum tests](https://github.com/Submitty/Submitty/pull/9393)
+* [Replace Profile tests](https://github.com/Submitty/Submitty/pull/9505)
+* [Replace Sidebar tests](https://github.com/Submitty/Submitty/pull/9503)
+* [Replace PDF tests](https://github.com/Submitty/Submitty/pull/9518)
+* [Replace Simple Grader tests](https://github.com/Submitty/Submitty/pull/9518)
+* [Replace Submission tests](https://github.com/Submitty/Submitty/pull/9406)
+* [Add Gradeable edit tests](https://github.com/Submitty/Submitty/pull/9179)
+* [Remove Selenium from CI](https://github.com/Submitty/Submitty/pull/9530)
+* [Add Yamllint to CI](https://github.com/Submitty/Submitty/pull/8864)
+* [Documentation: Remove Selenium References](https://github.com/Submitty/submitty.github.io/pull/9517)
+* [Documentation: Integrate Cypress Cloud Doc](https://github.com/Submitty/submitty.github.io/pull/534)
+
+## Smaller PR's/bugfixes
+* [Comment out Selenium Submission test](https://github.com/Submitty/Submitty/pull/9460)
+* [Comment out Download in test](https://github.com/Submitty/Submitty/pull/9446)
+* [Comment out Autograding Status Test](https://github.com/Submitty/Submitty/pull/9462)
+* [Re-add part of Autograding Status Test](https://github.com/Submitty/Submitty/pull/9499)
+* [Change login from UI to POST request](https://github.com/Submitty/Submitty/pull/9522)
+* [Update DockerUI selectors](https://github.com/Submitty/Submitty/pull/9617)
+* [Check for Server Error in Sidebar tests](https://github.com/Submitty/Submitty/pull/9620)
+* [Remove Chromedriver setup](https://github.com/Submitty/Submitty/pull/9588)
+* [Make Forum Selenium tests not run in CI](https://github.com/Submitty/Submitty/pull/9466)
+
+## Cypress Cloud
+After the midterm evaluation, I started working on decreasing the time that the CI took to run. The first part of this was done by another contributor by splitting up Cypress, Selenium, and Integration tests to run separately but parallel. I started looking into ways to decrease the testing time, while not reducing the test coverage. In doing so I came across Cypress Cloud, and their open source license. Submitty was granted an open source license, which allowed me to change the way our CI works. Now, we record the tests to Cypress Cloud, instead of saving artifacts in Github Actions. This allows for Cypress Cloud to automatically parallelize the tests between four machines, reducing the test time from around one hour, to averaging thirty-five minutes.
+
+## Cypress Cloud PR
+* [Integrate Cypress Cloud](https://github.com/Submitty/Submitty/pull/9517)
+
+## Final Overview
+In working with Submitty and other contributors, I have learned a significant amount about open source contributions. (Almost) Every weekday, Barb Cutler lead an hour long meeting to discuss progress and support requests with GSOC and Submitty contributors. William Allen and I met once a week to discuss progress, and figure out new projects. Thanks to them, and all of the other contributors I was able to improve Submitty's testing infrastructure, by both increasing the code coverage and decreasing test time. The hardest part was working with slow internet, when switching back and forth between Git branches and remaking a VM took around twenty minutes each time. This caused me to be unable to review other contributors PRs as effectively, only being able to review the code on Github until it looked good, then sacrificing the time to switch to the branch to test it locally. The most rewarding part was watching the test time decrease from over an hour, to averaging thirty-five minutes.
\ No newline at end of file
diff --git a/_docs/developer/google_summer_of_code/2023_Musaab_Imran.md b/_docs/developer/google_summer_of_code/2023_Musaab_Imran.md
new file mode 100644
index 00000000..66451edf
--- /dev/null
+++ b/_docs/developer/google_summer_of_code/2023_Musaab_Imran.md
@@ -0,0 +1,163 @@
+---
+title: Musaab Imran
+category: Developer > Google Summer of Code 2023
+---
+
+## 🛡️ Website Security and Penetration Testing
+The security of the Submitty website is of paramount importance due to its direct impact on student grades and academic integrity. Even a single vulnerability can lead to unfair academic advantages and legal complications concerning student data protection. Therefore, this project aimed to contribute to the assurance of proper access control, authorization mechanisms, and robust code that align with the high security standards expected from educational platforms like Submitty.
+
+You can find all my merged PRs in this link.
+
+---
+## 🎯 Project Scope
+The primary goal of this project was to conduct an extensive penetration testing campaign to identify and remediate potential vulnerabilities in the Submitty website. The scope of the project encompassed a wide array of attacks, spanning from common web vulnerabilities to more advanced exploitation techniques. The ultimate aim was to fortify the security posture of Submitty and bolster its protection against malicious attacks.
+
+---
+## 💡 Penetration Testing Highlights
+Throughout the Google Summer of Code program, I engaged in a full-fledged penetration testing lifecycle. I meticulously tested the Submitty website for vulnerabilities and potential security gaps.
+
+###### ☠️ Attacks
+The following list presents an overview of the attacks that were tested:
+1. Cross-Site Scripting (XSS)
+2. SQL Injection
+3. Cross-Site Request Forgery (CSRF)
+4. Remote File Inclusion (RFI)
+5. Local File Inclusion (LFI)
+6. Server-Side Request Forgery (SSRF)
+7. Clickjacking
+8. Directory Traversal
+9. XML External Entity (XXE) Injection
+10. Zip Bomb
+11. Command Injection
+12. Path Traversal
+13. Session Hijacking
+14. Remote Code Execution (RCE)
+15. Open Redirects
+16. Authentication Bypass
+17. XML Injection
+18. JSON Injection
+19. DOM-based XSS
+20. HTML Injection
+21. Web Shell Upload
+22. XML Quadratic Blowup
+23. Reflected File Download
+24. Null Byte Injection
+25. File Upload
+
+###### 🛠️ Tools
+To achieve a comprehensive security assessment, I used various security tools, including but not limited to:
+
+1. Nessus
+2. Nikto
+3. SQLMap
+4. Burp Suite
+5. Nmap
+6. Wireshark
+7. Metasploit
+8. OWASP ZAP (Zed Attack Proxy)
+
+---
+## 🔎 Static Code Analysis
+In addition to dynamic testing, I performed static code analysis using prominent vulnerability scanning tools such as:
+
+1. CodeQL Analysis
+2. Snyk Security
+3. DevSkim
+4. Codacy Security Scan
+5. EthicalCheck
+
+---
+## 🔐 Security PRs
+This section contains pull requests related to security enhancements, fixes, and updates.
+
+#### Cache Control
+Implemented Cache-Control header to ensure proper resource caching behavior. This prevents intermediaries from caching the resource, reducing the risk of serving outdated content.
+
+🔺[PR #9693](https://github.com/Submitty/Submitty/pull/9693)
+
+#### Content Type Options
+Content-Type-Options header stops pages from loading during content-sniffing attacks, significantly reducing security risks by preventing incorrect MIME type interpretation.
+
+🔺[PR #9694](https://github.com/Submitty/Submitty/pull/9694)
+
+#### Content Security Policy
+Implemented Content-Security-Policy header which prevents external iframe embedding, bolstering security by mitigating clickjacking threats.
+
+🔺[PR #9695](https://github.com/Submitty/Submitty/pull/9695)
+
+
+#### Adding CORS Security Headers
+Implemented CORS security headers to prevent cross-origin attacks, enhancing web security by preventing potentially unsafe cross-origin interactions, safeguarding against credential leakage and minimizing data exposure risks.
+
+🔺[PR #9771](https://github.com/Submitty/Submitty/pull/9771)
+
+
+#### Referrer Policy Header
+Implemented Referrer-Policy header to prevent the leakage of sensitive information, reducing the risk of information disclosure attacks.
+
+🔺[PR #9772](https://github.com/Submitty/Submitty/pull/9772)
+
+
+#### Whitelisting MIME Types
+Whitelisted MIME types to prevent the execution of potentially dangerous file types. This reduces the risk of remote code execution and other malicious attacks. Only the allowed MIME types can be uploaded to the server.
+
+🔺[PR #10003](https://github.com/Submitty/Submitty/pull/10003)
+
+---
+## 👾 Bugfix PRs
+In this category, you'll find pull requests aimed at resolving various bugs.
+
+#### Registration Section Input Validation
+🔹[PR #9582](https://github.com/Submitty/Submitty/pull/9582)
+
+#### Student Name in Blind Grading
+🔹[PR #9644](https://github.com/Submitty/Submitty/pull/9644)
+
+#### Download Files For Hidden Test Cases
+🔹[PR #9678](https://github.com/Submitty/Submitty/pull/9678)
+
+#### Number of Late Days
+🔹[PR #9691](https://github.com/Submitty/Submitty/pull/9691)
+
+---
+## 🎨 UI/UX PRs
+This section showcases pull requests that enhance the look, feel, and overall usability of our system.
+
+#### Peer Grading Submission Browser
+🔸[PR #9571](https://github.com/Submitty/Submitty/pull/9571)
+
+#### Student Photos Upload Instructions
+🔸[PR #9688](https://github.com/Submitty/Submitty/pull/9688)
+
+#### Grade Inquiries per Grader
+🔸[PR #9689](https://github.com/Submitty/Submitty/pull/9689)
+
+#### Course Materials to Course Staff
+🔸[PR #9692](https://github.com/Submitty/Submitty/pull/9692)
+
+---
+## 📚 Documentation PRs
+This category contains pull requests that added documentation of the Submitty.
+
+#### InstallationTroubleshooting for Remote Users
+🔻[PR #510](https://github.com/Submitty/submitty.github.io/pull/510)
+
+#### Virtual Machine Snapshots
+🔻[PR #521](https://github.com/Submitty/submitty.github.io/pull/521)
+
+#### Updating Disabled Functions List
+🔻[PR #541](https://github.com/Submitty/submitty.github.io/pull/541)
+
+---
+## 🚩 Conclusion
+The Submitty Website Security and Penetration Testing project was an exciting and rewarding journey. By executing a wide array of attacks and utilizing many security tools, I aimed to create a safer and more resilient platform for educational purposes. I am thrilled to have contributed to the enhancement of Submitty's security and to have strengthened its overall security posture.
+
+For any inquiries, feedback, or additional information, please feel free to contact me at musaabimran2001@gmail.com.
+
+---
+## 🤝 Acknowledgment
+I extend my heartfelt gratitude to the Submitty team for their unwavering support throughout the Google Summer of Code program. My sincere thanks to mentors Dr. Barb Cutler and Chris Reed for their invaluable guidance, which significantly enriched my learning experience. Their expertise and insights were pivotal in shaping my growth, and I eagerly anticipate contributing to Submitty in the future.
+
+Sincerely,
+
+Musaab Imran
diff --git a/_docs/developer/google_summer_of_code/2023_Saumya_Borwankar.md b/_docs/developer/google_summer_of_code/2023_Saumya_Borwankar.md
new file mode 100644
index 00000000..c0246281
--- /dev/null
+++ b/_docs/developer/google_summer_of_code/2023_Saumya_Borwankar.md
@@ -0,0 +1,54 @@
+---
+title: Saumya Borwankar
+category: Developer > Google Summer of Code 2023
+---
+
+My project for the Google Summer of Code 2023 was to improve already exisiting docker pipelines and streamline them to better support previous assignments and tutorials. I was also responsible to update all the previous dockerfiles and autograding examples to support docker execution. Docker provides an isolated environment for execution of student submitted code ensuring security and constraints. This is an important need for Submitty to ensure no malicious code submitted by students affect the underlying hardware or software.
+
+## Submitty and dockers
+
+Submitty uses config files to build gradeables and I had to familiarize how these config files are used to build gradeables. I was responsible for extensive testing and recreating autograding examples and convert the already existing config files to use docker instead of running on a bare metal machine. I got a chance to interact with the Submitty WebUI to build these gradeables and test out all the autograding examples.
+
+Submitty also has a dockerhub account where they store all their docker images. An admin has to manually push docker images to this dockerhub account when a new docker image is created by an instructor. I was responsible for automating this pipeline and building a github action workflow for automatic build and pushing of dockerfile to submitty's dockerhub account. Any new dockerfile that was pushed to the Dockerfile repository was automatically build and pushed to the dockerhub account with customizable tags using a config file present in the repository.
+
+I also had the opportunity to streamline and work on the Dockerfiles repo maintained by Submitty that holds all their dockerfiles and docker related information. I rebuilt all the dockerfiles that were outdated and broken. I was also responsible to setup a new standard on how the dockerfiles in the repository were stored and handled which led to a more structured repository which in turn would help new contributors to maintain the repository and contribute.
+
+Overall, my journey during this program allowed me to bolster Submitty's Docker pipelines, facilitating secure and efficient code execution for student submissions, while also fostering a more organized and collaborative repository ecosystem.
+
+### Pull Requests in Submitty
+
+- [Bugfix: Broken links](https://github.com/Submitty/Submitty/pull/9319)
+- [Fix button texts](https://github.com/Submitty/Submitty/pull/9019)
+- [Remove logging errors](https://github.com/Submitty/Submitty/pull/8952)
+- [Replace outdated methods](https://github.com/Submitty/Submitty/pull/8856)
+- [Update sort type for "Autograding" field](https://github.com/Submitty/Submitty/pull/8855)
+- [Better error debugging for errors](https://github.com/Submitty/Submitty/pull/9710)
+- [Dockerize existing autograding examples](https://github.com/Submitty/Submitty/pull/9445)
+
+### Pull Requests in Dockerfiles
+
+- [Broken Sym links](https://github.com/Submitty/DockerImages/pull/30)
+- [Matrix based github action for docker hub](https://github.com/Submitty/DockerImages/pull/19)
+- [Fixing broken Dockerfiles](https://github.com/Submitty/DockerImages/pull/20)
+- [Cleanup and Structure Dockerfile repository](https://github.com/Submitty/DockerImages/pull/21)
+- [Updating latest.json](https://github.com/Submitty/DockerImages/pull/22)
+- [Structure change for verilog](https://github.com/Submitty/DockerImages/pull/24)
+- [Bugfix: Variable name](https://github.com/Submitty/DockerImages/pull/25)
+- [Bugfix: Rerun workflow trigger](https://github.com/Submitty/DockerImages/pull/26)
+- [Bugfix: Seperate verilog rerun](https://github.com/Submitty/DockerImages/pull/27)
+
+## Pull Requests in submitty.github.io
+
+- [Removed duplicate installation steps](https://github.com/Submitty/submitty.github.io/pull/501)
+
+While working with Submitty I got to work with bash, python, PHP and dockerfiles. I also got the chance to review Pull requests. This was my first experience with reviewing pull requests.
+
+## Acknowledgement:
+
+I deeply appreciate the invaluable guidance and advice generously provided by my mentors, Barbara Cutler and Chris Reed. Their prompt responses to my queries and their consistent provision of essential resources have been instrumental to my progress. Expressing my gratitude extends to the dedicated RPI students and fellow GSOC-contributors who collaborated on enhancing Submitty throughout the summer. The journey of working on this project has been truly enriching, allowing me to acquire meaningful experience. I wish to continue to contribute to Submitty in the future.
+
+For any inquiries, feedback, or additional information, please feel free to contact me at **[sborwankar@hawk.iit.edu](mailto:sborwankar@hawk.iit.edu)**.
+
+Thank you,
+
+**[Saumya Borwankar](https://www.linkedin.com/in/saumyaborwankar)**.
diff --git a/_docs/developer/google_summer_of_code/index.md b/_docs/developer/google_summer_of_code/index.md
index f4057c61..90a35683 100644
--- a/_docs/developer/google_summer_of_code/index.md
+++ b/_docs/developer/google_summer_of_code/index.md
@@ -38,7 +38,7 @@ the student project reports from previous summers linked below.
4. Review our project ideas list:
[https://submitty.org/developer/project_ideas](/developer/project_ideas)
-5. Join our Slack channel to ask questions and meet other new developers:
+5. Join our Zulip server to ask questions and meet other new developers:
[https://submitty.org/contact](/contact)
Ask specific technical questions about the Submitty system and open
@@ -48,7 +48,7 @@ the student project reports from previous summers linked below.
be taken into account as we evaluate your application.
_NOTE: The Submitty mentors for Google Summer of Code are on our
- Slack channel. Please communicate through the public channels and
+ Zulip server. Please communicate through the public streams and
do not direct message (DM) / private message any mentors.
Mentors will generally not respond to private messages._
diff --git a/_docs/developer/rensselaer_center_for_open_source/2021_Chris_Reed.md b/_docs/developer/rensselaer_center_for_open_source/2021_Chris_Reed.md
index 0472589d..f7a61f3a 100644
--- a/_docs/developer/rensselaer_center_for_open_source/2021_Chris_Reed.md
+++ b/_docs/developer/rensselaer_center_for_open_source/2021_Chris_Reed.md
@@ -37,7 +37,7 @@ timer is visible, a progress bar of how far along you are in the test would also
in the past. This required having an accurate Javascript timer, a method to sync back with the server periodically, and a way for gradeables to
store their allowed minutes in the database when being built.
-Another feature I implemented was the ability for instructors to chose an order for which gradeables should be completed. This forces students
+Another feature I implemented was the ability for instructors to choose an order for which gradeables should be completed. This forces students
to complete a certain assignment before being allowed to open and submit the next assignment. This could be used in work at your own pace classes
or in crash courses.
diff --git a/_docs/developer/rensselaer_center_for_open_source/2023_Jaeseok_Kang.md b/_docs/developer/rensselaer_center_for_open_source/2023_Jaeseok_Kang.md
new file mode 100644
index 00000000..aa16a197
--- /dev/null
+++ b/_docs/developer/rensselaer_center_for_open_source/2023_Jaeseok_Kang.md
@@ -0,0 +1,77 @@
+---
+title: Jaeseok Kang
+category: Developer > Rensselaer Center for Open Source (RCOS) > Summer 2023
+---
+
+During the summer, I dedicated my efforts to a range of tasks for Submitty, including the development of new features, bug fixes, and code refactoring.
+
+### RainbowGrades
+
+Border-outline
+ - One of the most noticeable change made in RainbowGrades this summer
+ - Designed to indicate the status of individual gradeables
+ - Implemented primary for instructors to discern status within large table
+
+Git version
+ - Displays RainbowGrades version based on user's local repository
+ - Offers insight into potential discrepancies between the main and local version
+ - Facilitates developers to trace issues when users patch their local RainbowGrades
+
+Course Section ID (Course Registration Number)
+ - Retrieves relevant data for each student from the database and renders it into individual report JSON files
+
+iClicker Removal
+ - iClicker was tool to assist students to participate in class replaced by Submini poll
+ - Meticulously removed obsolete iClicker code from codebase
+
+Future Works
+ - Add version conflict status for border-outline
+ - Redirect compilation output to a log file
+ - Introduce Continuous Integration (CI) for RainbowGrades
+ - Apply CSS enhancements to minimize repetitive HTML code
+ - Refactoring the table to enable dynamical sorting, row hiding, and related improvements
+
+
+
+### Web-based customization
+
+Plagiarism Entries
+ - Instructors are now able to input plagiarism data through the web GUI
+ - Eliminates the need for manual editing of the customization.json file
+ - Web has invalid entry check, for instance, duplicate entries which has advantage over editing json file directly
+ - The web interface includes validation checks, such as preventing duplicates, offering an advantage over direct JSON file editing.
+
+Display Options
+ - Instructors can now choose the information to display using the web GUI
+ - Eliminates the need for manual editing of the customization.json file
+ - Description of each display option elegantly collapses with CSS updates.
+
+Future Works
+ - Switch to seamless and simultaneous saving change from manually pressing Save Change button.
+ - Enhance error handling, such as catching compilation errors and permission issues
+
+
+
+### Submitty_test script
+
+Submitty test
+ - A newly introduced command, similar to "submitty_install_site," runs PHP static analysis/code sniffer into a single command
+ - Simplify the local PHP linting process by eliminating the need to remember lengthy command lines or copy them from the website.
+ - This script originally started as a personal tool for myself but evolved into a valuable resource for many developers
+ - The decision to run it within Vagrant, despite the slower execution compared to host machines, was driven by the need for maintainability and cross-platform compatibility, prioritizing these aspects over runtime efficiency.
+
+Future Works
+- Expand by adding JavaScript, CSS, Python linting, and Unit tests
+- Ultimately, the goal is to empower developers to run most CI processes locally, reducing GitHub CI load
+
+
+
+### Database Queries
+
+Grading Stats
+ - The grading stats page now features the count of unresolved inquiries assigned to each grader
+ - Offer instructors to efficiently monitor and prompt the respective grader to complete their grading tasks
+
+Future Works
+ - Enhance the visual analysis and interpretation of the statistics
+ - Provide user-friendly tools to manipulate the statistics
diff --git a/_docs/developer/rensselaer_center_for_open_source/2023_Mahi_Pasarkar.md b/_docs/developer/rensselaer_center_for_open_source/2023_Mahi_Pasarkar.md
new file mode 100644
index 00000000..a753eb6e
--- /dev/null
+++ b/_docs/developer/rensselaer_center_for_open_source/2023_Mahi_Pasarkar.md
@@ -0,0 +1,53 @@
+---
+title: Mahi Pasarkar
+category: Developer > Rensselaer Center for Open Source (RCOS) > Summer 2023
+---
+
+### Summary
+
+My work on Submitty was a great opportunity to sharpen my skills. Due to working on a large codebase and completing incomplete PRs, I improved heavily in reading code and visualizing the systems in my mind. This skill has allowed to me develop far faster than I did at the beginning of the summer, and has refined my debugging skills. I was able to work on several engaging and challenging problems, such as security, calendar overhaul, testing, and more. In addition, I worked with a wonderful team who I could always turn to to ask for help or bounce ideas off of.
+
+### Calendar
+
+My goal was to overhaul the calendar in order to make it more useful to students and instructors.
+To that end, I implemented a way to focus on single classes in the calendar, in addition to seeing all at once. After that, I implemented a method to choose colors for each class. To bolster this feature, I also added a legend that
+indicated what each color is for, and I chose 16 new colors (8 each for light and dark theme) that met
+WAVE's accessibility guidelines for contrast.
+
+**Before**
+![before](../../../images/RCOS_report/2023_Mahi_Pasarkar/cal-old.png)
+
+**After**
+![after](../../../images/RCOS_report/2023_Mahi_Pasarkar/cal-new.png)
+![menu](../../../images/RCOS_report/2023_Mahi_Pasarkar/cal-menu.png)
+
+#### Future Work
+
+Future features I want to add are:
+* Adding course materials to calendar (in progress)
+* Coloring by gradeable type (eg. Homework, Exam, etc.)
+* Show unreleased gradeables on calendar
+* Improved calendar mobile view
+
+### Sample Data
+
+I improved a lot of sample data to keep up with new features and refactors. I added
+sample pronouns to users, sample calendar data to assist with future feature testing,
+and sample forum data to include markdown. These usually required changing the way sample data is generated
+in `setup_sample_courses.py`. For example, for forum data, I needed to make edits that allow posts to have
+markdown enabled. For pronouns data, random pronouns needed to be assigned, which also came with the need
+to change each test to conform with the new randomly generated data.
+
+### Testing
+
+I implemented and improved several Cypress end to end tests. Prior to the summer, I worked on adding pronouns to
+user profiles. This feature was new and untested, so I created a comprehensive test suite for it. Additionally, I
+made tests for autograder test cases, and I finished a PR that ported deprecated Selenium tests to Cypress.
+
+### Notebook Download Security
+
+Notebook gradeables are gradeables that feature problems in formats such as multiple choice, short answer, etc.
+These gradeables submitted the results by recording the answer in a `txt` file. The problem with this is that the
+`txt` files are visible and downloadable by the students. In most cases, it shouldn't be an issue, but if an instructor
+designs the files in a way that can give a hint towards the answer it would be an unfair exploit. I edited `Access.php` to ensure that students wouldn't have permissions for the file. This way, even if students manually entered the url to
+get the files, they would be prevented from accessing it.
\ No newline at end of file
diff --git a/_docs/developer/rensselaer_center_for_open_source/2023_Nia_Heermance.md b/_docs/developer/rensselaer_center_for_open_source/2023_Nia_Heermance.md
new file mode 100644
index 00000000..9372eb49
--- /dev/null
+++ b/_docs/developer/rensselaer_center_for_open_source/2023_Nia_Heermance.md
@@ -0,0 +1,46 @@
+---
+title: Nia Heermance
+category: Developer > Rensselaer Center for Open Source (RCOS) > Summer 2023
+---
+
+This summer, most of my work was in Course Materials, TA Grading, and site-wide refactors.
+
+### Course Materials
+
+An outstanding issue in Course Materials was the ability to hide folders from students.
+You can hide a folder by setting its release date to the future, but once a folder was released,
+there was now way to hide a folder's name besides a button that hid its contents. Now, when folders are hidden,
+their names do not appear on the Course Materials page for students. I accomplished this through a recursive function on
+the server PHP code that creates a dictionary used when rendering the page.
+
+While working on this issue, I found a bug where hiding one folder's contents would unintentionally hide
+other folder's contents. I fixed this bug as well with additional logic.
+
+Another issue was the lack of folder suggestions when uploading a file or moving a file. Users would then accidentally
+create a new folder rather than placing a file in an existing folder as intended. I added a list, created via server-side
+PHP code and maintained by JavaScript client-side code, that provides suggested folders.
+
+### TA Grading
+
+In addition to a big project I'll discuss soon, I work on bug fixes and features throughout TA Grading. One feature I worked
+on with part-time dveloper Yanli was the ability for instructors to set a default grading blindness for TAs. TAs of course
+have the ability to turn off this blindness and see who they're grading, but sometimes setting the default to be unable to
+see who you are grading is appropiate for the current gradeable.
+
+A bugfix I worked on was the blindness setting for limited access graders (i.e. undergraduate mentors) was accidentally
+hiding student information for full-access graders (i.e. instructors and TAs). Worse, the limited access setting wasn't
+hiding student information from the mentors themselves for team assignments! There were some small logic changes
+necessary to get this setting working again.
+
+The main project I worked on this summer was a TA Grading refactor. Behind the scenes, TA Grading loads all of the grading
+panels at once and hides the ones currently inactive. This made the page slow to boot up and also made it difficult
+to expand the page to allow the panels to be popup windows. The goal of the refactor was to change the panels to be
+client-side rendered so that the panels would only be loaded when necessary and student traversal wouldn't require a whole page refresh.
+
+Unfortunately, this refactor was my main failure of the summer. I overestimate the scope of the goal, as currently Submitty
+is not set up for client-side rendering. Still, I got the grounds going for a refactor, and if I continue working on Submitty
+in the future, I am confident I could continue this refactoring effort into a much faster user experience!
+
+### Side-wide Refactors
+
+The Submitty codebase has some outdated terminology. Grade Inquiries used to be called Regrade Requests, so that's what they were referred as in the code. We also used a mix of the word "semester" and the word "term" throughout when our goal is to switch to entirely the word "term" to be less confusing to schools without a semester system. These refactors were great for familiarizing myself with the codebase as I was a new Submitty developer this summer. The "semester" to "term" refactor isn't quite done, but it's getting there!
\ No newline at end of file
diff --git a/_docs/developer/rensselaer_center_for_open_source/2023_Satvik_Karanam.md b/_docs/developer/rensselaer_center_for_open_source/2023_Satvik_Karanam.md
new file mode 100644
index 00000000..74ba4b94
--- /dev/null
+++ b/_docs/developer/rensselaer_center_for_open_source/2023_Satvik_Karanam.md
@@ -0,0 +1,6 @@
+---
+title: Sátvik Karanam
+category: Developer > Rensselaer Center for Open Source (RCOS) > Summer 2023
+---
+
+_coming soon_
\ No newline at end of file
diff --git a/_docs/developer/rensselaer_center_for_open_source/2023_Viane_Matsibekker.md b/_docs/developer/rensselaer_center_for_open_source/2023_Viane_Matsibekker.md
new file mode 100644
index 00000000..85ac811c
--- /dev/null
+++ b/_docs/developer/rensselaer_center_for_open_source/2023_Viane_Matsibekker.md
@@ -0,0 +1,6 @@
+---
+title: Viane Matsibekker
+category: Developer > Rensselaer Center for Open Source (RCOS) > Summer 2023
+---
+
+_coming soon_
\ No newline at end of file
diff --git a/_docs/developer/rensselaer_center_for_open_source/2023_Youssef_Hassan.md b/_docs/developer/rensselaer_center_for_open_source/2023_Youssef_Hassan.md
new file mode 100644
index 00000000..d0c416cc
--- /dev/null
+++ b/_docs/developer/rensselaer_center_for_open_source/2023_Youssef_Hassan.md
@@ -0,0 +1,46 @@
+---
+title: Youssef Hassan
+category: Developer > Rensselaer Center for Open Source (RCOS) > Summer 2023
+---
+
+During the summer of 2023, I had my first experience contributing to open-source. I dedicated myself to completing pending features, introducing new functionalities, and resolving bugs in Submitty. While doing so, I also actively reviewed the work of my fellow team members, which helped us all work together effectively to enhance the user experience. Additionally, I actively participated in the development process by submitting bug reports on Github and proposing ideas for implementation. I am looking forward to addressing these suggestions in the upcoming months, further contributing to the improvement of Submitty.
+
+### Completing pending features
+
+* One of the initial tasks I undertook was the implementation of counters within the office hours queue. This addition helps instructors, mentors, and teacher assistants understand how frequently students use the queue, allowing them to provide assistance more efficiently, especially to those who received less help.
+
+* On the grading index page, an adjustment was implemented for graders. Instead of the previous blue 'Grade' button used for both on-time and too late submissions, a red button labeled "Too Many Late Days" has been introduced. This modification ensures that TAs are informed about the status prior to accessing the student's submission, helping them grade with better information.
+
+* Another contribution was the implementation of a new modal on the grading statistics page, which offers users the option to apply filters that include or omit specific submissions. These filters cover overridden submissions, bad submissions (excessive late day use), and submissions within the NULL registration section (which include dropouts and designated graders). The filters impact statistics for student submissions, progress in TA grading, manually and autograded submissions.
+Using these filters carefully resolves statistical irregularities caused by late submissions and changes in the NULL registration section, ensuring accurate representation.
+
+* The last task I undertook was the integration of Cypress End-to-End tests for Submitty. These tests carefully assess changes in gradeable information, late days and extentions usage, and late submissions. This analysis also ensures that the changes are accurately reflected both from the perspective of student submissions and within the late day cache, a table within the database. This involved replacing the previous late days forensic page and refactoring it into the Bulk Late Day Usage page, which only instructors can access. This new interface represents the late day cache, giving instructors the choice to populate entries or clear the table as needed.
+
+### Introducing Improvements
+
+* To complement the filters added in the grading statistics page, I introduced additional Cypress End-to-End tests that use the filters to ensure that the displayed statistics align with the expected values.
+
+* I modified the display names used by instructors and graders when addressing grade inquiries.
+
+* Further, I introduced a new setting into the profile page, allowing for customizable sidebar display options. This setting offers users the choice to show only icons on narrow screens or to keep the sidebar expanded at all times. This adjustment addresses the previous issue where the sidebar would inconveniently collapse on narrower screens.
+
+* With valuable assistance from Barbara Cutler, I introduced the initial version of documentation that guides new developers and contributors in translating pages within Submitty.
+
+* Furthermore, utilizing code previously implemented by fellow contributor Sátvik Karanam, I contributed to the translation of Submitty's profile page into French. This marked the first translation beyond English in Submitty's supported languages.
+
+* I enhanced the documentation to assist future contributors in addressing challenges I encountered, including troubleshooting the installation of a virtual machine using Vagrant and resolving issues related to generating and viewing Submitty webpages.
+
+
+### Implementing Bugfixes
+
+* I refactored the code responsible for displaying warning messages before late submissions because I discovered some inconsistencies. Previously, incorrect messages or no messages would appear due to the logic used to display the messages or the code inaccurately assessing the time against the deadline, which potentially misled students. The new code carefully addresses edge cases and eliminates the need to reload the submission portal after the due date has passed. This enables timely display of warning messages directly after the deadline, facilitated by a Javascript timer synchronizing with the server periodically.
+
+* I identified and resolved an issue with a Submitty page that was causing excessive queries by adding it to the ignore list. Moving forward, the plan is to refactor the queries that are executed iteratively and combine them into a single larger query.
+
+* I located and removed a duplicated faulty page that was appearing.
+
+* I resolved an issue that prevented instructors from downloading student submissions.
+
+### Acknowledgments
+
+* I would like to express my gratitude to Barbara Cutler and my fellow contributors during the summer for their assistance and guidance when I encountered challenges. I greatly appreciate the opportunity to work on Submitty during the summer.
diff --git a/_docs/developer/software_and_system_design/coding_style_guide/php.md b/_docs/developer/software_and_system_design/coding_style_guide/php.md
index aafc1464..be8744eb 100644
--- a/_docs/developer/software_and_system_design/coding_style_guide/php.md
+++ b/_docs/developer/software_and_system_design/coding_style_guide/php.md
@@ -5,7 +5,7 @@ redirect_from:
- /developer/coding_style_guide/php
---
-__Minimum Version__: 7.4
+__Minimum Version__: 8.1
For PHP, we use a foundation of [PSR-1](https://www.php-fig.org/psr/psr-1/) and
[PSR-12](https://www.php-fig.org/psr/psr-12/), with some slight modifications on
@@ -123,4 +123,4 @@ an error instead. To do this, place at the top of the file:
`, you will have to determine the appropriate
-version using the [Version Selection](https://sites.google.com/a/chromium.org/chromedriver/downloads/version-selection)
-page from the above link.
-
-For Mac, using homebrew:
-```
-brew install --cask chromedriver
-```
-
-For Linux, use:
-```
-wget https://chromedriver.storage.googleapis.com//chromedriver_linux64.zip && \
-unzip chromedriver_linux64.zip && \
-sudo mv chromedriver /usr/local/bin/chromedriver && \
-sudo chown root:root /usr/local/bin/chromedriver && \
-sudo chmod +x /usr/local/bin/chromedriver
-```
-
-For Windows, download the appropriate version and place it on your
-[PATH](https://helpdeskgeek.com/windows-10/add-windows-path-environment-variable/).
-
-_NOTE_: You will need to make sure to keep chromedriver up-to-date as Chrome auto-updates itself.
-
----
-
-Because some tests utilize autograding, you must ensure the autograding shippers and workers are running before testing.
-To start the autograding systems run:
-
-```
-sudo systemctl start submitty_autograding_shipper
-sudo systemctl start submitty_autograding_worker
-/usr/local/submitty/.setup/INSTALL_SUBMITTY.sh
-```
-
-See also: [Automated Grading](/developer/development_instructions/automated_grading)
-
----
-
-To run the test suite, navigate to `../Submitty/tests` and run:
-
-```
-python3 -m unittest
-```
-
-**Note:** If you are using a non-standard installation of Submitty, you must
-edit `tests/e2e/base_testcase.py` and change the constant `TEST_URL`
-to reflect your installation's IP address.
-
-To run an individual file or testcase, run:
-
-```bash
-python3 -m unittest e2e..
-python3 -m unittest e2e...
-```
-
-An example of running the login tests:
-
-```bash
-python3 -m unittest e2e.test_login.TestLogin
-python3 -m unittest e2e.test_login.TestLogin.test_login
-```
-
-To disable headless mode and view the browser while running a test,
-edit `tests/e2e/base_testcase.py` and comment out the line:
-
-```python
-self.options.add_argument('--headless')
-```
-
-To slow down the tests for debugging, you can pause execution until
-you press Enter in the terminal. To do this, add the following line into your test:
-
-```python
-self.wait_user_input()
-```
-
-Furthermore, Selenium's `wait.until` is another way to slow down tests.
-It waits until an element loads or times out after a maximum time. This is
-useful for both debugging and writing tests. For example, the following snippet
-waits until an `h1` element containing "My Heading" appears and fails after
-10 secs if nothing shows up.
-
-```python
-wait = WebDriverWait(self.browser, 10)
-wait.until(
- EC.presence_of_element_located(
- (By.XPATH, "//h1[contains(text(),'My Heading')]")
- )
-)
-```
-
-Finally, to help debug a failing test, it may be useful to print out the
-page source right before a failed assertion. You can do this by doing:
-
-```python
-print(self.driver.page_source)
-```
diff --git a/_docs/index/contact.md b/_docs/index/contact.md
index b69d0a29..8087e797 100644
--- a/_docs/index/contact.md
+++ b/_docs/index/contact.md
@@ -12,27 +12,54 @@ Are you interested in joining the Submitty Development Team? Please read:
## Online Community Discussion
-We have a public [Slack server for Submitty Users and Developers](https://join.slack.com/t/submitty/shared_invite/enQtMzE1NzgyMzUzNzI5LWZhOGM4NWU4M2U3ZmM2ZmM5NTYwNjk3NTc5Yjg1ZGRlYzU1MjcwYWNkNGYxZjk2YTk3ZmEyODY3MjEyOTc0M2E).
-
-Please use the Slack server `#general-welcome` and
-`#gettingstarted-installation-development` and
-`#technical-developers-studio` channels for community introductions,
-to discuss Submitty installation problems, ask general development
-questions, and have feature design discussion. We appreciate the
-Submitty community working together to help new developers.
-
-When asking for help on installation, please include your host
-operating system & version, and your versions of vagrant and virtual
-box. When asking for help on how to patch bugs or implement new features,
-please describe what you've done to get started, what you've figured
-out, and specifically where you're stuck.
-
-_Special Request: Please do not contact administrator individuals by Slack
-direct private message or personal email to ask technical questions.
-It is likely that other developers have the same or similar questions
-or are experiencing the same bug. So we'd like to answer those questions
-on the public forum. And you'll probably get a faster reply when you
-ask the larger community. Thank you!_
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+* Please use the Zulip stream `#General-Welcome-Introductions` for
+community introductions.
+
+* Use the `#Installation/Getting Started`
+stream to discuss Submitty installation problems and introductory
+development questions. When asking for help on installation, please
+include your host operating system & version, and your versions of
+vagrant and virtual box.
+
+* The `#Submitty Developer Studio` stream is for more advanced
+development questions and feature design discussion. When asking for
+help on how to patch bugs or implement new features, please describe
+what you've done to get started, what you've figured out, and
+specifically where you're stuck.
+
+* If there is already a topic within the stream that is related to your
+question, please use that. Otherwise, please start a new topic. We
+appreciate the Submitty community working together to help new
+developers.
+
+* _Special Request: Please do not contact administrator individuals by
+Zulip direct private message or personal email to ask technical
+questions. It is likely that other developers have the same or
+similar questions or are experiencing the same bug. So we'd like to
+answer those questions on the public forum. And you'll probably get a
+faster reply when you ask the larger community. Thank you!_
## Demo Submitty
diff --git a/_docs/index/people.md b/_docs/index/people.md
index f453b1f3..1fac80b9 100644
--- a/_docs/index/people.md
+++ b/_docs/index/people.md
@@ -10,6 +10,22 @@ redirect_from:
---
+## 2023 Summer Developers
+
+![](/images/people/2023_summer.png)
+
+Jaeseok Kang,
+Nia Heermance,
+Yanli Wang,
+Sátvik Karanam,
+Youssef Hassan,
+William Allen,
+Viane Matsibekker,
+Chris Reed,
+Barb Cutler
+
+---
+
## 2023 Spring Developers
![](/images/people/2023_spring.png)
@@ -56,7 +72,7 @@ Miles Ednie, Henrik Lam, Stephanie Li, Javier Portorreal, Eddie Krystowki, Chris
![](/images/people/2019_summer.jpeg)
-Kevin McKinney, Alexa Orosz, Jacob McKnight, Maya Tung, Saketh Dargula, Shail Patel, and Evan Maicus
+Kevin McKinney, Alexa Orosz, Jacob McKnight, Maya Tung, Saketh Dargula, Shail Patel, Evan Maicus and Barb Cutler
---
diff --git a/_docs/instructor/assignment_configuration/configuration_path.md b/_docs/instructor/assignment_configuration/configuration_path.md
index 7a663af9..048c8e90 100644
--- a/_docs/instructor/assignment_configuration/configuration_path.md
+++ b/_docs/instructor/assignment_configuration/configuration_path.md
@@ -26,7 +26,7 @@ Submitty provides a number of simple autograding configurations that
can be selected from the drop down selection menu (prefixed by
"PROVIDED"). These default, provided autograding configurations are:
-_TODO: Insert documentation of the upload only, pdf_exam, iclicker,
+_TODO: Insert documentation of the upload only, pdf_exam,
left-right seating assignment, 2 & 3 page test notes upload._
diff --git a/_docs/instructor/assignment_preparation/index.md b/_docs/instructor/assignment_preparation/index.md
index 631c6402..5e62289c 100644
--- a/_docs/instructor/assignment_preparation/index.md
+++ b/_docs/instructor/assignment_preparation/index.md
@@ -5,14 +5,13 @@ redirect_from:
- /instructor/create_edit_gradeable
---
-![](/images/new_gradeable_form.png)
+![](/images/instructor/assignment_preparation/new_gradeable.png)
### Create a New Gradeable
-To create a new gradeable, instructor users should click the "New
-Gradeable" button in the top right corner, under the Submitty logo.
-Fill out this form (details in the following sections) and press "Add
-Gradeable".
+To create a new gradeable, instructor users should click "New
+Gradeable" in the sidebar on the left of the screen.
+Fill out this form (details in the following sections) and press "Create New Gradeable".
Most of the fields on the Create/Edit Gradeable form can be changed
later. You can return to this form from the main page by pressing the
@@ -31,19 +30,18 @@ TAs have started grading!_
-
### Types of Gradeables
A "Gradeable" is any single item that will be graded automatically
-and/or manually by the instructor/TAs. We offer 3 basic types of
-gradeables: electronic submission, numeric, or checkboxes.
-
+and/or manually by the instructor/TAs.
- **_Electronic Submission_** should be used for
- homework/project/exercise file uploads by students (e.g., code,
- .pdfs, images, etc.) or submitted via VCS. Electronic Submission
- can be automatically graded, fully manually graded, or a combination
- of both.
+ **_Checkpoints_** should be used for manually graded items with one
+ or more parts that are marked as full, half, or no credit. This is
+ commonly used for in class exercises (e.g., lab or recitation)
+ where the TAs verify the students have completed the exercise and
+ demonstrated sufficient competency with the material. Similar to
+ numeric gradeables, we provide a spreadsheet-like interface for
+ manual data entry.
**_Numeric_** is used for data entry of quizzes or exams where the
scores for each student are a simple array of one or more numbers
@@ -54,15 +52,13 @@ gradeables: electronic submission, numeric, or checkboxes.
if your numeric scores for this gradeable are already in an
electronic format.
- **_Checkpoints_** should be used for manually graded items with one
- or more parts that are marked as full, half, or no credit. This is
- commonly used for in class exercises (e.g., lab or recitation)
- where the TAs verify the students have completed the exercise and
- demonstrated sufficient competency with the material. Similar to
- numeric gradeables, we provide a spreadsheet-like interface for
- manual data entry.
-
+ **_Student File Submission_** There are two types of gradeables where students can submit their files
+ to Submitty: directly uploading to the website, or submitting the files using a version control system (VCS).
+ These should be used for homework/project/exercise where students will directly upload files (e.g., code,
+ pdfs, images, etc.) to Submitty for grading. (For help with VCS gradeables, view [Submission via Version Control](/instructor/assignment_preparation/submission_version_control) ).
+ **_TA/Instructor Upload_** should be used when a TA or instructor will (bulk) upload assignments to
+ Submitty for grading.
### Autograding Configuration Path
@@ -98,7 +94,7 @@ From the create/edit a gradeable page you can specify (or change):
students.
* the date/time the student can start making grade inquiries, if grade inquiry is enabled for the gradeable.
-
+
### Grading User Groups
@@ -216,7 +212,7 @@ you must re-run the BUILD_XXXX.sh script.
directory:
```
- /var/local/submitty/courses/s17/course_01/submissions/ASSIGNMENT_ID/USER_ID/VERSION
+ /var/local/submitty/courses/SEMESTER/COURSE/submissions/ASSIGNMENT_ID/USER_ID/VERSION
```
For direct file upload submissions (single file or .zip) this
@@ -226,17 +222,17 @@ you must re-run the BUILD_XXXX.sh script.
`.submit.timestamp` file. This is the time of submission, not
the time that automated grading started/finished.
- For submission via SVN, this directory will only contain the
+ For submission via VCS, this directory will only contain the
`.submit.timestamp` file. This timestamp will be used to retrieve
the state of the repo at the time of submission.
-4. For SVN submissions, you may also inspect an archive of the
- files/directory structure SVN repo at submission time in this
+4. For VCS submissions, you may also inspect an archive of the
+ files/directory structure VCS repo at submission time in this
directory:
```
- /var/local/submitty/courses/s17/course_01/checkout/ASSIGNMENT_ID/USER_ID/VERSION
+ /var/local/submitty/courses/SEMESTER/COURSE/checkout/ASSIGNMENT_ID/USER_ID/VERSION
```
@@ -245,7 +241,7 @@ you must re-run the BUILD_XXXX.sh script.
in this directory:
```
- /var/local/submitty/courses/s17/course_01/results/ASSIGNMENT_ID/USER_ID/VERSION
+ /var/local/submitty/courses/SEMESTER/COURSE/results/ASSIGNMENT_ID/USER_ID/VERSION
```
In this directory you will find the `results_grade.txt` summary of
@@ -253,32 +249,3 @@ you must re-run the BUILD_XXXX.sh script.
logfiles for each test case. You will also find log files for the
compilation, runner, and validation components of automated grading
that are helpful in debugging assignment configurations.
-
-### Using Git
-
-Submitty supports utilizing Git for handling submissions by students.
-When a student hits "submit", Submitty performs a clone of their
-repository. Submitty then does a checkout of the last revision made before
-the timestamp of when they hit the submit button.
-
-To configure Git for an assignment, you will want to select type
-"Electronic File" and then "Version Control System (VCS) Repository".
-You will then be presented with a textbox to type in the repo url to
-use. If the string does not start with a / nor has a "://" in it, it
-will combine the contents of the textbox with the base url. You will
-see the URL/path that will be shown to the users underneath the text
-box.
-
-![](/images/create_gradeable_git.png)
-
-Additionally, the text field supports the following list of "variables"
-which get replaced during execution of Submitty:
-* {$vcs_type} - VCS type being used (currently always git)
-* {$gradeable_id} - ID of gradeable being submitted
-* {$user_id} - ID of user who is submitting
-* {$team_id} - ID of team who is submitting
-
-Submitty comes with a setup for an internal Git server out of the box,
-but if you wish to use an external source, such as Github, you may need
-to configure Submitty to be able to access those repos via SSH. See
-[System Administrator/Setting Up Git](/sysadmin/git) for more details.
diff --git a/_docs/instructor/assignment_preparation/submission_version_control.md b/_docs/instructor/assignment_preparation/submission_version_control.md
index 5f65b2ea..3b482c3f 100644
--- a/_docs/instructor/assignment_preparation/submission_version_control.md
+++ b/_docs/instructor/assignment_preparation/submission_version_control.md
@@ -7,22 +7,61 @@ redirect_from:
- /instructor/git
---
+### Using Git
+
+Submitty supports utilizing Git for handling submissions by students.
+When a student hits "submit", Submitty performs a clone of their
+repository. Submitty then does a checkout of the last revision made before
+the timestamp of when they hit the submit button.
+
+To configure Git for an assignment, you will want to select type
+"Students will submit by committing files to a version control system (VCS) repository",
+and then chosing the option that suits your needs.
+
+![](/images/instructor/assignment_preparation/vcs_gradeable_type.png)
+
+Submitty comes with a setup for an internal Git server out of the box,
+but if you wish to use an external source, such as Github, you may need
+to configure Submitty to be able to access those repos via SSH. See
+[System Administrator/Setting Up Git](/sysadmin/git) for more details.
+
### Assignment Creation
-1. When you create a new gradeable, specify that students will submit
-their work by version control (GIT). _Note: this selection cannot be
-modified after initial gradeable creation._
+Text fields in the VCS Repository Details section support the following list of "variables"
+which get replaced during execution of Submitty:
+* {$vcs_type} - VCS type being used (currently always git)
+* {$gradeable_id} - ID of gradeable being submitteds
+* {$user_id} - ID of user who is submitting
+* {$team_id} - ID of team who is submitting
-2. If this is a team assignment, encourage the students to form their teams through the Submitty interface promptly, so they are not delayed by the creation of their team version control repository.
+There are multiple different options for students submitting files from version control.
+* Submitty hosted -- single gradeable repository
+ - This should be used when you want Submitty to create an empty repository for each student in the course automatically.
+ The path to this repository will be {$vcs_base_url}/{$gradeable_id}/{$user_id}.
+* Submitty hosted – choose repository name (can be used for multiple gradeables)
+ - This should be used when you want to specify the repository path, instead of using the gradeable id. This can be used for multiple gradeables.
+* Externally hosted - public repository, students will provide URL
+ - This should be used if the students will create repositories and supply the link.
+* Externally hosted - private repository, students will provide URL -- (INCOMPLETE)
+ - The implementation of the access requirements for this gradeable is incomplete.
+* Externally hosted - Instructor created repository
+ - This should be used if the Instructor/Sysadmin creates a repository that all students fork.
+
+
+ If this is a team assignment, encourage the students to form their teams through the Submitty interface promptly, so they are not delayed by the creation of their team version control repository.
+
+ If the students files will be in a subdirectory of their main repository, select "yes" and put the path to the student's files in the required field.
+
+![](/images/instructor/assignment_preparation/subdirectory_gradeables.png)
### Generating Submitty Server Version Control Repositories
Once you have created the gradeable, you may create empty repositories
-for each student/team for that assignment. The provided script
-`generate_repos.py` creates a bare shared repository with restricted
-permissions
+for each student/team for that assignment if you are using the Submitty hosted
+VCS repositories. The provided script `generate_repos.py` creates a bare
+shared repository with restricted permissions.
The script accepts a `--help` flag to explain the arguments it
accepts. The basic usage:
@@ -66,15 +105,34 @@ team), the instructor(s), and the full access graders.
_TODO:_
-### Private, Instructor-Created Repositories (e.g., Github Classroom)
+### Private, Student-Created Repositories (e.g., Github)
_TODO:_
-### Private, Student-Created Repositories (e.g., Github)
+### External, Private, Instructor-Created Repositories (e.g., Gitlab or Github Classroom)
-_TODO:_
+__NOTE: Your Submitty server will need access to the student's repositories, whether
+that be adding a SSH key for private repositories, or having public
+repositories.__
+
+1. Create a group/organization with a simple name
+(e.g. `cptr101`. This part can be skipped if using the instructor's repositories.)
+
+2. Create a project within that group/organization with a simple name (e.g. `student101`)
+
+3. Clone the repository to your local IDE, and add your assignment(s).
+
+4. Create the course (if not already set up).
+
+5. Create the gradeable, selecting the proper gradeable type, in the required field,
+type the SSH clone link, but replace your user id with `{$user_id}`.
+E.g., `git@github.com:{$user_id}/student101.git`
+
+6. Give your students the URL to the repository, and instruct them to _fork_ it.
+
+__NOTE: Students user ids in Submitty need to be the same as your VCS system.__
### Uploading Instructor Provided Code to GIT
diff --git a/_docs/instructor/course_settings/rainbow_grades/customization_basics.md b/_docs/instructor/course_settings/rainbow_grades/customization_basics.md
index d3b35c88..d9add105 100644
--- a/_docs/instructor/course_settings/rainbow_grades/customization_basics.md
+++ b/_docs/instructor/course_settings/rainbow_grades/customization_basics.md
@@ -26,7 +26,6 @@ It can contain the following:
* ``"instructor_notes"``: Shows notes for early warnings, plagiarism, etc. only to the instructor
* ``"grade_summary"``: Shows the overall score and score for each syllabus bucket (e.g. Homework)
* ``"grade_details"``: Shows the score for each gradeable
-* ``"iclicker"``: Shows iClicker information including indivudal responses color-coded for correctness.
* ``"final_grade"``: Shows final grade letters and some statistics about the final grade distribution.
* ``"exam_seating"``: Shows exam seating assignments. To display the assignment on the Submitty course homepage,
the instructor should make sure "Display Rainbow Grades Custom Message" is enabled in "Course Settings" on the Submitty
diff --git a/_docs/instructor/course_settings/rainbow_grades/index.md b/_docs/instructor/course_settings/rainbow_grades/index.md
index e4c8b568..12b7873b 100644
--- a/_docs/instructor/course_settings/rainbow_grades/index.md
+++ b/_docs/instructor/course_settings/rainbow_grades/index.md
@@ -20,3 +20,12 @@ Use "Grade Summaries" option to export data for use with
[Rainbow Grades](/instructor/course_settings/rainbow_grades/index).
Or export to CSV using the "CSV Report" option.
+
+
+
+### Border Outline
+
+![](/images/border-outline-description.png)
+
+Border Outline assists users to discern status of specific gradeable.
+
diff --git a/_docs/instructor/course_settings/rainbow_grades/manual_setup.md b/_docs/instructor/course_settings/rainbow_grades/manual_setup.md
index 331b6aec..c7cbc8e6 100644
--- a/_docs/instructor/course_settings/rainbow_grades/manual_setup.md
+++ b/_docs/instructor/course_settings/rainbow_grades/manual_setup.md
@@ -179,3 +179,27 @@ redirect_from:
[SAMPLE_Makefile]: https://github.com/Submitty/RainbowGrades/blob/main/SAMPLE_Makefile
[SAMPLE_customization.json]: https://github.com/Submitty/RainbowGrades/blob/main/SAMPLE_customization.json
+
+[Drop lowest function]
+Although it is not yet implemented in web-GUI, RainbowGrades support drop lowest grade.
+Directly edit the customization.json file
+Here is a example usage, removing one lowest gradeable from given type
+
+ ```json
+{
+ "count": 8,
+ "percent": 0.12,
+ "type": "quiz",
+ "remove_lowest": 1,
+ "ids": [
+ {
+ "max": 10.0,
+ "id": "quiz01",
+ "percent": 0.125,
+ "released": true
+ }
+ ]
+}
+ ```
+
+
diff --git a/_docs/student/communication/markdown.md b/_docs/student/communication/markdown.md
index 11df0123..a132ef42 100644
--- a/_docs/student/communication/markdown.md
+++ b/_docs/student/communication/markdown.md
@@ -11,6 +11,27 @@ Submitty allows simple formatting using markdown in several
Click on the markdown symbol to enable formatting of your post
using markdown.
+* **Headings**
+ Adding a number of `#` and a space before text will make it a heading:
+
+ ```
+ # h1
+ ## h2
+ ### h3
+ #### h4
+ ##### h5
+ ###### h6
+ ```
+
+ You can alternatively create heading like this:
+
+ ```
+ Alt h1
+ =====
+
+ Alt h2
+ -----
+ ```
* **Links**
To add a hyperlink to `url` labeled with `display text`:
@@ -21,11 +42,15 @@ using markdown.
* **Italics**
- Adding `_` (one underscore) before and after text will italicize that text.
+ Adding `_` (one underscore) or `*` (one asterisk) before and after text will _italicize_ that text.
* **Bold**
- Adding `__` (two underscores) before and after text will make that text bold.
+ Adding `__` (two underscores) `**` (two asterisks) before and after text will make that text __bold__.
+
+
+* **Bold and Italics**
+ Adding `___` (three underscores) `***` (three asterisks) before and after text will make that text ___bold and italic___.
* **Inline Code**
@@ -34,27 +59,38 @@ using markdown.
* **Code Blocks**
- Adding ```` ``` ```` (a triple backtick) on blank lines above and below
- text will turn it into a code block. For example:
-
- ````
- ```
- int main() {
- printf("hello world\n");
- }
- ```
- ````
+ Adding ```` ``` ```` (a triple backtick) on blank lines above and below
+ text will turn it into a code block. You can also specify a language for syntax highlighting. For example:
+
+ ````
+ ```c++
+ int main() {
+ printf("hello world\n");
+ }
+ ```
+ ````
+ yields:
+
+ ```c++
+ int main() {
+ printf("hello world\n");
+ }
+ ```
* **Lists**
Adding `*` or numbers (ex. `1.`, `2.`, `3.`) followed by a space before text
- will create a bulleted or numbered list. For example:
+ will create a bulleted or numbered list. You can indent further for sub-items in the list. For example:
```
* Item 1
+ * Sub-Item 1
+ * Sub-Item 2
* Item 2
1. Item 1
2. Item 2
+ 1. Sub-Item 1
+ 2. Sub-Item 2
3. Item 3
```
diff --git a/_docs/student/submission/version_control.md b/_docs/student/submission/version_control.md
index f807c9fc..e66ab242 100644
--- a/_docs/student/submission/version_control.md
+++ b/_docs/student/submission/version_control.md
@@ -52,14 +52,52 @@ redirect_from:
_TODO:_
-### Private, Instructor-Created Repositories (e.g., Github Classroom)
+
+### Private, Student-Created Repositories (e.g., Github)
_TODO:_
-### Private, Student-Created Repositories (e.g., Github)
+### External, Private, Instructor-Created Repositories (e.g., Gitlab or Github Classroom)
+
+__NOTE: These instructions will help you fork and access the repository
+created by your instructor. Before you follow these instructions, if
+you are using private repositories, you will need to add a SSH key to
+your git system if your instructor has not already.__
+
+1. Navigate to the course repository specified by your
+ instructor. Duplicate this window, and leave one copy open, as you
+ will come back to it in step 4.
+
+2. Fork the repository, under your namespace.
+
+3. Clone the repository to your IDE using the 'Clone with SSH'
+ option. Using Github:
+
+ ```
+ git clone git@github.com:myusername/student101.git
+ ```
+
+4. Set the upstream repository using:
+
+ ```
+ git remote add upstream SSH_URL
+ ```
+
+ Replace `SSH_URL` with the 'Clone with SSH' URL from the
+ course repository window from step 1.
+
+5. To pull changes from the upstream repository, use the commands:
+
+ ```
+ git pull git fetch upstream git checkout main git merge upstream/main
+ ```
+
+ Replace `main` with your modified branch if the name is
+ different. Use the instructions listed below to push your changes.
+
+
-_TODO:_
### Committing Your Work
@@ -140,7 +178,7 @@ Currently your work is only on your local machine.
3. If you would like to submit this version of your work (for
automatic and/or manual grading), go to the Submitty website for
- this assignment and press the blue "Grade My Repository" button.
+ this assignment and press the green "Grade My Repository" button.
Submitty will checkout the latest version of your code committed
and pushed to the server, and will run any automated tests and
@@ -149,7 +187,7 @@ Currently your work is only on your local machine.
If you notice any problems with your work, you can modify the code
on your local machine, commit those changes, push the commit to the
- server, and then press the blue "Grade My Repository" button again.
+ server, and then press the green "Grade My Repository" button again.
4. _TODO: We eventually plan to add a 'hook' to trigger repository
@@ -246,4 +284,4 @@ branches and handling merge conflicts._
See also: [Instructor: Facilitating Student Submissions via GIT](/instructor/managing_git)
-See also: [System Administrator: Setting Up Internal Git](/sysadmin/git)
\ No newline at end of file
+See also: [System Administrator: Setting Up Internal Git](/sysadmin/git)
diff --git a/_docs/sysadmin/configuration/course_archiving.md b/_docs/sysadmin/configuration/course_archiving.md
index cd720fe3..65230a5a 100644
--- a/_docs/sysadmin/configuration/course_archiving.md
+++ b/_docs/sysadmin/configuration/course_archiving.md
@@ -40,7 +40,7 @@ still a work in progress._
or:
```
- select * from courses where semester='s18';
+ select * from courses where term='s18';
```
**status = 1**
@@ -59,13 +59,13 @@ still a work in progress._
3. Change the status values as desired, for example:
```
- update courses set status=2 where semester='s18' and course='csci1100';
+ update courses set status=2 where term='s18' and course='csci1100';
```
- or archive all courses for the semester:
+ or archive all courses for the term:
```
- update courses set status=2 where semester='s18';
+ update courses set status=2 where term='s18';
```
@@ -81,7 +81,7 @@ still a work in progress._
To prevent accidental modification, we recommend that you remove write
access from folders and files for archived courses. And we suggest
you consider switching the group for your course to limit access to
-the files of past semesters to the current instructors only.
+the files of past terms to the current instructors only.
```
chmod ugo-w /var/local/submitty/courses//
diff --git a/_docs/sysadmin/configuration/course_creation.md b/_docs/sysadmin/configuration/course_creation.md
index a6205372..06fe3b3a 100644
--- a/_docs/sysadmin/configuration/course_creation.md
+++ b/_docs/sysadmin/configuration/course_creation.md
@@ -57,10 +57,11 @@ redirect_from:
need to restart fpm to ensure that the webpage sees the change:_
```
- sudo service php8.4-fpm restart
+ sudo service php8.1-fpm restart
```
- _Note: Ubuntu 20.04 is using 7.4, but older versions might be using `php7.0-fpm`._
+ _Note: Depending on your version of Ubuntu, your version of php fpm will be different._
+
7. Give permissions to create new users and update apache configurations
@@ -118,10 +119,12 @@ redirect_from:
_Note: You will sometimes need to restart PHP-FPM after adding a course._
```
- sudo service php7.4-fpm restart
+ sudo service php8.1-fpm restart
```
- _Note: Ubuntu 20.04 is using 7.4, but older versions might be using `php7.0-fpm`._
+
+ _Note: Depending on your version of Ubuntu, your version of php fpm will be different._
+
You can confirm that a directory has been created and populated
with initial files in the data directory. For this example (if you
diff --git a/_docs/sysadmin/installation/index.md b/_docs/sysadmin/installation/index.md
index 5a825bee..d6006d40 100644
--- a/_docs/sysadmin/installation/index.md
+++ b/_docs/sysadmin/installation/index.md
@@ -24,7 +24,7 @@ will be able to read/execute it.
_Note: These instructions should be run under root/sudo._
-1. [Install Ubuntu 20.04 server edition (or other supported distro)](/sysadmin/installation/server_os)
+1. [Install Ubuntu 22.04 server edition (or other supported distro)](/sysadmin/installation/server_os)
Note: If you are duplicating an existing Submitty installation onto a new server, you should
synchronize `/etc/passwd`, `/etc/shadow`, `/etc/group`, and `/etc/gshadow` before installing
@@ -71,14 +71,14 @@ _Note: These instructions should be run under root/sudo._
4. Edit PHP Settings
We recommend for security that you modify your PHP installation and disable certain PHP functions.
- To do this, edit `/etc/php/7.4/fpm/php.ini` and find the entry for `disable_functions` and make sure the list of
+ To do this, edit `/etc/php/8.1/fpm/php.ini` and find the entry for `disable_functions` and make sure the list of
disabled functions contains:
```
- popen,pclose,proc_open,chmod,php_real_logo_guid,php_egg_logo_guid,php_ini_scanned_files,php_ini_loaded_file,readlink,symlink,link,set_file_buffer,proc_close,proc_terminate,proc_get_status,proc_nice,getmyuid,getmygid,getmyinode,putenv,get_current_user,magic_quotes_runtime,set_magic_quotes_runtime,import_request_variables,ini_alter,stream_socket_server,stream_socket_accept,stream_socket_pair,stream_get_transports,stream_wrapper_restore,mb_send_mail,openlog,syslog,closelog,pfsockopen,posix_kill,apache_child_terminate,apache_get_modules,apache_get_version,apache_lookup_uri,apache_reset_timeout,apache_response_headers,virtual,system,phpinfo,exec,shell_exec,passthru,
+ popen,pclose,proc_open,php_real_logo_guid,php_egg_logo_guid,php_ini_scanned_files,php_ini_loaded_file,readlink,symlink,link,set_file_buffer,proc_close,proc_terminate,proc_get_status,proc_nice,getmyuid,getmygid,getmyinode,putenv,get_current_user,magic_quotes_runtime,set_magic_quotes_runtime,import_request_variables,ini_alter,stream_socket_server,stream_socket_accept,stream_socket_pair,stream_get_transports,stream_wrapper_restore,mb_send_mail,openlog,syslog,closelog,pfsockopen,posix_kill,apache_child_terminate,apache_get_modules,apache_get_version,apache_lookup_uri,apache_reset_timeout,apache_response_headers,virtual,system,phpinfo,exec,shell_exec,passthru,disk_free_space,disk_total_space,diskfreespace,getlastmo,getmypid,extract,parse_str,mail,fsockopen,posix_setpgid,posix_setsid,posix_setuid,exif_read_data,read_exif_data,exif_thumbnail,exif_imagetype,tempnam,
```
- _Note: Ubuntu 20.04 is using 7.4, but older versions might be using `php7.0-fpm`._
+ _Note: Depending on your version of Ubuntu, your version of php fpm will be different._
5. Setup Apache
@@ -141,7 +141,59 @@ _Note: These instructions should be run under root/sudo._
At this point, you should be able to access the site by going to `your_domain`
through a browser.
-6. We recommend that you should leave the PostgreSQL setup unless you know what
+6. Configure NGINX
+
+ Submitty uses a NGINX server to proxy the websocket server. By default
+ the websocket server will run without HTTPS. If Apache is configured with
+ HTTPS then websockets must also be configured with HTTPS or they will
+ not connect. To setup HTTPS on NGINX,
+ modify `/etc/nginx/sites-available/submitty.conf` and put the following:
+
+ ```
+ server {
+ # SSL configuration
+ listen 8443 ssl default_server;
+ listen [::]:8443 ssl default_server;
+
+ #dont show OS or version identity
+ server_tokens off;
+
+ ssl on;
+ ssl_certificate /etc/apache2/ssl/submitty-demo.pem;
+ ssl_certificate_key /etc/apache2/ssl/submitty-demo.key;
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_prefer_server_ciphers on;
+ ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:RC4-SHA;
+ ssl_session_cache shared:SSL:10m;
+
+ server_name _;
+
+ location / {
+ return 404;
+ }
+
+ location /ws {
+ proxy_pass http://unix:/var/local/submitty/run/websocket/server.sock:;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "Upgrade";
+ proxy_set_header Host $host;
+ }
+ }
+ ```
+
+ You should modify the values for `ssl_certificate` and `ssl_certificate_key`
+ to point to your SSL certificate and private key.
+
+ To create the `.pem` file required by NGINX, combine the existing
+ `chain.cer` cert chain with the `submitty.cer` file:
+
+ ```
+ cp submitty.cer submitty.pem
+ cat chain.cer >> submitty.pem
+ ```
+
+7. We recommend that you should leave the PostgreSQL setup unless you know what
you're doing. If you are running PostgreSQL on the same server as Submitty,
we recommend using the UNIX socket, and to disable TCP if unused. By default,
the socket is found at `/var/run/postgresql`, and disabling TCP is done through
@@ -158,12 +210,12 @@ _Note: These instructions should be run under root/sudo._
- If you intend to run the [Student Registration Feed](/sysadmin/configuration/registration_feed), do not
disable TCP.
-7. Test apache config with: `apache2ctl -t`
+8. Test apache config with: `apache2ctl -t`
If everything looks ok, restart apache with: `service apache2 restart'
-8. We suggest reviewing [Additional System Customizations](/sysadmin/installation/system_customization)
+9. We suggest reviewing [Additional System Customizations](/sysadmin/installation/system_customization)
that might be appropriate for your installation.
@@ -209,6 +261,7 @@ _Note: These instructions should be run under root/sudo._
- `Require all granted`
- **Installation Fails During NTP Setup**
- 1. This is indicative that you installed the Ubuntu 20.04 "Live" server.
+
+ 1. This is indicative that you installed the Ubuntu 2X.04 "Live" server.
"Live" server is unsupported. Please install the traditional server.
Please see the [Server OS](/sysadmin/installation/server_os) page for more details.
diff --git a/_docs/sysadmin/installation/server_os.md b/_docs/sysadmin/installation/server_os.md
index bde21d6e..3e7892c9 100644
--- a/_docs/sysadmin/installation/server_os.md
+++ b/_docs/sysadmin/installation/server_os.md
@@ -12,8 +12,9 @@ the following platforms:
| Distro | Version | Supported | Release Page |
|--------|---------|----------------------|--------------|
-| Ubuntu | 20.04 | Yes | [Release Page](http://releases.ubuntu.com/focal/)
-| Ubuntu | 18.04 | Yes | [Release Page](http://releases.ubuntu.com/bionic/)
+| Ubuntu | 22.04 | Yes | [Release Page](http://releases.ubuntu.com/jammy/)
+| Ubuntu | 20.04 | No (Since 07/2023) | [Release Page](http://releases.ubuntu.com/focal/)
+| Ubuntu | 18.04 | No | [Release Page](http://releases.ubuntu.com/bionic/)
| Ubuntu | 16.04 | No (Since 05/2019) | [Release Page](http://releases.ubuntu.com/xenial/)
| Debian | 8 | No (Since 05/2019) | [Release Page](https://www.debian.org/releases/jessie/)
diff --git a/_docs/sysadmin/installation/system_customization.md b/_docs/sysadmin/installation/system_customization.md
index 6a4e3175..a9333fa8 100644
--- a/_docs/sysadmin/installation/system_customization.md
+++ b/_docs/sysadmin/installation/system_customization.md
@@ -134,7 +134,7 @@ allowed to connect more frequently.
To improve the security of the system, it might be useful to disable various unused PHP functions. This can be done by modifying the [disabled_functions](https://secure.php.net/manual/en/ini.core.php#ini.disable-functions) directive. Provided below is the setting used within our Vagrant and live setup:
```
-disable_functions = popen,pclose,proc_open,chmod,php_real_logo_guid,php_egg_logo_guid,php_ini_scanned_files,php_ini_loaded_file,readlink,symlink,link,set_file_buffer,proc_close,proc_terminate,proc_get_status,proc_nice,getmyuid,getmygid,getmyinode,putenv,get_current_user,magic_quotes_runtime,set_magic_quotes_runtime,import_request_variables,ini_alter,stream_socket_client,stream_socket_server,stream_socket_accept,stream_socket_pair,stream_get_transports,stream_wrapper_restore,mb_send_mail,openlog,syslog,closelog,pfsockopen,posix_kill,apache_child_terminate,apache_get_modules,apache_get_version,apache_lookup_uri,apache_reset_timeout,apache_response_headers,virtual,system,phpinfo,exec,shell_exec,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
+disable_functions = popen,pclose,proc_open,php_real_logo_guid,php_egg_logo_guid,php_ini_scanned_files,php_ini_loaded_file,readlink,symlink,link,set_file_buffer,proc_close,proc_terminate,proc_get_status,proc_nice,getmyuid,getmygid,getmyinode,putenv,get_current_user,magic_quotes_runtime,set_magic_quotes_runtime,import_request_variables,ini_alter,stream_socket_client,stream_socket_server,stream_socket_accept,stream_socket_pair,stream_get_transports,stream_wrapper_restore,mb_send_mail,openlog,syslog,closelog,pfsockopen,posix_kill,apache_child_terminate,apache_get_modules,apache_get_version,apache_lookup_uri,apache_reset_timeout,apache_response_headers,virtual,system,phpinfo,exec,shell_exec,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,disk_free_space,disk_total_space,diskfreespace,getlastmo,getmypid,extract,parse_str,mail,fsockopen,posix_setpgid,posix_setsid,posix_setuid,exif_read_data,read_exif_data,exif_thumbnail,exif_imagetype,tempnam,
```
However, this should be only applied to the `php.ini` running the web server and not applied to the `cgi/php.ini` which does require some of these functions to function properly.
@@ -147,7 +147,7 @@ By default, PHP only allows 20 files to be uploaded at a time.
This limit is probably sufficient, but to change this limit, edit:
```
-/etc/php/7.4/fpm/php.ini
+/etc/php/8.1/fpm/php.ini
```
and modify the variable:
@@ -159,7 +159,7 @@ max_file_uploads = 20
Then restart PHP
```
-systemctl reload php7.4-fpm
+systemctl reload php8.1-fpm
```
## Allowing Large Student File Upload Submissions
@@ -172,10 +172,10 @@ value, view/edit this file:
```
-/etc/php/7.4/fpm/php.ini
+/etc/php/8.1/fpm/php.ini
```
-_Note: Ubuntu 20.04 is using 7.4, but older versions might be using `php7.0-fpm`._
+_Note: Depending on your version of Ubuntu, your version of php fpm will be different._
Change these variables as appropriate:
@@ -192,17 +192,17 @@ And restart apache:
```
sudo systemctl restart apache2.service
-sudo systemctl restart php7.4-fpm.service
+sudo systemctl restart php8.1-fpm.service
```
and/or
```
sudo service apache2 restart
-sudo service php7.4-fpm restart
+sudo service php8.1-fpm restart
```
-_Note: Ubuntu 20.04 is using 7.4, but older versions might be using `php7.0-fpm`._
+_Note: Depending on your version of Ubuntu, your version of php fpm will be different._
By default, a Submitty electronic gradeable allows students to upload
files totaling 100KB. Instructors can adjust this limit per gradeable
@@ -214,7 +214,7 @@ in the `config.json`, for example:
```
If you are having difficulty with student upload size, you can modify the
-following in `/etc/php/7.4/fpm/php.ini`:
+following in `/etc/php/8.1/fpm/php.ini`:
```
memory_limit
@@ -230,7 +230,7 @@ students are using the system at once.
## Tune the performance of the website to handle a large number of users
-Reading the PHP memory limit from `/etc/php/7.4/fpm/php.ini`
+Reading the PHP memory limit from `/etc/php/8.1/fpm/php.ini`
```
memory_limit =
@@ -247,14 +247,14 @@ restart apache and php-fpm:
```
sudo systemctl restart apache2.service
-sudo systemctl restart php7.4-fpm.service
+sudo systemctl restart php8.1-fpm.service
```
#### PHP-FPM settings using the static process manager
-Adjust the following settings in `/etc/php/7.4/fpm/pool.d/submitty.conf`.
+Adjust the following settings in `/etc/php/8.1/fpm/pool.d/submitty.conf`.
We have found that the following settings work well for a production
server with approximately 2000 students. The commented out line is
@@ -277,7 +277,7 @@ can be used to calculate a `pm.max_children` value for your server
#### PHP-FPM settings using the dynamic process manager
-Adjust the following settings in `/etc/php/7.4/fpm/pool.d/submitty.conf`.
+Adjust the following settings in `/etc/php/8.1/fpm/pool.d/submitty.conf`.
The commented out line is the default value. Please read the documentation
to determine values that are appropriate for your own system.
diff --git a/_docs/sysadmin/installation/version_notes/v23.07.00.md b/_docs/sysadmin/installation/version_notes/v23.07.00.md
new file mode 100644
index 00000000..6624279b
--- /dev/null
+++ b/_docs/sysadmin/installation/version_notes/v23.07.00.md
@@ -0,0 +1,21 @@
+---
+title: v23.07.00 > Upgrade to Ubuntu 22.04 / PHP8
+category: System Administrator > Installation Version Notes
+redirect_from:
+ - /system_admin/version_notes/v23.07.00
+ - /sysadmin/version_notes/v23.07.00
+---
+
+Release [v23.07.00](https://github.com/Submitty/Submitty/releases/v23.07.00)
+includes software updates to run on Ubuntu 22.04 and PHP8.
+
+1. Unfortunately, these updates WILL NOT run on a default
+ Ubuntu 20.04 / PHP 7.4 system, so it is required that you
+ update your primary server's operating system,
+ and the operating system of any autograding worker machines
+ before installing Submitty v23.07.00.
+
+2. The list of disabled PHP functions must also be updated to remove
+ `chmod`. `chmod` must now be allowed. See also
+ [System Customization - Disable PHP Functions](/sysadmin/installation/system_customization#disable-php-functions)
+
diff --git a/_docs/sysadmin/installation/worker_installation.md b/_docs/sysadmin/installation/worker_installation.md
index afe4239e..d7213a81 100644
--- a/_docs/sysadmin/installation/worker_installation.md
+++ b/_docs/sysadmin/installation/worker_installation.md
@@ -21,7 +21,7 @@ for your needs (as the script installs all of the dependencies that Submitty dep
_Note: These instructions should be run under root/sudo._
-1. [Install Ubuntu 20.04 server edition](/sysadmin/installation/server_os)
+1. [Install Ubuntu 22.04 server edition](/sysadmin/installation/server_os)
2. Create a ```submitty``` user on the machine. You may choose a different user name,
but the user should only be used for submitty autograding.
@@ -49,15 +49,8 @@ _Note: These instructions should be run under root/sudo._
You will be asked to provide the name of your submitty user by the
[CONFIGURE_SUBMITTY.py script](https://github.com/Submitty/Submitty/blob/master/.setup/CONFIGURE_SUBMITTY.py).
-6. Run installations specific to your university, installing any necessary languages,
- library, or software for your autograding tasks.
- For example: [RPI Computer Science specific installations](https://github.com/Submitty/Submitty/blob/master/.setup/distro_setup/ubuntu/rpi.sh)
- ```
- sudo bash /usr/local/submitty/GIT_CHECKOUT/Submitty/.setup/distro_setup/ubuntu/rpi.sh
- ```
-
-7. Add the submitty user to the ```submitty_daemon```, ```submitty_daemonphp```, and ```docker```
+6. Add the submitty user to the ```submitty_daemon```, ```submitty_daemonphp```, and ```docker```
groups.
```
@@ -66,7 +59,7 @@ _Note: These instructions should be run under root/sudo._
sudo usermod -a -G docker YOUR_SUBMITTY_USER
```
-8. Next, we must set up an ssh key so that submitty_daemon user on the primary
+7. Next, we must set up an ssh key so that submitty_daemon user on the primary
machine can copy files to our worker machine.
On primary submitty:
@@ -79,7 +72,7 @@ _Note: These instructions should be run under root/sudo._
ssh-copy-id -i ~/.ssh/id_rsa.pub SUBMITTY_USER@HOSTNAME
```
-9. Finally, we must add the machine to the list of workers available to our
+8. Finally, we must add the machine to the list of workers available to our
primary machine. To do this:
* Log on to the primary Submitty machine.
* Open ```/usr/local/submitty/config/autograding_workers.json``` with your favorite text editor.
diff --git a/_docs/sysadmin/troubleshooting/system_debugging.md b/_docs/sysadmin/troubleshooting/system_debugging.md
index 27e6c40a..be6dfb3d 100644
--- a/_docs/sysadmin/troubleshooting/system_debugging.md
+++ b/_docs/sysadmin/troubleshooting/system_debugging.md
@@ -80,4 +80,15 @@ redirect_from:
When you replace your `.cert` file for apache, be sure to also
replace the `.pem` file for nginx. See also
- [v20.09.00 NGINX for Websocket Request](/sysadmin/installation/version_notes/v20.09.00).
\ No newline at end of file
+ [v20.09.00 NGINX for Websocket Request](/sysadmin/installation/version_notes/v20.09.00).
+
+### Testing Websockets while NGINX is closed
+
+
+ * We want to make sure that the site remains 100% functional, minus the live updates, when Websockets are down
+ to test this you can stop NGINX in vagrant ssh to recreate this behavior by typing in:
+
+ ```
+ sudo systemctl stop nginx
+ ```
+ with nginx stopped you can test functions of the site without being connected to the websocket client.
diff --git a/images/ChangePasswordForm.png b/images/ChangePasswordForm.png
index aa114771..64fa73c8 100644
Binary files a/images/ChangePasswordForm.png and b/images/ChangePasswordForm.png differ
diff --git a/images/DatepickerClose.png b/images/DatepickerClose.png
index 7a21183e..49706846 100644
Binary files a/images/DatepickerClose.png and b/images/DatepickerClose.png differ
diff --git a/images/DatepickerSingleNever.png b/images/DatepickerSingleNever.png
index 38f777f9..57b818d1 100644
Binary files a/images/DatepickerSingleNever.png and b/images/DatepickerSingleNever.png differ
diff --git a/images/DatepickerSingleNow.png b/images/DatepickerSingleNow.png
index d51b59df..9a8c03bd 100644
Binary files a/images/DatepickerSingleNow.png and b/images/DatepickerSingleNow.png differ
diff --git a/images/DatepickerSingleSoon.png b/images/DatepickerSingleSoon.png
index 326dbcc0..1eda31a7 100644
Binary files a/images/DatepickerSingleSoon.png and b/images/DatepickerSingleSoon.png differ
diff --git a/images/GSoC-Vertical.png b/images/GSoC-Vertical.png
index a6feb81c..37d7e126 100644
Binary files a/images/GSoC-Vertical.png and b/images/GSoC-Vertical.png differ
diff --git a/images/GSoC.png b/images/GSoC.png
index 1dd7b958..ede1d651 100644
Binary files a/images/GSoC.png and b/images/GSoC.png differ
diff --git a/images/GSoC_padding.png b/images/GSoC_padding.png
index d7e34eff..a068ac15 100644
Binary files a/images/GSoC_padding.png and b/images/GSoC_padding.png differ
diff --git a/images/Homepage.png b/images/Homepage.png
index 1e3dd48f..4e9f289f 100644
Binary files a/images/Homepage.png and b/images/Homepage.png differ
diff --git a/images/HomepagePassword.png b/images/HomepagePassword.png
index 9b9152b0..fa942f51 100644
Binary files a/images/HomepagePassword.png and b/images/HomepagePassword.png differ
diff --git a/images/LateDays.png b/images/LateDays.png
index cbfc4eea..de612006 100644
Binary files a/images/LateDays.png and b/images/LateDays.png differ
diff --git a/images/Login.png b/images/Login.png
index 2374a1e1..b6ab4e4d 100644
Binary files a/images/Login.png and b/images/Login.png differ
diff --git a/images/NavigationPageForTA.png b/images/NavigationPageForTA.png
index 15b14bea..46838a65 100644
Binary files a/images/NavigationPageForTA.png and b/images/NavigationPageForTA.png differ
diff --git a/images/NavigationStudent.png b/images/NavigationStudent.png
index 0869a794..0e2bc538 100644
Binary files a/images/NavigationStudent.png and b/images/NavigationStudent.png differ
diff --git a/images/OverrideEmpty.png b/images/OverrideEmpty.png
index 6c89b953..84e20ca7 100644
Binary files a/images/OverrideEmpty.png and b/images/OverrideEmpty.png differ
diff --git a/images/OverrideEntered.png b/images/OverrideEntered.png
index d1a1808f..d67b1e9b 100644
Binary files a/images/OverrideEntered.png and b/images/OverrideEntered.png differ
diff --git a/images/OverrideMultipleOther.png b/images/OverrideMultipleOther.png
index 3218b20b..efc15d92 100644
Binary files a/images/OverrideMultipleOther.png and b/images/OverrideMultipleOther.png differ
diff --git a/images/OverrideSelected.png b/images/OverrideSelected.png
index 666b0b39..905d62c3 100644
Binary files a/images/OverrideSelected.png and b/images/OverrideSelected.png differ
diff --git a/images/PreferredNameForm.png b/images/PreferredNameForm.png
index 41d5fca2..c0a217c4 100644
Binary files a/images/PreferredNameForm.png and b/images/PreferredNameForm.png differ
diff --git a/images/RCOS.png b/images/RCOS.png
index ef0f9372..d455e02b 100644
Binary files a/images/RCOS.png and b/images/RCOS.png differ
diff --git a/images/RCOS_padding.png b/images/RCOS_padding.png
index 87c9a0c8..f683ba6b 100644
Binary files a/images/RCOS_padding.png and b/images/RCOS_padding.png differ
diff --git a/images/RCOS_report/2023_Mahi_Pasarkar/cal-menu.png b/images/RCOS_report/2023_Mahi_Pasarkar/cal-menu.png
new file mode 100644
index 00000000..f8b725df
Binary files /dev/null and b/images/RCOS_report/2023_Mahi_Pasarkar/cal-menu.png differ
diff --git a/images/RCOS_report/2023_Mahi_Pasarkar/cal-new.png b/images/RCOS_report/2023_Mahi_Pasarkar/cal-new.png
new file mode 100644
index 00000000..ce454506
Binary files /dev/null and b/images/RCOS_report/2023_Mahi_Pasarkar/cal-new.png differ
diff --git a/images/RCOS_report/2023_Mahi_Pasarkar/cal-old.png b/images/RCOS_report/2023_Mahi_Pasarkar/cal-old.png
new file mode 100644
index 00000000..67d02cf1
Binary files /dev/null and b/images/RCOS_report/2023_Mahi_Pasarkar/cal-old.png differ
diff --git a/images/RPI_seal.png b/images/RPI_seal.png
index e65976ef..aeb164ed 100644
Binary files a/images/RPI_seal.png and b/images/RPI_seal.png differ
diff --git a/images/RPI_seal_padding.png b/images/RPI_seal_padding.png
index e77794ab..7f2fc8ae 100644
Binary files a/images/RPI_seal_padding.png and b/images/RPI_seal_padding.png differ
diff --git a/images/Rollback.png b/images/Rollback.png
index 8d86c2c8..b8120d05 100644
Binary files a/images/Rollback.png and b/images/Rollback.png differ
diff --git a/images/Rollback2.png b/images/Rollback2.png
index 3851674f..51aad73f 100644
Binary files a/images/Rollback2.png and b/images/Rollback2.png differ
diff --git a/images/Submission.png b/images/Submission.png
index b4f4fd8f..8e4bb61e 100644
Binary files a/images/Submission.png and b/images/Submission.png differ
diff --git a/images/Submission_Files.png b/images/Submission_Files.png
index d07ee26a..b06e5b0f 100644
Binary files a/images/Submission_Files.png and b/images/Submission_Files.png differ
diff --git a/images/Submission_Result_Buggy.png b/images/Submission_Result_Buggy.png
index f2c94ad8..51425387 100644
Binary files a/images/Submission_Result_Buggy.png and b/images/Submission_Result_Buggy.png differ
diff --git a/images/TAOverriden1.png b/images/TAOverriden1.png
index a3d8b562..496e2a4f 100644
Binary files a/images/TAOverriden1.png and b/images/TAOverriden1.png differ
diff --git a/images/TAOverriden2.png b/images/TAOverriden2.png
index 01aee71c..758d2c92 100644
Binary files a/images/TAOverriden2.png and b/images/TAOverriden2.png differ
diff --git a/images/TAgradereport.png b/images/TAgradereport.png
index 7de2ed3e..e4434b47 100644
Binary files a/images/TAgradereport.png and b/images/TAgradereport.png differ
diff --git a/images/TestCaseDetails.png b/images/TestCaseDetails.png
index a12b1c67..23da917a 100644
Binary files a/images/TestCaseDetails.png and b/images/TestCaseDetails.png differ
diff --git a/images/Virtualization_Instructions_1.png b/images/Virtualization_Instructions_1.png
index a18f83f9..10628630 100644
Binary files a/images/Virtualization_Instructions_1.png and b/images/Virtualization_Instructions_1.png differ
diff --git a/images/access_level.png b/images/access_level.png
index 8cef7361..fc7fdbff 100644
Binary files a/images/access_level.png and b/images/access_level.png differ
diff --git a/images/border-outline-description.png b/images/border-outline-description.png
new file mode 100644
index 00000000..6d6a405d
Binary files /dev/null and b/images/border-outline-description.png differ
diff --git a/images/bulkupload_assignedpages.png b/images/bulkupload_assignedpages.png
index 02a128c7..b506298d 100644
Binary files a/images/bulkupload_assignedpages.png and b/images/bulkupload_assignedpages.png differ
diff --git a/images/bulkupload_autogradingconfig.png b/images/bulkupload_autogradingconfig.png
index dcd93b0a..9d6a3ebe 100644
Binary files a/images/bulkupload_autogradingconfig.png and b/images/bulkupload_autogradingconfig.png differ
diff --git a/images/bulkupload_labeling.png b/images/bulkupload_labeling.png
index 9f4e23bb..36cfbde9 100644
Binary files a/images/bulkupload_labeling.png and b/images/bulkupload_labeling.png differ
diff --git a/images/bulkupload_newgradeable.png b/images/bulkupload_newgradeable.png
index d8f78672..71d24dfc 100644
Binary files a/images/bulkupload_newgradeable.png and b/images/bulkupload_newgradeable.png differ
diff --git a/images/bulkupload_submission.png b/images/bulkupload_submission.png
index 437bdf89..b62472fb 100644
Binary files a/images/bulkupload_submission.png and b/images/bulkupload_submission.png differ
diff --git a/images/bulkupload_submission_qr.png b/images/bulkupload_submission_qr.png
index e5e61aaa..a2e04469 100644
Binary files a/images/bulkupload_submission_qr.png and b/images/bulkupload_submission_qr.png differ
diff --git a/images/bulkuploadsubmission_ocr.png b/images/bulkuploadsubmission_ocr.png
index 37a313bf..6cb0dae6 100644
Binary files a/images/bulkuploadsubmission_ocr.png and b/images/bulkuploadsubmission_ocr.png differ
diff --git a/images/change_theme.png b/images/change_theme.png
index 0f3354c3..ae896975 100644
Binary files a/images/change_theme.png and b/images/change_theme.png differ
diff --git a/images/change_theme_black.png b/images/change_theme_black.png
index fa8da5b9..e435c8d9 100644
Binary files a/images/change_theme_black.png and b/images/change_theme_black.png differ
diff --git a/images/choose_hw.png b/images/choose_hw.png
index fc609446..290f27a9 100644
Binary files a/images/choose_hw.png and b/images/choose_hw.png differ
diff --git a/images/config_path_interface.png b/images/config_path_interface.png
index 97e4fbd1..2d3c4ab5 100644
Binary files a/images/config_path_interface.png and b/images/config_path_interface.png differ
diff --git a/images/config_repo_box.png b/images/config_repo_box.png
index f8d0bb2e..a0c3715f 100644
Binary files a/images/config_repo_box.png and b/images/config_repo_box.png differ
diff --git a/images/config_upload_interface.png b/images/config_upload_interface.png
index eee49876..cd3d4e94 100644
Binary files a/images/config_upload_interface.png and b/images/config_upload_interface.png differ
diff --git a/images/course_materials_all_changed.png b/images/course_materials_all_changed.png
index efbb830c..28ed0537 100644
Binary files a/images/course_materials_all_changed.png and b/images/course_materials_all_changed.png differ
diff --git a/images/course_materials_checkbox.png b/images/course_materials_checkbox.png
index 171fe1bc..d62144d0 100644
Binary files a/images/course_materials_checkbox.png and b/images/course_materials_checkbox.png differ
diff --git a/images/course_materials_date.png b/images/course_materials_date.png
index ddf0302b..e591aebb 100644
Binary files a/images/course_materials_date.png and b/images/course_materials_date.png differ
diff --git a/images/course_materials_delete.png b/images/course_materials_delete.png
index bfe2d056..91047307 100644
Binary files a/images/course_materials_delete.png and b/images/course_materials_delete.png differ
diff --git a/images/course_materials_download.png b/images/course_materials_download.png
index e328b9a0..a3fef149 100644
Binary files a/images/course_materials_download.png and b/images/course_materials_download.png differ
diff --git a/images/course_materials_folder.png b/images/course_materials_folder.png
index b52d44b5..a59b2e94 100644
Binary files a/images/course_materials_folder.png and b/images/course_materials_folder.png differ
diff --git a/images/course_materials_individual_folder_done.png b/images/course_materials_individual_folder_done.png
index 368d3b44..3973de3a 100644
Binary files a/images/course_materials_individual_folder_done.png and b/images/course_materials_individual_folder_done.png differ
diff --git a/images/course_materials_legend.png b/images/course_materials_legend.png
index e315aa32..dd7537ec 100644
Binary files a/images/course_materials_legend.png and b/images/course_materials_legend.png differ
diff --git a/images/course_materials_open_all.png b/images/course_materials_open_all.png
index d63ca1fc..5090ecb7 100644
Binary files a/images/course_materials_open_all.png and b/images/course_materials_open_all.png differ
diff --git a/images/course_materials_option_subdir.png b/images/course_materials_option_subdir.png
index f2cc775e..e0dcaff4 100644
Binary files a/images/course_materials_option_subdir.png and b/images/course_materials_option_subdir.png differ
diff --git a/images/course_materials_overview.png b/images/course_materials_overview.png
index 90282212..8b97c440 100644
Binary files a/images/course_materials_overview.png and b/images/course_materials_overview.png differ
diff --git a/images/course_materials_popup.png b/images/course_materials_popup.png
index e2791918..d24c3bab 100644
Binary files a/images/course_materials_popup.png and b/images/course_materials_popup.png differ
diff --git a/images/course_materials_set_all_picker.png b/images/course_materials_set_all_picker.png
index 097e460f..c651201d 100644
Binary files a/images/course_materials_set_all_picker.png and b/images/course_materials_set_all_picker.png differ
diff --git a/images/course_materials_set_all_popup.png b/images/course_materials_set_all_popup.png
index cabfa00c..3c346abd 100644
Binary files a/images/course_materials_set_all_popup.png and b/images/course_materials_set_all_popup.png differ
diff --git a/images/course_materials_set_folder_button.png b/images/course_materials_set_folder_button.png
index 1ca2aa62..b5038310 100644
Binary files a/images/course_materials_set_folder_button.png and b/images/course_materials_set_folder_button.png differ
diff --git a/images/course_materials_set_indiv_folder_popup.png b/images/course_materials_set_indiv_folder_popup.png
index 849b7aea..48695b85 100644
Binary files a/images/course_materials_set_indiv_folder_popup.png and b/images/course_materials_set_indiv_folder_popup.png differ
diff --git a/images/course_materials_set_individual_never.png b/images/course_materials_set_individual_never.png
index 909e717e..7c33b5de 100644
Binary files a/images/course_materials_set_individual_never.png and b/images/course_materials_set_individual_never.png differ
diff --git a/images/course_materials_set_individual_now.png b/images/course_materials_set_individual_now.png
index 821956ec..4b586536 100644
Binary files a/images/course_materials_set_individual_now.png and b/images/course_materials_set_individual_now.png differ
diff --git a/images/course_materials_share.png b/images/course_materials_share.png
index e79c0cf9..b327b6d3 100644
Binary files a/images/course_materials_share.png and b/images/course_materials_share.png differ
diff --git a/images/course_materials_upload_button.png b/images/course_materials_upload_button.png
index 635b10ff..fd8763ae 100644
Binary files a/images/course_materials_upload_button.png and b/images/course_materials_upload_button.png differ
diff --git a/images/course_materials_upload_form_v2.png b/images/course_materials_upload_form_v2.png
index 58ce3c9c..d1078e9d 100644
Binary files a/images/course_materials_upload_form_v2.png and b/images/course_materials_upload_form_v2.png differ
diff --git a/images/course_materials_upload_form_v3.png b/images/course_materials_upload_form_v3.png
index e064d7e8..40d3eadf 100644
Binary files a/images/course_materials_upload_form_v3.png and b/images/course_materials_upload_form_v3.png differ
diff --git a/images/create_gradeable_git.png b/images/create_gradeable_git.png
index 3a346b6b..67a694d3 100644
Binary files a/images/create_gradeable_git.png and b/images/create_gradeable_git.png differ
diff --git a/images/data_entry.png b/images/data_entry.png
index ccdc1961..d10a42a3 100644
Binary files a/images/data_entry.png and b/images/data_entry.png differ
diff --git a/images/data_entry_ORIGINAL.png b/images/data_entry_ORIGINAL.png
index bd5e4c83..ac540ec4 100644
Binary files a/images/data_entry_ORIGINAL.png and b/images/data_entry_ORIGINAL.png differ
diff --git a/images/database_course_entity_graph.png b/images/database_course_entity_graph.png
index 438edf4f..cfe47deb 100644
Binary files a/images/database_course_entity_graph.png and b/images/database_course_entity_graph.png differ
diff --git a/images/database_entity_graph.png b/images/database_entity_graph.png
index 89fa30fc..8f26d81e 100644
Binary files a/images/database_entity_graph.png and b/images/database_entity_graph.png differ
diff --git a/images/discussion_forum_icons/df_bookmark.png b/images/discussion_forum_icons/df_bookmark.png
index 126ea9da..12a6fee7 100644
Binary files a/images/discussion_forum_icons/df_bookmark.png and b/images/discussion_forum_icons/df_bookmark.png differ
diff --git a/images/discussion_forum_icons/df_checkmark.png b/images/discussion_forum_icons/df_checkmark.png
index 1326bc86..3d7fbb74 100644
Binary files a/images/discussion_forum_icons/df_checkmark.png and b/images/discussion_forum_icons/df_checkmark.png differ
diff --git a/images/discussion_forum_icons/df_lock.png b/images/discussion_forum_icons/df_lock.png
index dfa8ffc8..e50d86d9 100644
Binary files a/images/discussion_forum_icons/df_lock.png and b/images/discussion_forum_icons/df_lock.png differ
diff --git a/images/discussion_forum_icons/df_question_mark.png b/images/discussion_forum_icons/df_question_mark.png
index b54efbe1..8d888f44 100644
Binary files a/images/discussion_forum_icons/df_question_mark.png and b/images/discussion_forum_icons/df_question_mark.png differ
diff --git a/images/discussion_forum_icons/df_thumbtack.png b/images/discussion_forum_icons/df_thumbtack.png
index 92cc87a0..fce52d21 100644
Binary files a/images/discussion_forum_icons/df_thumbtack.png and b/images/discussion_forum_icons/df_thumbtack.png differ
diff --git a/images/ex_tree.png b/images/ex_tree.png
index aef8eae8..d6aa1139 100644
Binary files a/images/ex_tree.png and b/images/ex_tree.png differ
diff --git a/images/files_for_compilation.png b/images/files_for_compilation.png
index b696f1fd..500554af 100644
Binary files a/images/files_for_compilation.png and b/images/files_for_compilation.png differ
diff --git a/images/files_for_runner.png b/images/files_for_runner.png
index ade53858..21f466bc 100644
Binary files a/images/files_for_runner.png and b/images/files_for_runner.png differ
diff --git a/images/files_for_validation.png b/images/files_for_validation.png
index 1946bf92..5839bb11 100644
Binary files a/images/files_for_validation.png and b/images/files_for_validation.png differ
diff --git a/images/hector_rodriguez_ms/submitty_autograder_before.png b/images/hector_rodriguez_ms/submitty_autograder_before.png
index 2b284efd..dc1848dd 100644
Binary files a/images/hector_rodriguez_ms/submitty_autograder_before.png and b/images/hector_rodriguez_ms/submitty_autograder_before.png differ
diff --git a/images/hector_rodriguez_ms/submitty_autograder_scheduler_logs.png b/images/hector_rodriguez_ms/submitty_autograder_scheduler_logs.png
index a3ba0487..5384b7d3 100644
Binary files a/images/hector_rodriguez_ms/submitty_autograder_scheduler_logs.png and b/images/hector_rodriguez_ms/submitty_autograder_scheduler_logs.png differ
diff --git a/images/hector_rodriguez_ms/submitty_autograder_with_scheduler.png b/images/hector_rodriguez_ms/submitty_autograder_with_scheduler.png
index 109e3f4b..3c6e18c7 100644
Binary files a/images/hector_rodriguez_ms/submitty_autograder_with_scheduler.png and b/images/hector_rodriguez_ms/submitty_autograder_with_scheduler.png differ
diff --git a/images/installation_update.png b/images/installation_update.png
index e386d242..d7a80c40 100644
Binary files a/images/installation_update.png and b/images/installation_update.png differ
diff --git a/images/instructor/assignment_preparation/new_gradeable.png b/images/instructor/assignment_preparation/new_gradeable.png
new file mode 100644
index 00000000..82845a6f
Binary files /dev/null and b/images/instructor/assignment_preparation/new_gradeable.png differ
diff --git a/images/instructor/assignment_preparation/subdirectory_gradeables.png b/images/instructor/assignment_preparation/subdirectory_gradeables.png
new file mode 100644
index 00000000..08af3e40
Binary files /dev/null and b/images/instructor/assignment_preparation/subdirectory_gradeables.png differ
diff --git a/images/instructor/assignment_preparation/vcs_gradeable_type.png b/images/instructor/assignment_preparation/vcs_gradeable_type.png
new file mode 100644
index 00000000..ca1bb011
Binary files /dev/null and b/images/instructor/assignment_preparation/vcs_gradeable_type.png differ
diff --git a/images/instructor/lichen/anon_mode.png b/images/instructor/lichen/anon_mode.png
index 311ed539..893df400 100644
Binary files a/images/instructor/lichen/anon_mode.png and b/images/instructor/lichen/anon_mode.png differ
diff --git a/images/instructor/lichen/others.png b/images/instructor/lichen/others.png
index f3ebe85c..d7b04488 100644
Binary files a/images/instructor/lichen/others.png and b/images/instructor/lichen/others.png differ
diff --git a/images/instructor/lichen/result_page.png b/images/instructor/lichen/result_page.png
index d07bd12f..cef9ca8e 100644
Binary files a/images/instructor/lichen/result_page.png and b/images/instructor/lichen/result_page.png differ
diff --git a/images/instructor/lichen/summary_page.png b/images/instructor/lichen/summary_page.png
index 6f14ce16..cfc96022 100644
Binary files a/images/instructor/lichen/summary_page.png and b/images/instructor/lichen/summary_page.png differ
diff --git a/images/instructor/lichen/switch_user.png b/images/instructor/lichen/switch_user.png
index 343e8517..c0cdecd3 100644
Binary files a/images/instructor/lichen/switch_user.png and b/images/instructor/lichen/switch_user.png differ
diff --git a/images/instructor/lichen/switch_version.png b/images/instructor/lichen/switch_version.png
index ecdd690a..903ddfba 100644
Binary files a/images/instructor/lichen/switch_version.png and b/images/instructor/lichen/switch_version.png differ
diff --git a/images/instructor/lichen/view_log.png b/images/instructor/lichen/view_log.png
index df49f392..cf86bb06 100644
Binary files a/images/instructor/lichen/view_log.png and b/images/instructor/lichen/view_log.png differ
diff --git a/images/instructor/personalized_exam/blank_page_1.png b/images/instructor/personalized_exam/blank_page_1.png
index c998efd9..15747dc1 100644
Binary files a/images/instructor/personalized_exam/blank_page_1.png and b/images/instructor/personalized_exam/blank_page_1.png differ
diff --git a/images/instructor/personalized_exam/blank_page_2.png b/images/instructor/personalized_exam/blank_page_2.png
index 33fe3ec9..09dbbd16 100644
Binary files a/images/instructor/personalized_exam/blank_page_2.png and b/images/instructor/personalized_exam/blank_page_2.png differ
diff --git a/images/instructor/personalized_exam/personalized_page_1.png b/images/instructor/personalized_exam/personalized_page_1.png
index a8c99559..6aff0f51 100644
Binary files a/images/instructor/personalized_exam/personalized_page_1.png and b/images/instructor/personalized_exam/personalized_page_1.png differ
diff --git a/images/instructor/personalized_exam/personalized_page_2.png b/images/instructor/personalized_exam/personalized_page_2.png
index 732562bd..711a27be 100644
Binary files a/images/instructor/personalized_exam/personalized_page_2.png and b/images/instructor/personalized_exam/personalized_page_2.png differ
diff --git a/images/killSignal.png b/images/killSignal.png
index 5d41fbeb..456a428e 100644
Binary files a/images/killSignal.png and b/images/killSignal.png differ
diff --git a/images/late_day_details.png b/images/late_day_details.png
index 8d79752f..ab4b5eb9 100644
Binary files a/images/late_day_details.png and b/images/late_day_details.png differ
diff --git a/images/lichen_color_click.png b/images/lichen_color_click.png
index f2a4a51a..4834a2d8 100644
Binary files a/images/lichen_color_click.png and b/images/lichen_color_click.png differ
diff --git a/images/lichen_interface.png b/images/lichen_interface.png
index 67581c86..e470c018 100644
Binary files a/images/lichen_interface.png and b/images/lichen_interface.png differ
diff --git a/images/linux_scansnap_150dpi.png b/images/linux_scansnap_150dpi.png
index 0ee6c85e..029b301d 100644
Binary files a/images/linux_scansnap_150dpi.png and b/images/linux_scansnap_150dpi.png differ
diff --git a/images/linux_scansnap_photo.png b/images/linux_scansnap_photo.png
index ee5d1d9e..678b2b21 100644
Binary files a/images/linux_scansnap_photo.png and b/images/linux_scansnap_photo.png differ
diff --git a/images/main_view_forum.png b/images/main_view_forum.png
index c2c6b928..9ae18c71 100644
Binary files a/images/main_view_forum.png and b/images/main_view_forum.png differ
diff --git a/images/moorthy_duck.png b/images/moorthy_duck.png
index 51b4edad..f86bcb1e 100644
Binary files a/images/moorthy_duck.png and b/images/moorthy_duck.png differ
diff --git a/images/navigation_instructor.png b/images/navigation_instructor.png
index f4257f9a..9993e129 100644
Binary files a/images/navigation_instructor.png and b/images/navigation_instructor.png differ
diff --git a/images/new_gradeable_form.png b/images/new_gradeable_form.png
deleted file mode 100644
index 538fc38b..00000000
Binary files a/images/new_gradeable_form.png and /dev/null differ
diff --git a/images/notebook_code.png b/images/notebook_code.png
index 66b67e61..e04c3faf 100644
Binary files a/images/notebook_code.png and b/images/notebook_code.png differ
diff --git a/images/notebook_multiple_choice.png b/images/notebook_multiple_choice.png
index f66a3356..05a52c6e 100644
Binary files a/images/notebook_multiple_choice.png and b/images/notebook_multiple_choice.png differ
diff --git a/images/notifications/notification_collapsed.png b/images/notifications/notification_collapsed.png
index 0cd79a9e..b3dd8c70 100644
Binary files a/images/notifications/notification_collapsed.png and b/images/notifications/notification_collapsed.png differ
diff --git a/images/notifications/notification_expanded.png b/images/notifications/notification_expanded.png
index 3683e71e..0453bd96 100644
Binary files a/images/notifications/notification_expanded.png and b/images/notifications/notification_expanded.png differ
diff --git a/images/notifications/notification_page.png b/images/notifications/notification_page.png
index 89f54c6e..d270e984 100644
Binary files a/images/notifications/notification_page.png and b/images/notifications/notification_page.png differ
diff --git a/images/notifications/self_notifications.png b/images/notifications/self_notifications.png
index cb61e887..9d6cd7d7 100644
Binary files a/images/notifications/self_notifications.png and b/images/notifications/self_notifications.png differ
diff --git a/images/peer_grading/peer_grading_instructor_view.png b/images/peer_grading/peer_grading_instructor_view.png
index 4ed90fb4..76b0edec 100644
Binary files a/images/peer_grading/peer_grading_instructor_view.png and b/images/peer_grading/peer_grading_instructor_view.png differ
diff --git a/images/peer_grading/peer_grading_matrix_csv.png b/images/peer_grading/peer_grading_matrix_csv.png
index ca4432b0..13b96744 100644
Binary files a/images/peer_grading/peer_grading_matrix_csv.png and b/images/peer_grading/peer_grading_matrix_csv.png differ
diff --git a/images/peer_grading/peer_grading_matrix_uploaded.png b/images/peer_grading/peer_grading_matrix_uploaded.png
index f97d9de6..5f59d9ea 100644
Binary files a/images/peer_grading/peer_grading_matrix_uploaded.png and b/images/peer_grading/peer_grading_matrix_uploaded.png differ
diff --git a/images/peer_grading/peer_grading_peer_panes.png b/images/peer_grading/peer_grading_peer_panes.png
index 89e3a9af..5148cd18 100644
Binary files a/images/peer_grading/peer_grading_peer_panes.png and b/images/peer_grading/peer_grading_peer_panes.png differ
diff --git a/images/peer_grading/peer_grading_peer_view.png b/images/peer_grading/peer_grading_peer_view.png
index 2701bfa0..cddedd07 100644
Binary files a/images/peer_grading/peer_grading_peer_view.png and b/images/peer_grading/peer_grading_peer_view.png differ
diff --git a/images/peer_grading/peer_grading_rubric.png b/images/peer_grading/peer_grading_rubric.png
index be2c3a2c..d2169ba8 100644
Binary files a/images/peer_grading/peer_grading_rubric.png and b/images/peer_grading/peer_grading_rubric.png differ
diff --git a/images/peer_grading/peer_grading_student_view.png b/images/peer_grading/peer_grading_student_view.png
index 62f8757c..4eefc802 100644
Binary files a/images/peer_grading/peer_grading_student_view.png and b/images/peer_grading/peer_grading_student_view.png differ
diff --git a/images/peer_grading/peer_matrix_options.png b/images/peer_grading/peer_matrix_options.png
index 9e99caee..c3fe6d2e 100644
Binary files a/images/peer_grading/peer_matrix_options.png and b/images/peer_grading/peer_matrix_options.png differ
diff --git a/images/people/2023_spring.png b/images/people/2023_spring.png
index 95719703..11f9d19f 100644
Binary files a/images/people/2023_spring.png and b/images/people/2023_spring.png differ
diff --git a/images/people/2023_summer.png b/images/people/2023_summer.png
new file mode 100644
index 00000000..354dbab5
Binary files /dev/null and b/images/people/2023_summer.png differ
diff --git a/images/queue/queue_change_code.png b/images/queue/queue_change_code.png
index 6bf7ea72..2d4b35ba 100644
Binary files a/images/queue/queue_change_code.png and b/images/queue/queue_change_code.png differ
diff --git a/images/queue/queue_contact_information.png b/images/queue/queue_contact_information.png
index d0e20465..8655b11a 100644
Binary files a/images/queue/queue_contact_information.png and b/images/queue/queue_contact_information.png differ
diff --git a/images/queue/queue_enable.png b/images/queue/queue_enable.png
index 080ce777..db06183f 100644
Binary files a/images/queue/queue_enable.png and b/images/queue/queue_enable.png differ
diff --git a/images/queue/queue_enable_completed.png b/images/queue/queue_enable_completed.png
index d197da37..95debe8c 100644
Binary files a/images/queue/queue_enable_completed.png and b/images/queue/queue_enable_completed.png differ
diff --git a/images/queue/queue_filter.png b/images/queue/queue_filter.png
index dd301e63..f5c5bb37 100644
Binary files a/images/queue/queue_filter.png and b/images/queue/queue_filter.png differ
diff --git a/images/queue/queue_finish_blue.png b/images/queue/queue_finish_blue.png
index 127c2d39..3c0f0d82 100644
Binary files a/images/queue/queue_finish_blue.png and b/images/queue/queue_finish_blue.png differ
diff --git a/images/queue/queue_finish_green.png b/images/queue/queue_finish_green.png
index c9e70443..5d2eb503 100644
Binary files a/images/queue/queue_finish_green.png and b/images/queue/queue_finish_green.png differ
diff --git a/images/queue/queue_helping.png b/images/queue/queue_helping.png
index cf5f7a9f..2b1fa29e 100644
Binary files a/images/queue/queue_helping.png and b/images/queue/queue_helping.png differ
diff --git a/images/queue/queue_join.png b/images/queue/queue_join.png
index f62fe966..46bda001 100644
Binary files a/images/queue/queue_join.png and b/images/queue/queue_join.png differ
diff --git a/images/queue/queue_main_view.png b/images/queue/queue_main_view.png
index 18c6edbd..05d03148 100644
Binary files a/images/queue/queue_main_view.png and b/images/queue/queue_main_view.png differ
diff --git a/images/queue/queue_menu.png b/images/queue/queue_menu.png
index 13dfda1e..70830dc5 100644
Binary files a/images/queue/queue_menu.png and b/images/queue/queue_menu.png differ
diff --git a/images/queue/queue_new_queue.png b/images/queue/queue_new_queue.png
index 9ddc477a..ceb9c2df 100644
Binary files a/images/queue/queue_new_queue.png and b/images/queue/queue_new_queue.png differ
diff --git a/images/queue/queue_open_modify.png b/images/queue/queue_open_modify.png
index dd134a82..25eb6960 100644
Binary files a/images/queue/queue_open_modify.png and b/images/queue/queue_open_modify.png differ
diff --git a/images/queue/queue_remote_access_code.png b/images/queue/queue_remote_access_code.png
index 02cd07f6..9db9ab36 100644
Binary files a/images/queue/queue_remote_access_code.png and b/images/queue/queue_remote_access_code.png differ
diff --git a/images/queue/queue_settings.png b/images/queue/queue_settings.png
index d893034f..3ae6c1b0 100644
Binary files a/images/queue/queue_settings.png and b/images/queue/queue_settings.png differ
diff --git a/images/queue/queue_settings_button.png b/images/queue/queue_settings_button.png
index 4fa26395..1e744e93 100644
Binary files a/images/queue/queue_settings_button.png and b/images/queue/queue_settings_button.png differ
diff --git a/images/queue/queue_stats_button.png b/images/queue/queue_stats_button.png
index 5b06cb7d..cf57fcba 100644
Binary files a/images/queue/queue_stats_button.png and b/images/queue/queue_stats_button.png differ
diff --git a/images/queue/queue_stats_example.png b/images/queue/queue_stats_example.png
index c1018304..a72a84ff 100644
Binary files a/images/queue/queue_stats_example.png and b/images/queue/queue_stats_example.png differ
diff --git a/images/queue/queue_waiting.png b/images/queue/queue_waiting.png
index eb1ee7c8..0460e98d 100644
Binary files a/images/queue/queue_waiting.png and b/images/queue/queue_waiting.png differ
diff --git a/images/room_templates_course_settings.png b/images/room_templates_course_settings.png
old mode 100755
new mode 100644
index 3040da36..26680c7f
Binary files a/images/room_templates_course_settings.png and b/images/room_templates_course_settings.png differ
diff --git a/images/room_templates_nav_page.png b/images/room_templates_nav_page.png
old mode 100755
new mode 100644
index e6c7e389..7b9f69a9
Binary files a/images/room_templates_nav_page.png and b/images/room_templates_nav_page.png differ
diff --git a/images/room_templates_nav_page_no_report.png b/images/room_templates_nav_page_no_report.png
old mode 100755
new mode 100644
index 6c0112ac..806c99c1
Binary files a/images/room_templates_nav_page_no_report.png and b/images/room_templates_nav_page_no_report.png differ
diff --git a/images/room_templates_nav_page_no_template.png b/images/room_templates_nav_page_no_template.png
old mode 100755
new mode 100644
index 97923b0a..98bf54a0
Binary files a/images/room_templates_nav_page_no_template.png and b/images/room_templates_nav_page_no_template.png differ
diff --git a/images/router_structure.png b/images/router_structure.png
index de46a398..4f2bebeb 100644
Binary files a/images/router_structure.png and b/images/router_structure.png differ
diff --git a/images/selector-playground.png b/images/selector-playground.png
index bc827546..0895e46b 100644
Binary files a/images/selector-playground.png and b/images/selector-playground.png differ
diff --git a/images/sorting_and_navigation/index.png b/images/sorting_and_navigation/index.png
index 1318506c..fd26d17f 100644
Binary files a/images/sorting_and_navigation/index.png and b/images/sorting_and_navigation/index.png differ
diff --git a/images/sorting_and_navigation/navigation_bar.png b/images/sorting_and_navigation/navigation_bar.png
index 340cb802..42ae75b4 100644
Binary files a/images/sorting_and_navigation/navigation_bar.png and b/images/sorting_and_navigation/navigation_bar.png differ
diff --git a/images/sorting_and_navigation/navigation_bar_arrows.png b/images/sorting_and_navigation/navigation_bar_arrows.png
index 0fe54101..c7e1b43f 100644
Binary files a/images/sorting_and_navigation/navigation_bar_arrows.png and b/images/sorting_and_navigation/navigation_bar_arrows.png differ
diff --git a/images/sorting_and_navigation/navigation_bar_full_screen.png b/images/sorting_and_navigation/navigation_bar_full_screen.png
index decb93e7..4d6e37f5 100644
Binary files a/images/sorting_and_navigation/navigation_bar_full_screen.png and b/images/sorting_and_navigation/navigation_bar_full_screen.png differ
diff --git a/images/sorting_and_navigation/navigation_bar_panel_selector.png b/images/sorting_and_navigation/navigation_bar_panel_selector.png
index 0597f5df..8ac9b133 100644
Binary files a/images/sorting_and_navigation/navigation_bar_panel_selector.png and b/images/sorting_and_navigation/navigation_bar_panel_selector.png differ
diff --git a/images/sql_toolbox.png b/images/sql_toolbox.png
index 79fc3e7e..f20411e7 100644
Binary files a/images/sql_toolbox.png and b/images/sql_toolbox.png differ
diff --git a/images/student/ChangePasswordField.png b/images/student/ChangePasswordField.png
index c39adae1..5d1cbe66 100644
Binary files a/images/student/ChangePasswordField.png and b/images/student/ChangePasswordField.png differ
diff --git a/images/student/ChangePasswordForm.png b/images/student/ChangePasswordForm.png
index bd683d83..572ef93c 100644
Binary files a/images/student/ChangePasswordForm.png and b/images/student/ChangePasswordForm.png differ
diff --git a/images/student/UploadProfilePhotoForm.png b/images/student/UploadProfilePhotoForm.png
index b693d3b1..709ad6bf 100644
Binary files a/images/student/UploadProfilePhotoForm.png and b/images/student/UploadProfilePhotoForm.png differ
diff --git a/images/student/exhausted_profile_photo_quota.png b/images/student/exhausted_profile_photo_quota.png
index e4dae80c..ad8e7fa8 100644
Binary files a/images/student/exhausted_profile_photo_quota.png and b/images/student/exhausted_profile_photo_quota.png differ
diff --git a/images/student/flagged_photo.png b/images/student/flagged_photo.png
index f9027264..a3a60138 100644
Binary files a/images/student/flagged_photo.png and b/images/student/flagged_photo.png differ
diff --git a/images/student/mid_semester_rainbow_grades.png b/images/student/mid_semester_rainbow_grades.png
index 78bc4146..7399a8d3 100644
Binary files a/images/student/mid_semester_rainbow_grades.png and b/images/student/mid_semester_rainbow_grades.png differ
diff --git a/images/student/my_profile.png b/images/student/my_profile.png
index 4a6bd14a..ef7cda67 100644
Binary files a/images/student/my_profile.png and b/images/student/my_profile.png differ
diff --git a/images/student/secondary_email.png b/images/student/secondary_email.png
index 7e35aefd..b4323d06 100644
Binary files a/images/student/secondary_email.png and b/images/student/secondary_email.png differ
diff --git a/images/student/select_theme_field.png b/images/student/select_theme_field.png
index 72f82691..83a54ae6 100644
Binary files a/images/student/select_theme_field.png and b/images/student/select_theme_field.png differ
diff --git a/images/student/specify_timezone.png b/images/student/specify_timezone.png
index 6754122b..3d995e16 100644
Binary files a/images/student/specify_timezone.png and b/images/student/specify_timezone.png differ
diff --git a/images/student/specify_timezone_field.png b/images/student/specify_timezone_field.png
index 73d91d91..cce69c37 100644
Binary files a/images/student/specify_timezone_field.png and b/images/student/specify_timezone_field.png differ
diff --git a/images/student/theme_options.png b/images/student/theme_options.png
index 8400bf90..92593401 100644
Binary files a/images/student/theme_options.png and b/images/student/theme_options.png differ
diff --git a/images/student/timezone_dropdown.png b/images/student/timezone_dropdown.png
index d5a7dd17..011667eb 100644
Binary files a/images/student/timezone_dropdown.png and b/images/student/timezone_dropdown.png differ
diff --git a/images/student/user_profile.png b/images/student/user_profile.png
index 4006d860..f5b767f1 100644
Binary files a/images/student/user_profile.png and b/images/student/user_profile.png differ
diff --git a/images/student/user_profile_specify_locale.png b/images/student/user_profile_specify_locale.png
new file mode 100644
index 00000000..24f32e97
Binary files /dev/null and b/images/student/user_profile_specify_locale.png differ
diff --git a/images/studentOverriden.png b/images/studentOverriden.png
index cc5c7d6e..7a53b4f0 100644
Binary files a/images/studentOverriden.png and b/images/studentOverriden.png differ
diff --git a/images/student_activity_dashboard.png b/images/student_activity_dashboard.png
index f4c4481a..febfe5f5 100644
Binary files a/images/student_activity_dashboard.png and b/images/student_activity_dashboard.png differ
diff --git a/images/student_photos_empty_pic.png b/images/student_photos_empty_pic.png
index 7225ba53..9fbe36f4 100644
Binary files a/images/student_photos_empty_pic.png and b/images/student_photos_empty_pic.png differ
diff --git a/images/student_photos_upload_button.png b/images/student_photos_upload_button.png
index 5d9d9d6b..f9e84891 100644
Binary files a/images/student_photos_upload_button.png and b/images/student_photos_upload_button.png differ
diff --git a/images/student_photos_upload_form.png b/images/student_photos_upload_form.png
index bfda0ab1..632f5a07 100644
Binary files a/images/student_photos_upload_form.png and b/images/student_photos_upload_form.png differ
diff --git a/images/student_ui_details.png b/images/student_ui_details.png
index 69599ebc..bd0eec65 100644
Binary files a/images/student_ui_details.png and b/images/student_ui_details.png differ
diff --git a/images/student_ui_progression.png b/images/student_ui_progression.png
index 81be0bdf..8131c55d 100644
Binary files a/images/student_ui_progression.png and b/images/student_ui_progression.png differ
diff --git a/images/student_ui_progression_ORIGINAL.png b/images/student_ui_progression_ORIGINAL.png
index b208e3f3..4e782b35 100644
Binary files a/images/student_ui_progression_ORIGINAL.png and b/images/student_ui_progression_ORIGINAL.png differ
diff --git a/images/submitty_logo.png b/images/submitty_logo.png
index 159e20fb..f5d81510 100644
Binary files a/images/submitty_logo.png and b/images/submitty_logo.png differ
diff --git a/images/submitty_pr_with_buildbot.png b/images/submitty_pr_with_buildbot.png
index 377ae798..ddf9282b 100644
Binary files a/images/submitty_pr_with_buildbot.png and b/images/submitty_pr_with_buildbot.png differ
diff --git a/images/system_caffeine.png b/images/system_caffeine.png
index d0cf254f..17c9837d 100644
Binary files a/images/system_caffeine.png and b/images/system_caffeine.png differ
diff --git a/images/system_outage_message.png b/images/system_outage_message.png
index f4070881..21e6362a 100644
Binary files a/images/system_outage_message.png and b/images/system_outage_message.png differ
diff --git a/images/ta_grading/TA_grading_panes.png b/images/ta_grading/TA_grading_panes.png
index c7d5e51c..6d976ee5 100644
Binary files a/images/ta_grading/TA_grading_panes.png and b/images/ta_grading/TA_grading_panes.png differ
diff --git a/images/ta_grading/TA_index.png b/images/ta_grading/TA_index.png
index dc856c63..99faa486 100644
Binary files a/images/ta_grading/TA_index.png and b/images/ta_grading/TA_index.png differ
diff --git a/images/ta_grading/TA_index_progress.png b/images/ta_grading/TA_index_progress.png
index ce6e7751..dc6810be 100644
Binary files a/images/ta_grading/TA_index_progress.png and b/images/ta_grading/TA_index_progress.png differ
diff --git a/images/ta_grading/TA_lab_grades.png b/images/ta_grading/TA_lab_grades.png
index 18b3e355..86e6809e 100644
Binary files a/images/ta_grading/TA_lab_grades.png and b/images/ta_grading/TA_lab_grades.png differ
diff --git a/images/ta_grading/TA_overview.png b/images/ta_grading/TA_overview.png
index 80cbf6be..8abda6f7 100644
Binary files a/images/ta_grading/TA_overview.png and b/images/ta_grading/TA_overview.png differ
diff --git a/images/ta_grading/TA_test_grades.png b/images/ta_grading/TA_test_grades.png
index 53edf62e..a40adebc 100644
Binary files a/images/ta_grading/TA_test_grades.png and b/images/ta_grading/TA_test_grades.png differ
diff --git a/images/ta_grading/rubric_grading_autograding_histogram.png b/images/ta_grading/rubric_grading_autograding_histogram.png
index 13287033..daf4a09c 100644
Binary files a/images/ta_grading/rubric_grading_autograding_histogram.png and b/images/ta_grading/rubric_grading_autograding_histogram.png differ
diff --git a/images/ta_grading/rubric_grading_data.png b/images/ta_grading/rubric_grading_data.png
index aab0fb46..e81493ae 100644
Binary files a/images/ta_grading/rubric_grading_data.png and b/images/ta_grading/rubric_grading_data.png differ
diff --git a/images/ta_grading/rubric_grading_edit_rubric.png b/images/ta_grading/rubric_grading_edit_rubric.png
index a9411cdc..b2d34c1a 100644
Binary files a/images/ta_grading/rubric_grading_edit_rubric.png and b/images/ta_grading/rubric_grading_edit_rubric.png differ
diff --git a/images/ta_grading/rubric_grading_manual_components.png b/images/ta_grading/rubric_grading_manual_components.png
index d8d28158..da2f3bcb 100644
Binary files a/images/ta_grading/rubric_grading_manual_components.png and b/images/ta_grading/rubric_grading_manual_components.png differ
diff --git a/images/ta_grading/rubric_grading_overall_histogram.png b/images/ta_grading/rubric_grading_overall_histogram.png
index 12306011..0daff625 100644
Binary files a/images/ta_grading/rubric_grading_overall_histogram.png and b/images/ta_grading/rubric_grading_overall_histogram.png differ
diff --git a/images/ta_grading/rubric_grading_overview.png b/images/ta_grading/rubric_grading_overview.png
index 77b97544..f570cb5c 100644
Binary files a/images/ta_grading/rubric_grading_overview.png and b/images/ta_grading/rubric_grading_overview.png differ
diff --git a/images/ta_grading/rubric_grading_panels_1.png b/images/ta_grading/rubric_grading_panels_1.png
index 4952d0d7..46b62d64 100644
Binary files a/images/ta_grading/rubric_grading_panels_1.png and b/images/ta_grading/rubric_grading_panels_1.png differ
diff --git a/images/ta_grading/rubric_grading_pdf_annotation.png b/images/ta_grading/rubric_grading_pdf_annotation.png
index f31df192..1e37277e 100644
Binary files a/images/ta_grading/rubric_grading_pdf_annotation.png and b/images/ta_grading/rubric_grading_pdf_annotation.png differ
diff --git a/images/ta_grading/rubric_grading_who_got_mark.png b/images/ta_grading/rubric_grading_who_got_mark.png
index 4c2c8892..47bd777c 100644
Binary files a/images/ta_grading/rubric_grading_who_got_mark.png and b/images/ta_grading/rubric_grading_who_got_mark.png differ
diff --git a/images/ta_grading/silent_regrade_example.png b/images/ta_grading/silent_regrade_example.png
index 66aa5be9..0ab58c04 100644
Binary files a/images/ta_grading/silent_regrade_example.png and b/images/ta_grading/silent_regrade_example.png differ
diff --git a/images/ta_grading/silent_regrade_off_example.png b/images/ta_grading/silent_regrade_off_example.png
index 909eec5a..47199596 100644
Binary files a/images/ta_grading/silent_regrade_off_example.png and b/images/ta_grading/silent_regrade_off_example.png differ
diff --git a/images/ta_grading/silent_regrade_on_example.png b/images/ta_grading/silent_regrade_on_example.png
index 92870cca..247b2acf 100644
Binary files a/images/ta_grading/silent_regrade_on_example.png and b/images/ta_grading/silent_regrade_on_example.png differ
diff --git a/images/ta_ui.png b/images/ta_ui.png
index 87ebb5f6..40e774ba 100644
Binary files a/images/ta_ui.png and b/images/ta_ui.png differ
diff --git a/images/ta_ui_ORIGINAL.png b/images/ta_ui_ORIGINAL.png
index 9ed9acdc..531b7fe1 100644
Binary files a/images/ta_ui_ORIGINAL.png and b/images/ta_ui_ORIGINAL.png differ
diff --git a/images/team_assignment_creation.png b/images/team_assignment_creation.png
old mode 100755
new mode 100644
index 43cc3a57..4038638f
Binary files a/images/team_assignment_creation.png and b/images/team_assignment_creation.png differ
diff --git a/images/team_assignment_creation_2.png b/images/team_assignment_creation_2.png
old mode 100755
new mode 100644
index 325c8943..0db0d7d2
Binary files a/images/team_assignment_creation_2.png and b/images/team_assignment_creation_2.png differ
diff --git a/images/team_create_teams.png b/images/team_create_teams.png
old mode 100755
new mode 100644
index bb4fa0f8..bb5c3c77
Binary files a/images/team_create_teams.png and b/images/team_create_teams.png differ
diff --git a/images/team_edit_team.png b/images/team_edit_team.png
index 8145fc24..624682c5 100644
Binary files a/images/team_edit_team.png and b/images/team_edit_team.png differ
diff --git a/images/team_edit_team_2.png b/images/team_edit_team_2.png
index 504ecdac..8fbba922 100644
Binary files a/images/team_edit_team_2.png and b/images/team_edit_team_2.png differ
diff --git a/images/team_export.png b/images/team_export.png
old mode 100755
new mode 100644
index 5cc05fbf..3cdeaab2
Binary files a/images/team_export.png and b/images/team_export.png differ
diff --git a/images/team_grading_page.png b/images/team_grading_page.png
old mode 100755
new mode 100644
index 56a2e258..56036cd9
Binary files a/images/team_grading_page.png and b/images/team_grading_page.png differ
diff --git a/images/team_invitations.png b/images/team_invitations.png
index d358a738..fa3dc8eb 100644
Binary files a/images/team_invitations.png and b/images/team_invitations.png differ
diff --git a/images/team_invitations_2.png b/images/team_invitations_2.png
index 302552ee..3cd64c9b 100644
Binary files a/images/team_invitations_2.png and b/images/team_invitations_2.png differ
diff --git a/images/team_invite.png b/images/team_invite.png
index 7cd4eb3f..e63beb7e 100644
Binary files a/images/team_invite.png and b/images/team_invite.png differ
diff --git a/images/team_manage.png b/images/team_manage.png
index 75587465..7c92dd32 100644
Binary files a/images/team_manage.png and b/images/team_manage.png differ
diff --git a/images/team_manage_2.png b/images/team_manage_2.png
index dbdf6b6a..a9ed4b30 100644
Binary files a/images/team_manage_2.png and b/images/team_manage_2.png differ
diff --git a/images/team_manage_3.png b/images/team_manage_3.png
index a14caae0..7ff75724 100644
Binary files a/images/team_manage_3.png and b/images/team_manage_3.png differ
diff --git a/images/team_navigation.png b/images/team_navigation.png
index bbda4382..239e8249 100644
Binary files a/images/team_navigation.png and b/images/team_navigation.png differ
diff --git a/images/team_seeking.png b/images/team_seeking.png
index 257b2339..06f8822e 100644
Binary files a/images/team_seeking.png and b/images/team_seeking.png differ
diff --git a/images/team_seeking_message.png b/images/team_seeking_message.png
index 7954f1fc..8c3bf9b0 100644
Binary files a/images/team_seeking_message.png and b/images/team_seeking_message.png differ
diff --git a/images/team_submission.png b/images/team_submission.png
old mode 100755
new mode 100644
index 04a039a0..2576b7eb
Binary files a/images/team_submission.png and b/images/team_submission.png differ
diff --git a/images/team_submitted.png b/images/team_submitted.png
old mode 100755
new mode 100644
index f300897a..c6e1cf30
Binary files a/images/team_submitted.png and b/images/team_submitted.png differ
diff --git a/images/travis_restart.png b/images/travis_restart.png
index d7d66a1b..2c6eb9d6 100644
Binary files a/images/travis_restart.png and b/images/travis_restart.png differ
diff --git a/images/typo.png b/images/typo.png
index 4b76aa78..afbb3cf7 100644
Binary files a/images/typo.png and b/images/typo.png differ
diff --git a/images/vagrant_up_ci.png b/images/vagrant_up_ci.png
index a5eeb55a..3239ba9c 100644
Binary files a/images/vagrant_up_ci.png and b/images/vagrant_up_ci.png differ
diff --git a/images/zulip-icon-128x128.png b/images/zulip-icon-128x128.png
new file mode 100644
index 00000000..d38b5e80
Binary files /dev/null and b/images/zulip-icon-128x128.png differ
diff --git a/navtreedata.js b/navtreedata.js
index 1ade1836..abd40508 100644
--- a/navtreedata.js
+++ b/navtreedata.js
@@ -145,6 +145,7 @@ var NAVTREE =
[ "Update Submitty", "/sysadmin/installation/update_submitty", null ],
[ "Version Notes", "/sysadmin/installation/version_notes/index", [
[ "Overview", "/sysadmin/installation/version_notes/index", null],
+ [ "v23.07.00", "/sysadmin/installation/version_notes/v23.07.00", null ],
[ "v23.03.01", "/sysadmin/installation/version_notes/v23.03.01", null ],
[ "v22.06.00", "/sysadmin/installation/version_notes/v22.06.00", null ],
[ "v22.05.00", "/sysadmin/installation/version_notes/v22.05.00", null ],
@@ -192,20 +193,23 @@ var NAVTREE =
[ "PhpStorm Setup Instructions", "/developer/getting_started/phpstorm", null ],
[ "Xdebug Setup Instructions", "/developer/getting_started/xdebug", null ],
[ "PGAdmin Setup Instructions", "/developer/getting_started/pgadmin", null ],
- [ "Virtual Box Worker", "/developer/getting_started/worker_vm", null ],
+ [ "Worker VM Setup", "/developer/getting_started/worker_vm", null ],
] ],
] ],
[ "Development Instructions", "/developer/development_instructions/index", [
[ "Overview", "/developer/development_instructions/index", null ],
- [ "Migrations", "/developer/development_instructions/migrations", null ],
+ [ "Sample Courses Data", "/developer/development_instructions/sample_data", null ],
+ [ "Migrations", "/developer/development_instructions/migrations", [
+ [ "Trigger Functions", "/developer/development_instructions/trigger_functions", null ]
+ ] ],
[ "Resolving Merge Conflicts", "/developer/development_instructions/merge_conflicts", null ],
+ [ "Localization / Language Support", "/developer/development_instructions/localization", null ],
[ "Continuous Integration Testing", "/developer/testing/index", [
[ "Overview", "/developer/testing/index", null ],
[ "Installing PHP", "/developer/testing/install_php", null ],
[ "Linting / Static Analysis", "/developer/testing/linting_static_analysis", null ],
[ "Python Unit Tests", "/developer/testing/python_unit_tests", null ],
[ "PHP Unit Tests", "/developer/testing/php_unit_tests", null ],
- [ "Selenium End-to-End Tests", "/developer/testing/site_end_to_end_tests", null ],
[ "Cypress End-to-End Tests", "/developer/testing/cypress", null ],
[ "Autograding Integration Tests", "/developer/testing/autograding_integration_tests", null ],
[ "GitHub Actions", "/developer/testing/github_actions", null ]
@@ -255,6 +259,12 @@ var NAVTREE =
] ],
[ "Rensselaer Center for Open Source", "/developer/rensselaer_center_for_open_source/moorthy", [
[ "Moorthy", "/developer/rensselaer_center_for_open_source/moorthy", null ],
+ [ "2023 Jaeseok Kang", "/developer/rensselaer_center_for_open_source/2023_Jaeseok_Kang", null ],
+ [ "2023 Mahi Pasarkar", "/developer/rensselaer_center_for_open_source/2023_Mahi_Pasarkar", null ],
+ [ "2023 Nia Heermance", "/developer/rensselaer_center_for_open_source/2023_Nia_Heermance", null ],
+ [ "2023 Sátvik Karanam", "/developer/rensselaer_center_for_open_source/2023_Satvik_Karanam", null ],
+ [ "2023 Viane Matsibekker", "/developer/rensselaer_center_for_open_source/2023_Viane_Matsibekker", null ],
+ [ "2023 Youssef Hassan", "/developer/rensselaer_center_for_open_source/2023_Youssef_Hassan", null ],
[ "2022 Evan Bowen Shi", "/developer/rensselaer_center_for_open_source/2022_Evan_Bowen_Shi", null ],
[ "2022 Jerry Jiarui Lu", "/developer/rensselaer_center_for_open_source/2022_Jerry_Jiarui_Lu", null ],
[ "2022 Thomas Kozlowski", "/developer/rensselaer_center_for_open_source/2022_Thomas_Kozlowski", null ],
@@ -268,6 +278,9 @@ var NAVTREE =
] ],
[ "Google Summer of Code", "/developer/google_summer_of_code/index", [
[ "Overview","/developer/google_summer_of_code/index", null ],
+ [ "2023 Cameron Peterson", "/developer/google_summer_of_code/2023_Cameron_Peterson", null ],
+ [ "2023 Musaab Imran", "/developer/google_summer_of_code/2023_Musaab_Imran", null ],
+ [ "2023 Saumya Borwankar", "/developer/google_summer_of_code/2023_Saumya_Borwankar", null ],
[ "2022 Akshat Batra", "/developer/google_summer_of_code/2022_Akshat_Batra", null ],
[ "2022 Madhur Jain", "/developer/google_summer_of_code/2022_Madhur_Jain", null ],
[ "2022 Poorna Gunathilaka", "/developer/google_summer_of_code/2022_Poorna_Gunathilaka", null ],