Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/release/13.4' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
oliverguenther committed Mar 11, 2024
2 parents 938d56b + 1af6d84 commit ae74255
Show file tree
Hide file tree
Showing 23 changed files with 267 additions and 123 deletions.
2 changes: 1 addition & 1 deletion config/locales/crowdin/js-zh-TW.yml
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ zh-TW:
filter:
more_values_not_shown: "There are %{total} more results, search to filter results."
description:
text_open_filter: "使用 ALT 和方向鍵打開此篩選器"
text_open_filter: "使用 ALT 和方向鍵打開此篩選條件"
text_close_filter: "要選擇條目離開焦點例如按輸入。離開沒有篩選器的情況下選擇的第一個 (空) 條目。"
noneElement: "(無)"
time_zone_converted:
Expand Down
38 changes: 38 additions & 0 deletions docs/system-admin-guide/attachments/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
sidebar_navigation:
title: Attachments
priority: 955
title: Attachments in OpenProject
description: Attachment settings and virus scanning in OpenProject
keywords: Attachment, attachment settings, virus scanning, clamav

---

# Attachments in OpenProject

In OpenProject you can determine the maximum attachment size and activate the virus scanning functionality. To do that navigate to **System Administration** and select **Attachments**

![Navigation to attachment settings in OpenProject](openproject_system_adminstration_attachments.png)



## Attachment settings

1. Here you can increase or decrease **maximum attachment size** (in kB).

2. The box next to **Attachment upload whitelist** is an open-entry text box in which some common file formats are pre-populated by default. The file formats in this list are specifically whitelisted or allowed to be attached to work packages.
If you wish, you can add additional file formats. Use only one file format entry per line, and keep to the following cadence:

`*****.[**file extension**]`

Example: To add mp3-files to the whitelist, your entry would be `***.mp3**`.

3. Do not forget to **save** your changes.

![attachment settings](openproject_system_adminstration_attachment_settings.png)



## Virus scanning (Enterprise-add-on)

For information about virus scanning, please see the [documentation on virus scanning](./virus-scanning/).
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 0 additions & 30 deletions docs/system-admin-guide/attachments/settings/README.md

This file was deleted.

Binary file not shown.
43 changes: 16 additions & 27 deletions docs/system-admin-guide/attachments/virus-scanning/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,15 @@ keywords: Virus scanning, clamav

---

# Virus scanning
# Virus scanning (Enterprise add-on)
> **Note**: This functionality is an Enterprise add-on. It is currently not available on the Hosted Enterprise Cloud.
You can configure OpenProject to automatically scan uploaded attachments for viruses using the [ClamAV antivirus](https://www.clamav.net/) engine.

ClamAV can detect different kinds of harmful software such as viruses and worms. It works on many types of files, such as those used in Windows, Linux, and Mac computers, as well as zipped files, program files, pictures, Flash, PDFs, and more.

If you're using ClamAV locally, it comes with a helper tool called Freshclam that regularly updates its list of known threats to keep it current. It is crucial to keep the virus definitions updated for appropriate protection against malware.


> **Note**: This functionality is an enterprise add-on. It is currently not available on the Hosted Enterprise Cloud.



## Installing ClamAV

To be able to use the antivirus integration in OpenProject, you need to first install ClamAV on your environment.
Expand Down Expand Up @@ -101,47 +96,41 @@ In both these cases, use the `ClamAV (Host)` option with `clamav:3310` as the ho

## Configuration in OpenProject

To enable the virus scanning functionality, visit Administration > Attachments > Virus scanning.
To enable the virus scanning functionality, visit *Administration > Attachments > Virus scanning*.

You will see the following options:

1. **Virus scan mode**
- Disabled: No virus scanning takes place.
- ClamAV (Socket): Use the local socket for installed packages or locally mounted docker sockets.
- ClamAV (Host): Use a TCP connection to the clamd daemon.
- **Disabled**: Uploaded files will not be scanned for viruses.
- **ClamAV (Socket)**: A local socket for installed packages or locally mounted docker sockets will be used.
- **ClamAV (Host)**: A TCP connection to the clamd daemon will be used.
2. **Socket or Host value.**
- This value is only shown when Scan mode is not disabled.
- This value is only shown when Scan mode is enabled.
- Enter the path to the local socket or `hostname:port` for the host mode according to the ClamAV installation documentation.
3. **Infected file action**
- Here you can select the action to take place when a virus was found
- Quarantine the file. Quarantined files are showing up under Administration > Attachments > Quarantined attachments for review or deletion.
- Delete the file directly



![Virus scanning settings socket](image-20240220-iedi.png)


Here you can select the action to take place when a virus was found:

- **Quarantine the file**: quarantined files will be displayed under *Administration > Attachments > Quarantined attachments* for review or deletion.
- **Delete the file directly**.

![Virus scanning settings socket](openproject_system_settings_virus_scanning.png)

### When enabling for the first time

If you have an existing installation of OpenProject, enabling the option will first perform a liveliness check of the connection parameters to ClamAV. An error will be shown if OpenProject cannot connect to ClamAV. In this case, you need to verify the settings and socket/host value in the administration.

If the connection was made successfully, all existing files that have not been scanned before, will be scanned for viruses. This will take place in the background, and you will be redirected to a job status screen to inform you when this is done. If you leave this window open, it will inform you at the end about any found viruses. Depending on the number of existing attachments, this initial scan might take some time to process.


If the connection was made successfully, all existing files that have not been scanned before, will be scanned for viruses. This will take place in the background, and you will be redirected to a job status screen to inform you when this is done. If this window remains open, it will provide notifications regarding any detected viruses upon completion. Depending on the number of existing attachments, this initial scan may require some time to process.

### Disabling virus scanning

If you disable virus scanning with some files still being in quarantine, a notice will be shown to inform you about that fact. These files will remain in quarantine until you delete them.



## Usage in OpenProject

When the virus scanning mode has been enabled, all uploaded attachments are being scanned for viruses automatically.
If the virus scanning mode has been enabled, all uploaded attachments will be scanned for viruses automatically.

> **Note**: While attachments are in the process being scanned, they are only accessible to the original author. As soon as they are scanned without any findings, they are made accessible to all other users.
> **Note**: While attachments are in the process of being scanned, they are only accessible to the original author. As soon as they are scanned without any findings, they are made accessible to all other users.
If viruses are found, they are treated according to the *Infected file action* setting.

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,8 @@ Another explanation may be that you have been removed from a project in OpenProj
It can also be that case, that a project admin revoked your permission to view files on file storages within a project in OpenProject.

## Can I rename a project with an established file storage (Nextcloud or OneDrive/SharePoint) connection?
Yes, that is possible. If you work with automatically managed folders, the corresponding project folder will also be renamed automatically after a few minutes.
Yes, that is possible. If you work with automatically managed folders, the corresponding project folder will also be renamed automatically after a few minutes.

## Is there a virus scanner for the files attachments in OpenProject?

Yes, there is a virus scanner for attachments in OpenProject. At the moment it is only available for on-premises installations and is an Enterprise add-on. Your system administrator will need to [configure it first](../../../system-admin-guide/attachments/virus-scanning).
43 changes: 28 additions & 15 deletions docs/user-guide/meetings/dynamic-meetings/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,20 @@ Introduced in OpenProject 13.1, dynamic meetings offer easier meeting management
> **Note:** The **Meetings module needs to be activated** in the [Project Settings](../../projects/project-settings/modules/) to be able to create and edit meetings.

| Topic | Content |
| ------------------------------------------------------------ | ------------------------------------------------- |
| [Meetings in OpenProject](#meetings-in-openproject) | How to open meetings in OpenProject. |
| [Create a new meeting](#create-a-new-meeting) | How to create a new meeting in OpenProject. |
| [Edit a meeting](#edit-a-meeting) | How to edit an existing meeting. |
| [Add a work package to the agenda](#add-a-work-package-to-the-agenda) | How to add a work package to a meeting agenda. |
| [Create or edit the meeting agenda](#create-or-edit-the-meeting-agenda) | How to create or edit the agenda. |
| [Add meeting participants](#add-meeting-participants) | How to invite people to a meeting. |
| [Send email to all participants](#send-email-to-all-participants) | How to send an email to all meeting participants. |
| [Download a meeting as an iCalendar event](#download-a-meeting-as-an-icalendar-event) | How to download a meeting as an iCalendar event. |
| [Close a meeting](#close-a-meeting) | How to close a meeting in OpenProject. |
| [Re-open a meeting](#re-open-a-meeting) | How to re-open a meeting in OpenProject. |
| [Delete a meeting](#delete-a-meeting) | How to delete a meeting in OpenProject. |
| Topic | Content |
| ------------------------------------------------------------ | ---------------------------------------------------------- |
| [Meetings in OpenProject](#meetings-in-openproject) | How to open meetings in OpenProject. |
| [Create a new meeting](#create-a-new-meeting) | How to create a new meeting in OpenProject. |
| [Edit a meeting](#edit-a-meeting) | How to edit an existing meeting. |
| [Add a work package to the agenda](#add-a-work-package-to-the-agenda) | How to add a work package to a meeting agenda. |
| [Create or edit the meeting agenda](#create-or-edit-the-meeting-agenda) | How to create or edit the agenda. |
| [Add meeting participants](#add-meeting-participants) | How to invite people to a meeting. |
| [Send email to all participants](#send-email-to-all-participants) | How to send an email to all meeting participants. |
| [Download a meeting as an iCalendar event](#download-a-meeting-as-an-icalendar-event) | How to download a meeting as an iCalendar event. |
| [Close a meeting](#close-a-meeting) | How to close a meeting in OpenProject. |
| [Re-open a meeting](#re-open-a-meeting) | How to re-open a meeting in OpenProject. |
| [Copy a meeting](#copy-a-meeting) | How to copy a meeting in OpenProject (recurring meetings). |
| [Delete a meeting](#delete-a-meeting) | How to delete a meeting in OpenProject. |

## Meetings in OpenProject

Expand Down Expand Up @@ -78,11 +79,11 @@ In order to edit the title of the meeting select the dropdown menu behind the th

After creating a meeting, you can set up a **meeting agenda**.

You can add items to an agenda or directly link to existing work packages by selecting the desired option under the green **Add** button.
You can add items to an agenda or directly link to existing work packages by selecting the desired option under the green **Add** button. You can add notes and attachments to every agenda item.

![The add button with two choices: agenda item or work package](openproject_dynamic_meetings_add_agenda_item.png)

After you have finalized the agenda, you can always edit the agenda items, add notes, move an item up or down or delete it. Clicking on the three dots on the right edge of each agenda item will display a menu with these options.
After you have finalized the agenda, you can always edit the agenda items, add notes, move an item up or down or delete it. Clicking on the three dots on the right edge of each agenda item will display a menu with these options.

![Edit agenda in OpenProject dynamic meetings](openproject_dynamic_meetings_edit_agenda.png)

Expand Down Expand Up @@ -142,6 +143,18 @@ Once a meeting has been closed, it can no longer be edited. Project members with

![Re-open a meeting in OpenProject](openproject_dynmic_meetings_reopen_meeting.png)

## Copy a meeting

You can copy an existing meeting. This is useful if you have recurring meetings. To copy a meeting, click on the three dots in the top right corner and select **Copy**.

![Copy a dynamic meeting in OpenProject](openproject_dynamic_meetings_copy_meeting.png)

A screen will open, which will allow you adjust the name, time, location and further details of the copied meeting. By default, the date for the copied meeting will be moved forward by one week from the original meeting's date. You also have an option of copying the agenda. Don't forget to **Save** the copied meeting.

![Edit details of a copied dynamic meeting in OpenProject](openproject_dynamic_meetings_copy_meeting_details.png)



## Delete a meeting

You can delete a meeting. To do so, click on the three dots in the top right corner, select **Delete meeting** and confirm your choice.
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 8 additions & 8 deletions docs/user-guide/wiki/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,6 @@ OpenProject has supported macros on textile formatted pages and continues to do

Where applicable, the table of contents (TOC) macro will output a listing of all headings on the current page.

### Work package button

Configure a button or link to target the work package creation screen in the current project. You can preselect a work package type that should be selected, making it easy to guide the users to the work package creation form.

### Include wiki page

Include the content of a given wiki page in the current, or another visible project.

### Embed work package table and Gantt chart

This is the most flexible macro that provides extensive functionality regarding the inclusion of dynamic work package tables with all the potential of the regular work package table.
Expand All @@ -108,6 +100,14 @@ The rendered page will then fetch the work package table results dynamically, re

Use it to embed views in other pages, create reporting of multiple results, or to embed a Gantt chart view.

### Work package button

Configure a button or link to target the work package creation screen in the current project. You can preselect a work package type that should be selected, making it easy to guide the users to the work package creation form.

### Links to child pages

Create a hierarchical list of all child pages of the current page.

## Full vs constrained editor

In some resources such as work packages or comments, the editor does not exhibit all functionality such as macros or image upload.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import { PathHelperService } from 'core-app/core/path-helper/path-helper.service
import { JobStatusEnum, JobStatusInterface } from 'core-app/features/job-status/job-status.interface';
import { ToastService } from 'core-app/shared/components/toaster/toast.service';
import { ApiV3Service } from 'core-app/core/apiv3/api-v3.service';
import { EXTERNAL_REQUEST_HEADER } from 'core-app/features/hal/http/openproject-header-interceptor';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';

@Component({
Expand Down Expand Up @@ -181,34 +180,14 @@ export class JobStatusModalComponent extends OpModalComponent implements OnInit
}
}

private handleDownload(redirectionUrl?:string) {
if (redirectionUrl !== undefined) {
// Get the file url from the redirectionUrl
this.httpClient
.get(redirectionUrl, {
observe: 'response',
responseType: 'text',
// This might or might not be an external request (depending on the configuration of an S3 storage)
// But not having headers like X-CSRF-TOKEN set works in both cases.
headers: {
[EXTERNAL_REQUEST_HEADER]: 'true',
},
})
.subscribe((response) => {
this.downloadHref = response.url;

this.cdRef.detectChanges();
this.downloadLink.nativeElement.click();
}, (error:HttpErrorResponse) => {
// In this case, most typically, there is a CORS error.
// Instead of failing completely, we show a manual link for the user to click themselves.
if (error.status === 0) {
this.downloadHref = redirectionUrl;

this.cdRef.detectChanges();
}
});
private handleDownload(downloadUrl?:string) {
if (!downloadUrl) {
return;
}

this.downloadHref = downloadUrl;
this.cdRef.detectChanges();
setTimeout(() => this.downloadLink.nativeElement.click(), 50);
}

private performRequest():Observable<HttpResponse<JobStatusInterface>> {
Expand Down
2 changes: 1 addition & 1 deletion lib/open_project/ui/extensible_tabs.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def core_user_tabs
path: ->(params) { edit_user_path(params[:user], tab: :general) },
label: :label_general,
only_if: ->(context) {
Users::UpdateContract.new(context[:user], context[:current_user]).allowed_to_update?
::Users::UpdateContract.new(context[:user], context[:current_user]).allowed_to_update?
}
},
{
Expand Down
2 changes: 1 addition & 1 deletion modules/gantt/app/controllers/gantt/menus_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def default_queries

menu_item(
params,
Gantt::DefaultQueryGeneratorService::QUERY_MAPPINGS[query_key]
I18n.t("js.queries.#{query_key.to_s}"),
)
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,10 @@
module ::Gantt
class DefaultQueryGeneratorService
DEFAULT_QUERY = :all_open
QUERY_MAPPINGS = {
DEFAULT_QUERY => I18n.t('js.queries.all_open'),
:milestones => I18n.t('js.queries.milestones')
}.freeze
QUERY_OPTIONS = QUERY_MAPPINGS.keys
QUERY_OPTIONS = [
DEFAULT_QUERY,
:milestones
].freeze

PROJECT_DEFAULT_COLUMNS = %w[id type subject status startDate dueDate duration].freeze
GLOBAL_DEFAULT_COLUMNS = %w[id project type subject status startDate dueDate duration].freeze
Expand Down
Loading

0 comments on commit ae74255

Please sign in to comment.