From 357b28be46c8fc9a27547189096d6880646cd950 Mon Sep 17 00:00:00 2001 From: ulferts Date: Mon, 16 Nov 2020 09:36:33 +0100 Subject: [PATCH 01/34] Bumped version to 11.0.4 [ci skip] --- lib/open_project/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/open_project/version.rb b/lib/open_project/version.rb index fd0c451e4b..911434fe33 100644 --- a/lib/open_project/version.rb +++ b/lib/open_project/version.rb @@ -34,7 +34,7 @@ module OpenProject module VERSION #:nodoc: MAJOR = 11 MINOR = 0 - PATCH = 3 + PATCH = 4 TINY = PATCH # Redmine compat class << self From 0619970c324c27ede9152e8f0b7c8a3bc25f4ec3 Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Mon, 16 Nov 2020 11:03:08 +0000 Subject: [PATCH 02/34] update locales from crowdin [ci skip] --- config/locales/crowdin/lt.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/crowdin/lt.yml b/config/locales/crowdin/lt.yml index 583205fbf9..7b647a9bc6 100644 --- a/config/locales/crowdin/lt.yml +++ b/config/locales/crowdin/lt.yml @@ -534,7 +534,7 @@ lt: invalid_url: 'nėra tinkamas URL.' invalid_url_scheme: 'nėra palaikomos protokolas (leidžiamas: %{allowed_schemes}).' less_than_or_equal_to: "turi būti mažesnis arba lygus %{count}." - not_current_user: "is not the current user." + not_current_user: "nėra dabartinis vartotojas" not_a_date: "nėra tinkama data." not_a_datetime: "nėra tinkama data ir laikas." not_a_number: "nėra skaičius." From 4d6b81ef04df151f6b433699bb0a1f3029f00f60 Mon Sep 17 00:00:00 2001 From: ML-OpenP Date: Mon, 16 Nov 2020 16:52:31 +0100 Subject: [PATCH 03/34] docs: attribute highlighting, enumerations, typos [ci skip] --- .../system-admin-guide/enumerations/README.md | 15 ++++++----- .../activities-time-tracking/README.md | 10 +++---- .../README.md | 26 +++++++------------ 3 files changed, 23 insertions(+), 28 deletions(-) diff --git a/docs/system-admin-guide/enumerations/README.md b/docs/system-admin-guide/enumerations/README.md index 5c01968da4..13c626b797 100644 --- a/docs/system-admin-guide/enumerations/README.md +++ b/docs/system-admin-guide/enumerations/README.md @@ -4,15 +4,13 @@ sidebar_navigation: priority: 780 description: Manage enumerations in OpenProject. robots: index, follow -keywords: enumerations +keywords: enumerations, time tracking, priority, document categories --- # Manage Enumerations -The **Enumerations** settings allow adapting of Activities (for time tracking), work package priorities and document categories. +
+**Enumerations** are a menu item in admin settings that allows the configuration of Activities (for time tracking), project status and work package priorities.
- \ No newline at end of file diff --git a/docs/user-guide/projects/project-settings/activities-time-tracking/README.md b/docs/user-guide/projects/project-settings/activities-time-tracking/README.md index 2ed2357fc9..d7278953c0 100644 --- a/docs/user-guide/projects/project-settings/activities-time-tracking/README.md +++ b/docs/user-guide/projects/project-settings/activities-time-tracking/README.md @@ -2,18 +2,18 @@ sidebar_navigation: title: Time tracking activities priority: 300 -description: Manage activites for time tracking. +description: Manage activities for time tracking. robots: index, follow keywords: activities for time tracking --- -# Manage activites for time tracking +# Manage activities for time tracking -You can configure Activities for time tracking in the System *Administration* -> *Enumerations*. You can activate or deactivate time tracking acitivites per project. +You can configure Activities for time tracking in the System *Administration* -> *Enumerations*. You can activate or deactivate time tracking activities per project.
**Time tracking** is defined as a module which allows users to log time on work packages. Once the time tracking module is activated, time can be logged via the action menu of a work package.
-Navigate to the -> Project settings -> *Activites (time tracking)*. +Navigate to the -> Project settings -> *Activities (time tracking)*. -Select the activites which you want to activate for time tracking in your project. Press the blue Save button to apply your changes. +Select the activities which you want to activate for time tracking in your project. Press the blue Save button to apply your changes. ![time tracking activities](image-20200211134150920.png) diff --git a/docs/user-guide/work-packages/work-package-table-configuration/README.md b/docs/user-guide/work-packages/work-package-table-configuration/README.md index 46aa832555..7818d75e38 100644 --- a/docs/user-guide/work-packages/work-package-table-configuration/README.md +++ b/docs/user-guide/work-packages/work-package-table-configuration/README.md @@ -62,9 +62,9 @@ To add a filter criteria, click the **+ Add filter:** button in the grey filter ![add-filter](add-filter.png) You can add as many filter criteria as needed. -Also, you can filter by [custom fields](../../../system-admin-guide/) if you set this in the custom field configuration. +Also, you can filter by [custom fields](../../../system-admin-guide/custom-fields) if you set this in the custom field configuration. -If you want to search by subject of a work package, type in the **Filter by text** the expression you want to filter for. +If you want to search for specific text in the subject, description or comments of a work package, type in the **Filter by text** the expression you want to filter for. The results will be displayed accordingly in the work package list. @@ -76,23 +76,18 @@ The results will be displayed accordingly in the work package list. By default, the work package list will be sorted by work package ID.
-The **ID** is unique for a work package within OpenProject. It will be set automatically from the system. With the ID you can reference to one specific work package in OpenProject. - -
+The **ID** is unique for a work package within OpenProject. It will be set automatically from the system. With the ID you can reference to one specific work package in OpenProject. To sort the work package list view, open the [work package table configuration](#work-package-table-configuration) and select the tab **Sort by**. You can sort by up to three attributes, either ascending or descending. ![1566396586476](1566396586476.png) -Click the blue **Apply** button will save your changes and display the results accordingly in the list view. +Clicking the blue **Apply** button will save your changes and display the results accordingly in the list view. ![sort-work-packages](sort-work-packages.png) +**Note**: If you have the hierarchy mode activated, all filtered table results will be augmented with their ancestors. Hierarchies can be expanded and collapsed. Therefore, the results may differ if you sort in a flat list or in a hierarchy mode. @@ -106,7 +101,8 @@ You can sort the work package list manually, using the icon with the 6 dots on t Moving a work package will change its attributes, depending on the kind of list displayed, e.g. hierarchy changes or priority. -To keep the sorting it is necessary to [save the work package view](#save-work-package-views). Please note: This has no effect on the "All open" view; you have to save your sorting with another name. +To keep the sorting it is necessary to [save the work package view](#save-work-package-views). +Please note: This has no effect on the "All open" view; you have to save your sorting with another name. ## How to switch from flat list to hierarchy mode? @@ -133,18 +129,16 @@ The following attributes can be highlighted in the list: * Status * Finish date -Either ![attribute-highlighting](attribute-highlighting.png) - -Furthermore, you can highlight the entire row by an attribute. +![attribute-highlighting](attribute-highlighting.png) -The following attributes can be highlighted as a complete row: +Furthermore, you can highlight the entire row by an attribute. The following attributes can be highlighted as a complete row: * Priority * Status ![highlight-priority](1566399038768.png) -You can configure the colors for attribute highlighting in the [system administration](../../../system-admin-guide/#status-colors). +You can configure the colors for attribute highlighting in the system administration. Find out how to set it [here](../../../system-admin-guide/enumerations/#edit-or-remove-enumeration-value) for the color of the priority and [here](../../../system-admin-guide/manage-work-packages/work-package-status/#edit-re-order-or-remove-a-work-package-status) for the color of the status. ## Save work package views From 766742d24a17e3a1f843ac5862467cb4343f60c5 Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Wed, 18 Nov 2020 09:32:13 +0000 Subject: [PATCH 04/34] update locales from crowdin [ci skip] --- config/locales/crowdin/pt.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/crowdin/pt.yml b/config/locales/crowdin/pt.yml index eabdb18aef..40f7fd2e1c 100644 --- a/config/locales/crowdin/pt.yml +++ b/config/locales/crowdin/pt.yml @@ -535,7 +535,7 @@ pt: invalid_url: 'não é um URL válido.' invalid_url_scheme: 'não é um protocolo suportado (permitidos: %{allowed_schemes}).' less_than_or_equal_to: "deve ser menor ou igual a %{count}." - not_current_user: "is not the current user." + not_current_user: "não é o usuário atual." not_a_date: "não é uma data válida." not_a_datetime: "não é uma data/hora válida." not_a_number: "não é um número." From 04669b20adc4a6f2e9051626e71d688c4dcb398d Mon Sep 17 00:00:00 2001 From: Markus Kahl Date: Thu, 19 Nov 2020 14:11:39 +0000 Subject: [PATCH 05/34] added remark on how to synchronize ldap groups manually --- .../ldap-group-synchronization/README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/system-admin-guide/authentication/ldap-authentication/ldap-group-synchronization/README.md b/docs/system-admin-guide/authentication/ldap-authentication/ldap-group-synchronization/README.md index 4e68d42088..7d1945c283 100644 --- a/docs/system-admin-guide/authentication/ldap-authentication/ldap-group-synchronization/README.md +++ b/docs/system-admin-guide/authentication/ldap-authentication/ldap-group-synchronization/README.md @@ -1,7 +1,7 @@ --- sidebar_navigation: title: LDAP group synchronization - priority: + priority: description: Synchronize LDAP groups. robots: index, follow keywords: synchronize ldap groups @@ -35,7 +35,7 @@ LDAP group synchronization augments the memberships defined by administrators i In order to get to the LDAP group sync administration pane, expand the LDAP authentication menu item in your administration. - + ### Define group base and key settings @@ -43,7 +43,7 @@ In order for the LDAP groups plugin to locate your group entries, you first need ![LDAP group synchronization settings](Bildschirmfoto-2018-02-01-um-16.41.26.png)LDAP group synchronization settings - + ### Create a synchronized group @@ -51,4 +51,11 @@ To create a new synchronized group, use the button on the top right of the page The *entry* *identifier* field corresponds to the value of the group key, e.g. **groupA** for our first exemplary group. -Click on *Create* to finish the creation of the synchronized group. The LDAP memberships of each user will be synchronized hourly through a cron job on your packaged installation. Changes and output will be logged to */var/log/openproject/cron-hourly.log*. \ No newline at end of file +Click on *Create* to finish the creation of the synchronized group. The LDAP memberships of each user will be synchronized hourly through a cron job on your packaged installation. Changes and output will be logged to */var/log/openproject/cron-hourly.log*. + +If you want to trigger the synchronization *manually* you can do so by running the respective rake task directly. +In the packaged installation, for instance, this would work like this: + +``` +sudo openproject run bundle exec rake ldap_groups:synchronize +``` From ad6d612de14e6c353eca9a529401dc220d99733c Mon Sep 17 00:00:00 2001 From: ML-OpenP Date: Thu, 19 Nov 2020 16:39:48 +0100 Subject: [PATCH 06/34] changes to docs [ci skip] --- .../create-openproject-plugin/README.md | 10 +++++----- docs/release-notes/8-0-0/README.md | 4 ---- .../work-packages/edit-work-package/README.md | 11 +++++++++-- .../image-20201119163714831.png | Bin 0 -> 26268 bytes 4 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 docs/user-guide/work-packages/edit-work-package/image-20201119163714831.png diff --git a/docs/development/create-openproject-plugin/README.md b/docs/development/create-openproject-plugin/README.md index 9651f05c60..94b4c3ba04 100644 --- a/docs/development/create-openproject-plugin/README.md +++ b/docs/development/create-openproject-plugin/README.md @@ -42,7 +42,7 @@ bundle install You may have a look at some existing OpenProject plugins to get inspiration. It is possible to add new routes, views, models, … and/or overwrite existing ones. -Feel free to ask for help in our [Development Forum](https://community.openproject.org/projects/openproject/boards/7). +Feel free to ask for help in our [Development Forum](https://community.openproject.com/projects/openproject/forums/7). ## Steps to release a plugin @@ -62,7 +62,7 @@ A code review should check the whole code and remove glitches like: Usually, this should be GPLv3 and we are the copyright owner. However, some plugins might have additional authors or might originate from code with a different license. These issues have to be resolved first. Also check the years in the copyright. If you need to find all contributors of a repository including their contribution period use the following rake task: ```bash rake copyright:authors:show['../Path/to/repository/'] -``` + ``` 2. Add a copyright notice to all the source files @@ -126,9 +126,9 @@ It is probably best to use READMEs of already released plugins as a template. 1. Make the github repository public. 2. Make the plugin project public. - Do a little cleanup work first by removing modules not needed. Currently, - Activity, Issue Tracking, Time Tracking, Forums, and Backlogs are default. - Also, the My Project Page should only show Project Description and Tickets blocks. + Do a little cleanup work first by removing modules not needed. Currently, + Activity, Issue Tracking, Time Tracking, Forums, and Backlogs are default. + Also, the My Project Page should only show Project Description and Tickets blocks. 3. Create a news article about the newly released plugin and its features. 4. Twitter with a link to the news article. 5. If the plugin is referenced in our feature tour, add a download link to the plugin in the feature tour diff --git a/docs/release-notes/8-0-0/README.md b/docs/release-notes/8-0-0/README.md index cf00b49c2c..3bc7185fb6 100644 --- a/docs/release-notes/8-0-0/README.md +++ b/docs/release-notes/8-0-0/README.md @@ -155,7 +155,3 @@ perform the upgrade. [Please visit our upgrade guides for more information](https://www.openproject.org/operations/upgrading/). - -  - - diff --git a/docs/user-guide/work-packages/edit-work-package/README.md b/docs/user-guide/work-packages/edit-work-package/README.md index 472288ed83..6a1d6a322b 100644 --- a/docs/user-guide/work-packages/edit-work-package/README.md +++ b/docs/user-guide/work-packages/edit-work-package/README.md @@ -96,7 +96,7 @@ Tip: **keep the Ctrl. button pressed** in order to select and edit several work To open the quick context menu, **press the RIGHT mouse button**. -You have then the possibility to: +Then you have the possibility to: * Open details view of all selected work packages. * Open the fullscreen view of all selected work packages. @@ -105,4 +105,11 @@ You have then the possibility to: * Bulk copy all selected work packages, incl. the hierarchy relations (parent-child relations). * Bulk delete all selected work packages. -![bulk edit right mouse click](image-20200331133245192.png) \ No newline at end of file +![bulk edit right mouse click](image-20200331133245192.png) + + + +At the bottom of the page you can decide whether email updates regarding these changes should be sent or not. It makes sense not to tick the box for large updates to prevent users from getting flooded by emails. + +![bulk-edit_email-updates](image-20201119163714831.png) + diff --git a/docs/user-guide/work-packages/edit-work-package/image-20201119163714831.png b/docs/user-guide/work-packages/edit-work-package/image-20201119163714831.png new file mode 100644 index 0000000000000000000000000000000000000000..4e7c803e277c75f9827ff5d30d80998a8e0fe0ee GIT binary patch literal 26268 zcmeFZbx@W4`Y(*4q8J#22!cvVOG{dS2-1u0?(RkeloSwFPATXIQvo$KDe z{p|Vub7tN%@0m02%zO6C^XRj5vF`hOU)SgQ#I^Qk2{ECY*blHVFfeWkzkMTxfq_|v zfpJ0Y>J@m!!y$zn1LF~f@SB%1_AzS{b}vv1=XIO=<<}XUK2w|Oa9TY2pwyp5$6{g> z=pCL^G@f$p&s%!>VpbDpdbgXkkqVK!=xACY(@4gBp9@@&B&m6b@lPb+wiX@lWy~*>yQ5Rd-&JaE7#n;kk{e&<9En0@c;ey zEQG#b$p7<}hc7Rx|JS=e-nP5+zx;-N)VcRci-w)%R$hYgA9{u~%ruc^eReHo&Nx zs*%ppIL@{4bnay<yvmB-ZTepZsJ)ZM3ZuCeNC_Dxs%K1(VoTePj7Y?luP8NN8tYR#Fu z0%_Kxgv06^4^CJI>1>G^@NjA+9^Gr!u1|2hJMl+Yb;XI)^|I|aMuzX0`eV+fh^*6& zL*sh!nB9z)dp&!L?Rz$o;_HhMq~Tv;P=TK;Rfk<({HMBOa`-ULNSn1=l)u#5k-krI zJ|wSb`lz~Boq@hR<$7jj8zcFHWdF97s*{J|+4-@?+uIA7LzFqH6n9%|ds=RG9IRBf z+;Gbv)af`{iN7;%b~){yXLEGHjK?K{L+@?rI8>>xPbvSxDQ5nWRj`(jZE*N9Wtr^j z3ZDBykKE-3(I5eSVxkb8|(u)!vfooMTaqJl<0Eq~)9< z_UB|_;FOfu?D9jwN}i>p$EmV6PfmtIEI0!&BNg6Ux~w9Qj@wCs zohHSxy}rI?Z^;*0RL}D1n=bv2rKH<;?}!*T-3?D&)2jbEll9r~&8vRFft=wl9~JR( z79{@DuL8>3xcU(jfp*RIaV~qTPW`F*yZrH+FW=y5k(hl_m@->BaTAa4sz+ODY+NV* zZGM=$v%g)h&7P#a5P~jJ)A@``r+OvuY?F39=kx-{bio*t&ybdOm#)mtvspqJA3YzO zdL}2n+I7B$nTNFnbNgyn({Y6}u`0I5L+$QZcL}}u2idyTMjLqt-@AI;n^MGK+8Al{ zcUrt2em-?PK+A#QR#@IAa!M9F1rANe< zY4C{HQ$&=>NlZCRBd#aOQTKYdU7oKWjCwX7aD|vZrXdQiHs4}Qw}fh4Z+X$`S{ANA z{1Ee9x_@JEY0@gux;6KO>ul?*?|X_)MGrOa#k+7uD9+HhQev(g27J1jDM{!SibWWC zd@v_*%LdbvaZ^LAgd)w7orN?v3YGrA{IgesT=Hz2oiuyJHQoxlraA0&89LRED6_Z2 zD>ogM*2Huv0_M)ybwUbkumXqh%0_=F{pSeQqe9eGI^P}tb+J!Ypy(!^=t|`eQfDGM zR6FrAdt((faJA0%FLkZ+8J<&5I)O_=`2?*(iSBhhV%Mf7j_-ZN-2$>-JI*C@oW){0 zlg%CJU%w#l4Lh;;K|_htGt2eppTT3w+*~p{I87kjLvUodv_w9Xwy3eOBN%VLhWgAP zZlkm6f%CiiFHx#kLGMD`rJt7%HO%LO9ke+*Y7RM!qza!-<*|rce`?K8-dtr+xl;J* zZ@YB~dh~PYvD;iv22sR_&riHY&b+mUEnVW2f9r+xr;pU|5J1 zyYm_mgccoQ;g%jdW316l$Ec~?Z4IpJnQ01h`?&t+{h#4xyr%@}v-U?XyVLnt|L#!l zx2n1_YW*{6OG`3ux!+91NF-{}WPUSiR&HNaWLPLf_>0Qtur^tWzBBEYIL{};K|c`s6ju1`S81Gje&+m>NR(+o1v&|vE=Cr)`S1y64y-iG5)FWS6}gk9sl`{*}z8^ z^8NuN?hlvh{wa{ZSMOr{XGD^{{m;AqAHLyR&Yv#!=zx0AFi=Gzpr85h+B zV3yzbZ$Ey4IwK>4qv9Vde*8u_l)zQX-Z?Q2~I%#prZohczBV_@;sqy0woD@j~jfqJy<)KcQ7O!GnEym>*q zl&%@`HXEvsw@aB&sHfD_U%IUxe>tA9ower5A2H^rxIarHjIVDY&GH~1IV~+TBEqNs zQA8#%PeXq}G6x3-6Pz!MOm2klP&o_38-;3GVbtC0}A=1KOhWA~CBBWU2?mw zD3k?PEQM5f-xH*IPl6Ju=NA{PmVP~6vvtZBHR>w~%9Qwik&lnB;ExE@9<{(ItIofw z&he4L=$OP)-&eA-`0efOoUz@swk5Q_AG&lK7c6I1S4BLp+}zmNq1&sImc-rrJ0YT| zI66hC-9O5*yE@$3(}UyFD4C`6^gU9&P3PZ4DFaFQyNzsV;$=-AYzV#meO z3T0NXL))9`J+TNm%^#sMWfvm#;>wMAb(kYLU5;3-{&dc?1(V&l&*V;^=6t7cL^%t6 z75@HgvtJ~a4Gr9@oH1kBgek7Tcc=Zo{`a3EP3%fewas84==Ne2C?GCw4~4~!~Z@w^}| zE}kKm+kLt}bzZt2cp0q29EeXmq;^v0{K{9xb z&U+(z7^T*?=`Q4zWk+`DGPAI>x3!gNWB$}B{BI@1xn9joGJI$)-n7Z3+W_8ueqMP}RnVH?DZ{dF3T@5flab!(-3a z>A+vJJw^pwG9sf{_!%}=bNrW#iD@J7N9D)cZiA#gw;s+W1@UPv_oYD5uiAtsQvb+! z_wF5bM>u_wct)5qgZ8KI-wV(feii zikOSCmA6fW1e1`vXEGUO4J6_9tyeEw;$n#uy>#i4M6Ig}JZr&n%Y}E@TL3L52XjG= z;!zz7eL^cmt4rT~NM=X$;_1WEoplQ%cXq66&W?=OO-A2{iQR%1eumNZ*SI(-7U_Eo z8dfjdBR!F3kG@$}<1}K-9&yl?i|^kV#~c0J>d!QQCEU}-_O{mf*{So%X6wnxb`Lov zWnZFzpXSXE?<{tqb&eNOZengpG~q^7Hc@$z~dQ zXKJO1TZN-%W~{lMMT(vrF2OG6@vbVSY`c?s&f{4R(eo#)0f|vI+s-_hn+nVdS<@{AoESw=BPg8ua^&pYK zXKwpekBhj_vchkZn=ep2XA$D2jAl2{951t28!f(`Ip_-zqRqT)^LfIwb=i7$W~RQz z<@i3YBP+Mv-}!|IwHCwTN!I-sTT}S7&iVFGLN-HOtHtgV!GH%m2h*O-lk5Y0tCsQ0 zmgS#(eKlvBKKm0t4-w}(yo5p#@;P(X)YNcvSsYWnqri~G^}0tTmZ#Sf_oV+Rp1@-! zrZ1z#Mg+&^X8{S+*iL(E^)u$T@$e|5*G-u`>+9BQ&$}6GPd>!Q$4_36w(k-G_`>(| z3LxSruv=H96#e!>LPFxRnqNl7tYx|WP!=I{`0Vd|t!(j- zdU@h!YgP{!r3kN9Q9G*wpxq?AF!*z;nLur$n|u9Ng^iJ5AhEC)Hl76TWuM0Squo_P zIJD27KX*p5_^b?O5_DLwM0X{pq&#!j(%wUl3H8MBI?M+P?WCtEC@4TDoujuf1td52 z_lJorhkwG+uda4X*Lx~d+L{DQ+M#RH#9|wkt&&zYW{ ze&Zn*u7KpyL?s7w{)Z120fWxjui92l*gHARq0uU9!{2QAp=tanM8fl2j%^i7P2Wc_ zsJPb#`Xo{tPgI1N)f{>QVIpxmv3S64EU#%(pZY$!t+SK-(W8X6!@jfH4Ts*G@`iwy z^d6nwH;LN1yHiCYnK=Y7vck^mJTQs5tUqmRm}j6eQzPCVD@jR9Ket`Gf9KAfj~_q2 zb$W%X!E_%kIY}r;lR5G#Hg?5wZZJIlY1_)(rzI4Us-f*~3=L_tTKqMpYFrKu4%As6 zz~OzDOcIpIl)ahM+xGpnk9@f$1)wby{Iq5H!F;HAo;=+R5}tz)OiB*lAyt1rzc~*q zlId8x$r-3jianJ&ymMO=3Z{v6!^dk?M=P0h@_86gOFtx&;H?}2yvO2S-(h6!{^2`6 z*?uD+pph>xfeM4e+uGW)-{}={nDHXmQH@dxYuBD_#NnTZXW1FcEjJWDaf$dA7G>x) zK=f+IUF5HBZfyK=8ibME5keutX|sZBG?b;$9zwD6cS6ZbG>p7-?0vH@Ub;;BU5re* z+&}P>;DLQ@2_V8uDdZag8WR@QJZ4tgb#{8}aJoCZJdl15W-100%;sh*>9*VXzFU#u zpl>UQQ(B_>L6D?mFmXBxaGwVf zr&sbGG1mP%Ue2oj%RP$CsKD*q6-uH7IwptnZdL}(Egw&(zvVsv5cndo3ijx<7Jb$N zTeRY&+qsJ|``A=YrCsF&4;*cg+03CVN-IPm&5UI;o0YCij)YxXVr|i(F z4Z4M!lTPdThJzWk4`+%-jNiO@!(_cA@$>6bX=9rYvfaf-!_2NH_83R|>*D>X?{^K* zqimouatrno3Kqm^*_&?}b|{h%z4T#@4CYLQ}@ z`Qv+(qSN`UBw9mR3XW+}z53)-R6fbcA`rC1x1V9fe*Rmiw*I5 zdwa)S_9r;dY>6t{N+re`@JU4m{oa5NDqCkYBru9#&LV&g^$YO!+nAlpdg+CxX5wUO zuQhr!4A_`#wxU*yUB+{k7M5zkcxHQ3=AzUQJ_Na)vmQDVN(Y{+-n zHjT|YR*Y()BO*;YO^l$r6^Nrkq3(=1=kEfY>(x&C48>ap!|E^>0bHOrB&!{55_WP3 z1ti~!i|e%pKHORA^`we-mO6J8ko+N)f}LA)L}NE$LjX^crudG5dx}T|v(1VO!l>YA zy?{2sJkweF^&PsKNxSX#-Me>p3{ojnQUP@SbVauo=yZI0ZbgYOPku+UcoL6oU z%dhmicgOMi!4GKk!J*>hydTk#g2iZFBl#=!J(1yXPFIP^7}9Z%A3q*e5%jEgkBA`f zO@wLSo|cxTy04He3!uMiupUuVHrA{zuv!W!c z?<^coX}4s!zztKLR(9D7Vycc~`-X&205YG*vua44|HnMYmI+URU^6ss_#j)=ykED@*k= z&;=hs)yURhRY_S>8Cv}d-9pXH^gQ~9Mf6M89bDNL9GoP^U=#o z63CGZP`+x}D39@lpD<+u9(jTo%XcrKU_8*FOytfI6;?A zak`$Aot+&V*nrO)vE(WvSK1LDkUVUw`)OnPUS1=#ZI4 zAB9rWho+^`08y4}zn^8v(hg?I={0)a1X}ndCdNNEmk}w?^78U5)#|9MEIRlAAlFSz zO$iw^mA2^Ffplrm0v@2Ww3zPej}|?JV;MLX^lNSaP*$jQ9&{C;-NPhJaPDbh@aC*r{2Kf*}x!m z-nhV6y>s{UXm<_S5LW0XM_?`E7d$9-D z6|esTHs7|kw!8d3qb`GG7Fzg>s><5gtF5GNH(r#QPV7w1(x5W(fCE`tT3)?&tvqLa zs3uJ$f+6O)l{dni%B}QZs(be@le4mZ9aeKYC1tC^wv)n(0Nw|1v9sDgV=j><_7F<_ zEGTDWmO8Y5Ia#^flAMC#&clcAK`?y!^og1|tQPv;dUXg*>Jn$$gEwrGqC*|e8` zM>K{r7^wHEM>f0R_I3|H=pf>iq3ldOQu=@jm1dH^5S&f8 z4gY<54W`7}n(3Q#zm}RC3+$@P0u#C8EC?lassEW{#5*5~d5L?%?9SIo?An z!0-WT{)C%5`s2q-&d$y`$M+uu2ySg}D^xqOUA}zzNIy3%jS6A?pja0VHs_2ds}Kdl zqS0`vQ2HjId7WZWet7PYqCdC#&iVOmPy zFf{q@oy(2W29i#g2O6bg*RZi0OiNiT=ih=^kS?8eD@{BeAmNsaY)7F zuk))CN zQ3uxzrv|us@6MfAt}!NKC3i?k#nsgl zCSUxz=##BfYWb&=5VW3!iqT3=#84v|$SCvQ$?9krW!TYOf)Wz9fiMqDDMi8a_s+3aIpqTOwkIQzg4XhB4X3g(rQ#BvGy;nTMX10_KZ>n1S%85YasX-q(yXp8_ zn3c;@wft;`1HXD=n>97++%Ev=Fu`n`w4b|)urlyI0Q8;n`R8w5!2}(xHCklwBjYF1 z*VX%znOJXuSHP_IzH;*clg>}vIEO!kpf->{Q!>_}7BwaTQZDwo)A85!C-I(U)aEvw-Xfajwz@I&%wDaLlKxc5`0@P-U=5r)OV#tc|0 zPgaA+O-o&Q-ermcyUWXCQgv9sJDu|4S0gext6Z-zcQLX68n4q4zHH<=H#@syS%0`X zIb*&7(onN>456(sB~!Sn-=k2xgt7QvxnspnEBd@V3_W*;s z4~1i3U?7vL3b4DEXT2avS!XlRhnQ@;@Jdh`??*CQ5|P#D}y#=n_hU|WwBYcL2@ zPQh6AguVlGp(z+>F=h{qjqQRD{2`qd$j6dFZZLefwb1e0d>SJzE)K|`Y?i!5vsEHB zwyLTsz)$3-Pgg}LrSrwPZ8?dPlatNCH3YShV{fKkC4t)fyMfXGRFU;?po1lBd>P#CzyYCPZw!mCV75_(}P^ULB#Ig!+#zF zqIhm$!E3^l3hXQZn2?Bw)?eRWM*<$eplL?iS^-6I-2eL?8f2u_ji0gR;0gcf&OMi- zou^^Np(*X^Ofcp+R@c=yL&OG(`Y0d-UqI^}vC0M#Oyqx>Aks;NA_2Ed2y+VA>2 zjmDijE&XZYp`oFTkt}*YOt2pXKSihc?yMVB9Cb1PAHA zO6G_>3usux&+YY8$rh>vAZ)G>6cV9Mxh&!}@ncuov{cEgO!+sVCD~8wl;b2$A?sZ4 zA^rDaVw8-GK`>-pXv-R;b^H7JewUh&g6RT{wN#sFqa88-Hm_Yf5p4M&zN1f2FRJVQ zV{jV2iC?~c1;e&gpVe}2O#v~f!Mfet-5m^Cjdwe9kYryKd3OIsmO`O7j0MNNwRYrL z?4H4t1b2eTaYrAX6nHoa`K&y})o-D$yFdqWf}eoOkkJ^5gk{&=0 zLOB`?X5e9vx*j}Mb3LShS^fv=YQBT9R(oT*o@b*DQ(ISeYuu{m8PJO;b`$IufXogD zGd>pO$_N92S&tA87)mcd%E9oN_hYP?2C}sXza{`m@$8RV0YFiT$92MlG3O*cI_e*b z+*6L@wqpPSso9q-3~(bDANB=G7v`Emk^UW+rGPdxDYm3eAjysNu47|^V_RYT>S=bh z1JG2c`d0AV4SEwVPfkuYOQ|OHz6EECRyJ!IRFGq0O-Hd+@tmTBM8cF30Lrk+t*&yb zMR4S;g9GL0?TZw%Kl=D=*J0v7t6%|iUO-L>bitrdUNH|@YY-`8iRG!Z;$jK(6%23w z^AqVHKN{JrA3cJD;q4>nJ*jwGWzHESIq2yLLfS4iHe1cF)K}`ddvS0r^ujW)1U&K| zKdA5CyO)m2#0QEEqj;I>9MlMyK5y5X?YLs$@puEiE-Q?IFt{E=Dl8@@_Ge?J5f>L% zojqFk{rd$ZJRs(jh`+V@>ov|MFcyFx^KxYnVZRbyVgg%-p9?tDm#-yMP*^wuW<40? zF?=qH=iH#S1~X7epp)e3@PRe&Pq`r!aUR?~cpOijJOTHZ9s>Y70Yo`m(vPBBHtCj? z6HU#{n=lcVVhN#74h|1D!C-j?$`fD~I;!Hka5qpCglo{#zb6%zK%vY!4-XE^k9G`z zWP#M7D}MA_o7rN%?anP?&KICq;3KHRu-^~~BOsb7n++|$((eZ9^0~$A$1{vF^UTX8 z+#aAH`(dJMJ`L*CpNB)L+8Z^J$&mRBrv_5;JC$(77ugFw-rgZ!zrFz^c9;v``1VZe z3MfQs=6f@W1~x;W?Xm0N@q=B|N8yQYf{v5rI02-gQ!M%fdV;{H02{5bkGLN|;+b?i z@1LBW?pm>c+?0}%0@gzVy2jCG90ET`+Qz|faomtrHkG+;M^Uqktz6gL{?pYN&4J?%#+_!q`~h4(;)vqW z$Rw!Mx;Ar-f^+~~@aWMaB-4`sLIvzt2z>h=ipAh8Vfr+_1SbJ;1RxlJTmXsJfMM@` z420fD&}{a#{yRc#E`Z45kdP30 zu#R8=CV)ASVktUq$^o+t>^N+gYbB-=zVNYd59HL;OCdVHMxTS|qImv15?-2KToiJ4 zKC!`R(XU^FR!8R6O(OPWTlA>o(4L4(Nxk|sSbSnU}a{v+F0Y-}V(NeX#T@MhN1C)Dne?QG)uH}A! zpzF~xRjOF*JJ5=d(p-lJT%&KE!1^S&r z629Ni*ti=f3+^@8It?HwC2$9Z)nCtUdOLM-adoA5DX&e0_Jr8xute`YTXnZJh%yPoaqCC zZ7K`|@BpiJ`b2n+*9r+t2r%8)UYM{G9UdOaXUkUCr%+>qnbfQ(tEQ&5GMw83`X3qe z%Y&H_ahLu`Exx)=2d<|0P>zb9j}I0!TXV_tD*ORHm=9pYdbyq+J+t3X{|m{PUjeUC zk}m(*0U1~@WSpGe0PE+VCojbYU z=YapPQ`~1;`OvTV6>vzXo|fU^2q-lW)NN2YNQFb}3YK~_II0sHt0k=Z4}Gs)yM|m1 zzznly(^aHd!3R1&+pk@QECf^nZT|SZh(!7ehT!M`Bg|4N4TKK`?=YHHtnn5$_7gt7 zIA}g3Z3kyOm%Ba`Y++hj5j8(zQc}0(kFttX`@rbiJ35lUvL48k6YuGfA_hIq!2Lwg zJ{AJ@+05J;O)#;DdF(e5bzUm!y*8j1>JP^`T~#}u1smrPFK;Yjl!I|Dm95Bz0rTw; z(u;4rPV8HMLa`@)-ZsS=m9CO+V18qf_s;_8-gDp zrG}|oY>46&Axp?@WsUA~-fSl5jOULB8W`uaUQNKy&tG%0B@#}jVAzl3*LBw^$@91 z|A(S^6FJ1kqkJFranNvKcUY~}u=t_?%NJEfD03(eAntlV5n;vz0i|L-bAg0o)67%ESx3T;aUDyt{!q zK8@e)X7OE34KCou)SfdG^CXg=gr@I81E5g(V`zfv{dhj7hqtf*QvFGI9|%Yy6_b%6 z1#TFeip*L);|U69I9DychwoTaye9I?mpZ^o_ie(#;y2omOC`dIg0Zp<(G`>1nX?Rv zzHd1#yLt*pJdCJ8?k(2QqJEH)r&I2ex?Hg20SGDjjp^l-(23gl5rJ9tE#k6WcOi7#5eI*rW~X9t%r&k^|^wX!$hq5i1!XT6j*;?<#bPRnMh2N;1+g3Xj(iBjAkQp_Den9+T;2d)>jlg9L zxPW;j4~CWN*`XdjgEGRYp^a!uo}wdYqQeQD0RE5~hbaeK4b$aOGK_X-*ib;So}(8p z4a~3{vfuGy44GDmJd6SQ0WRQMNQX8yHy?v009Wrm2eZNQx=R=+-xX#7h!Bs}*^$AH}!*`texp+?IL0)=O~@w0t? zYBNignyNs8jl})1;(|m}tY(u{O&v)(^aDfb%}q^T5A0NbZ0xC+Z$=4&!hk6ORgbK# zAnO`SOG|gt$H5u`M;;DE*325znh#8|%>ilg<)k?nxmvA(&$L=@ASWp*dILZSp&E`! zDV*SAXUL>Cz#9&C`o$xmKp|4p0)J@$>Jr)oNNy7>tJGg-ta_2FTD@biLy<4127Ur; z`2Yu)&Rtf?RxC~gXZ2{ZO)%*W$ZBhARyLy{x{#A>PJOa$aQ@~X%^k>5QF6PjW=IrP zYgMh&KUC~?w49cuQW*|OL51CVPK5CF!1MIkt8vBa0}rkP_Gv(#d4rI7KI-p2(L}I( zRFTcXXwGfLMt*wwn*x#tJ#J^7AW&h|!ARTfaDjl=A--`2$rd8kzSIx{!n}Ba0kcjJ zh3f0;d;9JkP4Kjww1mV9sIWtD86D0~_tRA>*?}eqTpSn}km2FwMWp1lTen(ZhX6uQ zFepJGvKsV#gdQr?XuQH3IfA6Gs;VU50;mUHaRuiT7C;d22Gw{47#0L9|3XEe1HgG< zp!Mad@yFTEUi(|UuL`XKTC)0w=ZtL{uQ=EQkxUvFLD#UFj(bL1Sx$75<2l=Qz-t92*y^;{EdEb{^i(7if2Z>+RXV*`=(cLNIC(2--1no z?3N%&5PKv{-y|qH2%$fKuNn-VdMq$K=^E$5Xuhiq#TdU$OTl(`XudZ9QWv;a2ax+W z@TQSUJ4VEthQ5R+c5%^DHCqz=gI91z3I*Dq`BG3ya}J;$;1MB|06b|;uwWq%%ZF7D z441B#wzegz=}z|czaR{U5TpCcyMR3i^7Tt_@b{@{h6q1+YVME?S?w%IB61M? zC39D6`PK44aKLhYGv`ir7CkzEx$&obF)j%h3CDZSY;&EP0{i-W_8X6m_t%GowBM~N z6W+Lj=v%}yG8#rUC{kRrii+#tpwi$!98=WFW|8v9~_e1ITv(k;(F8HTUW9{&1RB#DLam6d_tf%S2;#{fJHFl!qu^OfDudUbWk{Ie8`efKAw#MKHU zV?ZUZ4(I9t`p57%gn&q2x%oP}s|Bbm#D51uWafY+m$0zZwh#Lsa3a!Q6p`sa3KnVDB(r z^1;e=As+*~5FG6%V^2=+jlSIgrvQ{Ng>0$5ba1iG8zhBLD0ow=inis3Wr=y9$Pgvh zoS!*CVT!`}B8CNkj$@h&5Lsjk0PZFQT7>wy1IOuu66B-fJlRcP98qrVlBoqh30G zm61_Yu`6hvhHGe?&N{TC6Jce}!cpV0YHdx|t$mW11(z&X<;S4IU zRQv>#KM2hbW}Tl)@z2bsU$`jx0DFMhGVCdp*55v1HuNsRuB)b_WYC)MrtaU4v-gM!5$6_ zsNJW%qnO9AEL65okfcJJ*8kbZ$A?eRE{Vu+^tD>YmrCOiW*6VAy;1N^gy2a-7J|?j zvdZ)xuDK_0j&}M52HesR_9}ut34yu>frFzCoC%mK%k*DsTsP;MA?Htv|<0 zn^b;oYkLd!cs*k5f@0lOUja{y+P49TdBD?6;9nAnDmi@zelLW*9yO*^;7$POydX88 zYd=;-p&qd6BW?%($p$98oKUlqXx`cd!Vf%>R6dugvYyDj1l4@a%TJ#^1)t0nhFXO! z`W*nIu(Is|?xf z3_X-9jNqqoIm93c07C9TkO~1eY#v>ad?vbGoMl z&e>HQoJ9n@RjVB#C_-4pVhu%z}Oldy>JaBq-_U%+bTG>MEi z9|g;^0EW=ncZi6bdaI>FTHjaZA~_X&)B#}It`3o+&o0VzZ67CpTCd62o{)5*KTvKq|R>88*3ko6-dR@gb{fC(G`*&|GQ*kytC_#6=fI1FNumeV(a9n|d_iw0djRq+`3{+J*xIx$S4Ltt z$itLvyK9F+e`P7K04J55*MlpFA!!35nASGH3aiwP&FaC7^8pf?r z^k3bdm(tkss;jFJml)JDV~8?22ZtPK`QGks3VfB z&}Ue z&C_{KijV3Hi<#ByFit&^FUP<`>Jxe;Qm7?t1Vh1b#Uljvxr*5s#nSG%xw*x;9vQ%H zY%@H)pHPUfYyKhbL>C?dBF4d!20!}CU5775yxqaU!SLU~pfw>{+#xxGeW`2qV?o=>_ zvQp6c^73bZWEk)B3k!HplbSUjgU6YXN}%S~pb%dydB;StJdxTlEeP^Z-^8VJ6s|yz zv0L`LjJW=sn=D_!}7+N1fVGc zU~av=qDOzc1BN-HBYzD4UqH}Q5U@u*rm2fZ0TO*IPQIb+g&mMvmX3kz_z3O`gv+X! zE9x7prob?P-0e$9NCRvF?LL$(ieyiDel<}ij}(L|vL}Uj{OA%z__7DHN$X9M1X!^J z3D?2W!}A(|?A?OmaNKKHDS@PL#n)b|5yw1Cb6RkaDNs=@jI5|mVM;~~RPDcE#QdDm^s4v9%y zdwZ|h-|KGYQngN*GEt>OC=~3WBtW7EBu}|W@D&P$q^hthhpg^{#gYov9Yu+*0ukO3 zAc;bieg2twhH5nzM1E7}C9sjhv-evoLb+dhyhyblV1FCg!i4QlL^luRss&|aK#156 zdK6}fV&dvFL+gyWI@5jF;O(m&)6Bp9;DO`o^~{FdFGC6R^uQwlwnO9Mx{udud%%4~ zwy5AxVWuOJ=+&!N_ORRf+1HmQ*t^Ph0!b#mb?Jh#cndUZXL}Znc9Eo-ohqN)P9JQA zpzt{o#Dl4d0}^U@m?jLs6Bt9mz|Z7>pE&SM6mXO75fXk53K9=~M8?N=7IH|Nb9%A;bC zweQLfH-Ik)ta_+g^x4V*vQkh|3a%4ZOYX-&Wx@^){Ir#Ri|VSXww@j&Oq>oDB0+2f z$jnz`4PliB>~k1Y;HjvmTk9K%a6n?3Go04w-6Z_9^PgRSn`Dp{!v=f^Y^V5wiTewZ zGLSS1mA3TfhdplaL=eAc2mGox%rA_3E}H!LdvdrP326}QS!)C0fM^g{ukze}c>+sZ zT_DKaA$A;oe!Nzu!n=wF9#Y^T8;qCbliW6{PF8f611c;v z(I8;7X7AvD_zJz*N*thHg1U73g<_{$D5lHvH0;W~RW14-91!TTU4`}XD}-0YvC!Ai5-%CzRApAX=9c;^_GLrF843okM82i~ z>~}T57nG3h1i#;{a<82~s zWOGQ?4_m7#jImM>f;iQ}cQ&g1fziMh==^~&xMZ>ek%SFQ5b!{ef3hfzTfmp<_^jp{ znq-=VMVx=|(uyQ)pIH`_$T&OmK(vP(v^E&4u<6g@v}cU4Gnm4=Zxo=$5EBYcgT(bf zgZEHXI6@MIg6OFURzblsgY|hP@U`Qdw}fFUs1aHekO3JWK&U0Yzq$-;;tgaA=?aCE z63iD;*=e#VShsg}=8K0_5x=_XWUFHww$rK(|3p_E%=$rK3ahR4Q2XVe3?br*iZkDq z{YGy&cBRgp&m;jLr^skn%$P3yT!hi4s7!>bOn2L>B*EBf2R()siK4q|^qp!eM z?JqA!;?^&&kFXmHeijDx-EUJ*ivoRtc2BRaI;rsf8RgoZ&0#EhS_JzF(4eYQ+vBjQ z1#3kK){bhq1B8-M!~V9h-dRHyGm#iuKvs`RYA*oDk-6Y`q< z2|H4dYM`yk+rHYE5H&X}^sUgDaFe51Kn)-wE9aOGe^yo|%3~?uh9hIL4TEf^Yyfng zC5W#A*HcH>e@hH16BH7XhOBWGR+l`oXD6S|SV9^M{sXe?2;VxZo&>)f1K|cdJHK8d z|G?yfWjJJaA;S9Wn`qIoT01Z~PQU|#Kj{TS6o3)_FDelK5c#eV@^u#oV3zvFIp7gO zC=bgYqUkx&47W;cFm5#SD_YaWDqBo;*>;=mdCMCFTX}E_D_?=nEjy0YcH>LeiV+3ncCm>=}_nBW=?RT$?2HrO09>ubC%T_P$c015(Qj_3qc=(x!e4|WdqlM0Eu?g9E@~|HR=x@?1)brOz)3 z^VcXLfguWoVr64H#LP5FwQGLvmjAYI8u!u#jr(^6f@?d%9M5>xcpOWWtZ?nkEiTD( z^Y9x7C)a1&{Y)cwBeA7~^C9dqr&8|3%N^*^RA&>=7PscU11 zATLSPV}v8`PWkX(fAH=yoHxAi75hpa^7>OeI74_rispVD@_MoilRE|SLc03@{Q>{? z4E}#w2RpRxq2!ORe#o|AK$?QwgbiAg>BiHrcS@_u$P2=wh9BV98osj3Oh52cZ+m|y ztN&O3yi8HMa6^I)-@wc)EnYkn`O5~CD|Y|YOsx0Iv5SzG{=d+61sIp=ZTW7ZaYMA7 z;ysY7G6^U9pMb#QB``5A4_vT{MY_<>`j`X;;fPBC3HYB;H=jI1@aI1d({@un=vl+nQ>`ZKv?`p%+ z%n8pnpp;5jR01X5|4Bm|%kiW_N*lcr@p)CKpOswP;?$2$VWRz;id|a1qkGV9#bR%F zA4LcCV4&9iwScjWf1Og%HUM%iSotvDtiWiwD=@@Zre2@rugl6#%Rchw!{>jp zNcp<>)sC(Q#xp1QIJ$IQKiG4K*J<{*I@tAUt=^owPS3M9|3pwMuDPrwBiqdtIRe(J zyR3~XH}iQRPIMmOyrWqV?WNb0y)vX#f458D z)Z~9oXVJ|wU3+`6La1zxGj)A#95dy(%woKhj9`eTvy|cN4wc(7^M4Hv_9Uq9s`OPi z+OT*0BoAK@GiwZa5Zle4DLHp`(Mo5`{}`Qr_=Aww$IsQ8UikK149Sa;qTUxo(8;1+ z#3NnR>M1WMl-`%*ge%{_t$lXp;ic)da*|nV^0L4;j9%dZ5eL5tm++(C;}-YsmoZ8q zH)bn(dTZL`>D5OJ5$yeX0wlF)#lPTlmup3pFAq7%-wE^xS>&b zuj=oORs1vOuHve%@$Kp7d1gIVZJLreR2x-jx2lel)-^;I=ahGoguYoEoLSSAc`B_t z#+2w&TLp3k?~@dg+EgJw{?Rt zdsVY({(03t=~PeWGl#h9eZidb!JDiELz~gGwJp^FjU($DT9Kv0@=J>C^tFd`Zi?{|Ce5KW zgRJs>n(mruC7!Y;A97G9J7WYJr&GN3Z6n*9`i9|ZZrjc^4!dg97p-&Varnz);!kv* zVdV1fjkT!MR(czqZ%{7;ls5CYjM*sLbOmJjKVDYuG;`fhsj)wkD?97e)g?9OyyvNR z*iswUwQpu${~sqpg(if?RkxgLe}Y?;YTbZt!F z%x`$w>MfJj^bpiIU+(C*MjxcoSib1uqnGrI*z)(wfh@NV(Psy@W5--;O8*6a_qaE% zntMCDv|;j}K3K10#}a;(lIP*Q+`3h4rq&rVb73Td=e18wm~`z1#jS^GH(R?kCeo?4 z76;QTP6rp6zh4QAz1AAL#Xo-b`^nyOOO9LT2hGI&MMPTOIv%0=%5G28Dt2}8tIySS z=dA|VZ=`&u-1pYQA~akf`jOjFOB0%DxJuY3F?`zM?O^!fo5pcXG^6VoxwlW?;&L9sXLB%Q>k55;3&i{xLtB+5VgTG_E_am2-W ze@~Ldr`7qyZ`gb;lypH$D8BxXC{E{WUv{&d@eIr7{km(X6^Ck@-MQ4f)zta3^;i^6 z-HF}%8BZ#e&H%e^z4+$RJSP5VwV30lslyGy+d(PHG-j@jCCF*rwB$C&p!$0Kne;90 zNF3qw8ioI8VWu$Sd*X>8~2lBo8UkNJZxnUeq*Ia zdr5)vee9JN`AGqRfwv5agd}M2m)9^1uQ_dlM&IrurEHs3ZEID7E= zRziLS;|wF*p|EHFt%r4CQVj=@Se6aFxrJ9{?@FdOy|^;_=~3I44(}a?K|B;q)5{n4 zZQau8ubV9toS)$J6zkj{krz7dqxe|v;^3(g$xeIq!*H!G``aI1IaE$)A7^DJRTKnj ze)rSVBd~C}_j>8@0Y>5{`_QlgkyZTd4pP;6(s;$5ykN5SB04RTa_>o1v?@KyC!=dH1VCNc0jVN{SX`v7$w6 zuo4zgqXjEUkfN*_R*6JUw2c~_=&_RMtA;3R!}3K0(Slvw>a2FH-#zF4bZGwOzs^*Hu#V0Ry`TMFbqXI=@6zxZbPhFgbj7s&}b*AMt)5GWKi2uGZ$f* z4Q??A7weG-p1X3gx#BQMG=J9VoS7- z#PZ$sIb6Nl{5fWfbSE!mjSv^t^kan$jG^;%>Sw;Z#okZoAcB~qyR;4ki!d6RYl#wA;*J$60%w%te3^^ z2H| zRgJN^8sb+fmkORHR$4@NtnCz?9T)Ue&;4>rz()2#Hu^c^(RBUMmP`?`pz?~xBnQEL ziO=)5Q;)%wdq;p5OS|~S%fbVsp7Rr<_e z+?J}Y5bg#(9%$^dahFE#L92X0&D&d|0Ku)&!!o$!25g*#2@; zC9Z=1P6RG!Sv?##mXt8NH&b?+MT}6+F03y2xnkcpJva#Zv)B53atz?mwRKV{mHTu~ z0`Oo30U~62(jsE~Ry{M^`!(ygmF??SXYP9mR`dF72JCVVv<2d7q-8?wta5*wbg2~u zMEc4lo7XvWbOmgyPQn)g9N(9(1|=M6=qc|lzt8ql#(jQXfO_W3sJygVbuUl=n?_&l zHZRK=lzA%{9l>e&*m-Q37QC;IARe(XA=8GM_D8;ybh&T%g8q)~DOUwBvw~j;QxB=^yYu25V~qob^-OjE0h_k}d5AKb@T)FA;u8Sx zvpNRNUIN~6#qWYMLq@tz-N^I8GtK_>7q8!**hn1qe6R5;nO747Ai4f}JVRthliwG> zS_)M~Fol+@+f(U*Cr^x(j{rdQQp3=?y!U^ZP%5Ti;o~l~hSt^(k%ATV6a9Dx5ck=M zOHfTsO|imzRG|lkKkqyl+66O^!LuIIPeT}$LeDm9xo$kdpQY?HUm86Y!sr1a5QA>^ka(EqpC5w`MTl81VH|2Dbl&@nVG#eXBmOpE|TFlTg( zY=*1>YW{x%`@hqHMw`LJ@CcjfFuAL=kaR!GVhx$WE(MSq>Gx`&7`Zi7#tX)P({0rK z0FtKfS?Cd_e_I}?M=565mTD_^MEtO&X!mP>HSiAE_V&Wgt=H>*_^0w-NzZs5S61UR z)6EC|bhPV?@SL-*+W^w-Y^C(x_+G^wKTB*Fg;G%lS?T)c^@6dr(xSzACBKy#Madoc z@71n_L2#?339{cp!Z?~0WSdM{a!)t)Ljpp?tGX~n#JcK7|G+Kp4aEcKhM@BR7x-8mGhlIbcd1Y*?y9d=V10lQ+*>0A#6w=6O(cK#qEvgl!HOpUN1-4P`6ENsi1*^9oHcvZetT$ zF0o$B9RDS^OkF-Dzea3<-}~I-T#Uy>UVjLUHEP>FcJjbPscc-92=uw|?h*$mkn317 z$u3+WX5L0`G=0!9PH@WeaI*k=@Lhm^zD2-VUx`j$8JVHMf{7dmSQFU0i9V)S^AC`` zI_Urqf$N4yX!0wklri#tw{dNZ3T|}eFhnKn^^J#BOO;Re5tK`U-qxj%-JhY+rJ2?g z;Kd>SJ{1(EGpXP1;2<>PFA7T)=eT`t*m&<%0unU-*!j z+uxxwf%y&+%g^!ZkW$4wR-wdvGp5>3xVq9(8YojR(cYi`g8@o|UA$?q1QE+2@+dEq zIx;`iPRMaqN4Vmy2*n#+Rj#hj=2g)VFspWZsifi`GHKWC_m2<+_aRqruVi~NK^zEN*qp<74qY8~dwN_BBN-VA3SXqb=(`5UB z0&sd>U2ErW^`EV2$~MtFW_&R=eC|ysDr-TPwR`^CP?&*pT=DjwWDOR+OghMeVVN86 z&A%3YFaqj$bH(>QEn&Rz_>Oky&W>(rh{+4(#Y>c84qPMV`X)wpi|88%r4qx}?|Prk z1`rqH?GRDgGI`SIXtb633q*)IB4Jlr9|HCgJ6DxlAXNOVhU|u)1(~Vm%G%5x-a;jc z3(B=C9v&ZVG}ms^A199;#AQ!*>1RDJYR1Q$t*vKb3f+ed-2(f-J3R3P4A|<=%DPzuDpGVMf}~3O`6hq zVzvW=*t(VEqIxHlpGwYB&3DDy-8ea49d1W8x;VG8G2QK*-&2rvJ9(-1yE^1!&W{Nu z$-jreu(rI|cs~cv=%9RO>SKTjpQDV-k5o@3+!R^G6%pu{{T}>WtyTFkzgHn# zT)MQiQ(OPCwI^Bbi1byyFL+!6b$CRJYTU9osd}Y?D_?m6QOe7}fc$FVys+$e3Rc#h zB>GvO(Xjf#Z-0<6il`8&V zBz-04kjq(f6$Oz-CAtWivHiwtuRRJVRk>+tyXUDMa{^}uPd5N@KAjF_upF=5fuliX zpIH}Q3H$p_)Q{>86i%@gzMu1qCbZgtU7n;wdM8)_ry00D>xk-tPm429Q*Sa1GoX$B z8+n7pmK8pgy-s+;;(fHH;x?b6FoorGwQMJjNqGBd2A?n4EP1}%|H8^jTRQ5!ZSYOi zN9$&`@+ts~9%24flb9xtpqWyHD?Hfch41_$6tL!`|20P?$Mv%5eN<1_OY>up&FRK! z#?el?;%WpFF};9gi)k_)JK3NN@uZvIX8?X}@f2|9E#$UgF4JsD;!{LpDTFqgzB6NQ| ztyhh?{}80s&)2eBL5^lF2r4v#5s?1X3Fbn^);ke%(}iZ2?%&XW_4oA|RWJ09eX8N3 zxV3qLj&d=I?yzcMcuE@?D$NN(gY^q}A;J(7VcUstU~+XzL#+s9H}#MM>E?=(J$(d@o2Fng@O3V4 z`)_D_YW)jI1``XPY^9{Q71=jyvBlRy1ptb3|t zgr8iVx1MQdAnwxk$nn!{X-@f}jn!G<{-znjAFILskz1!#Z|qX@{dI~cM3`y%hkteE z_0_%5B+a9>BD~LpIJv<7o2#_RC zX8xXUJ~2TOoU8+xPS5uI@hooz2F(<+8fq^o9uL)9dHe?6-RqvsAZ5o9b(J92YrWRg zSK|#tJBAnqIzx;fNV~ke`Ec|S?z1`WSigL35f2(ZpzqKQFKLLGpH@jvO%x}#4r2Wp zxeH_Y+P;aTR2HK{Aih^0=;&OW=}+L5DG2$6H(f(439SWxefvqwVJ=mek;kl~^0L|2 zoN^5$M%ud;u3NVFH_K_{8=9G!rn=GIlno+Z+w4cc=9vE z``O~f{BGZBIDt)SgSe>|ZA(N$h|BWqb^D3OiidS+ZcE4HVH9-f05DRDrilHhzIpI- zpkedqSbwwZsnAlXY*Txoo3`p+@`KER)R#aVpw@!K{kc+)Av`+5k&5+BG{;|EEe@6r z#cQ0@iDE1VV`8PVku~ZX@fc=7x=|~w0#=rb+)G>6xpRzwgQnWWB^X0K8frTBXd(1p z`ki4VkF-$1sAuaEY+)8W&(%fEoW*}UG9eWAI$n!f6f>o5W6p~d?KVhfqMMu!{8y6o z*);t=`vMF~Ick+$SC{2>`kXIK8e$#vv?19%^1g2E})|Wa10Xy0uIF$s|W7a zXxb#&m*o9!(iUR~ksqkrtoHKEVU*`e!}yTt~~_3`}jj|K{4OiIm{{Lxjuf zvERh08M#kuvdj5fUms3tpFcE&Owf@13;BsJ@qe0BJ|h5UFp)1;jR($x%-SA|Tz(tB z^GsmcN*E#(d&|tuU4P2u2K1UX>$lvu+vL}`nMv%eMFKS!^&9K5I>aq8PutIELrDst zK>J7IqWvq}_!PQHUz2R=b4d-k?Go#v`BmNNtNJu8Q9eOX`jfCGm~fHtKda(BXAgo5 oj<6?UWc2@@8vL&l;V1W6an!h|r_yz2x6S~d_w_VT>QCPM2l>%j$p8QV literal 0 HcmV?d00001 From f847c2c33bd4319be309c4532b4c8f438e550103 Mon Sep 17 00:00:00 2001 From: ML-OpenP Date: Thu, 19 Nov 2020 19:18:39 +0100 Subject: [PATCH 07/34] small fixes in docs [ci skip] --- docs/system-admin-guide/enumerations/README.md | 9 ++++++--- docs/user-guide/meetings/README.md | 3 ++- docs/user-guide/work-packages/README.md | 7 +++++-- .../work-package-table-configuration/README.md | 8 ++++++-- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/docs/system-admin-guide/enumerations/README.md b/docs/system-admin-guide/enumerations/README.md index 13c626b797..c69e43dca6 100644 --- a/docs/system-admin-guide/enumerations/README.md +++ b/docs/system-admin-guide/enumerations/README.md @@ -9,7 +9,9 @@ keywords: enumerations, time tracking, priority, document categories # Manage Enumerations
-**Enumerations** are a menu item in admin settings that allows the configuration of Activities (for time tracking), project status and work package priorities.
+**Enumerations** are a menu item in admin settings that allows the configuration of Activities (for time tracking), project status and work package priorities. + + To get an overview of existing enumeration values for all of these categories, navigate to the -> *Administration* -> *Enumerations*. You will see the enumerations overview, divided into respective sections. @@ -38,7 +40,8 @@ You will then be able to name the value, activate it and choose if it should be To **change the color of work package priorities** choose the respective priority in the section Work package priorities. - + \ No newline at end of file +**Note**: To activate the [Activities (for time tracking)](../../user-guide/projects/project-settings/activities-time-tracking) in a certain project, navigate to -> *Project settings* -> *Time tracking activities*. + \ No newline at end of file diff --git a/docs/user-guide/meetings/README.md b/docs/user-guide/meetings/README.md index e788758c88..ac8898a0a0 100644 --- a/docs/user-guide/meetings/README.md +++ b/docs/user-guide/meetings/README.md @@ -11,7 +11,8 @@ keywords: meetings Meetings in OpenProject allow you to manage and document your project meetings at one central place, prepare a meeting agenda together with your team and document and share meeting minutes with your meeting attendees at one central place. -
**Meetings** is defined as a module that allows the organization of meetings. The module has to be activated in the project settings in order to be displayed in the side navigation.
+
**Meetings** is defined as a module that allows the organization of meetings. The module has to be activated in the project settings in order to be displayed in the side navigation. +
diff --git a/docs/user-guide/work-packages/README.md b/docs/user-guide/work-packages/README.md index 3f755f4cba..4785172785 100644 --- a/docs/user-guide/work-packages/README.md +++ b/docs/user-guide/work-packages/README.md @@ -15,10 +15,13 @@ keywords: work packages Work packages have a **type**, an **ID**, a **subject** and may have various additional attributes, such as **status**, **assignee**, **priority**, **due date**. -
**Work package ID** is defined as a unique integer assigned to a newly created work package. Work package IDs cannot be changed and are numbered across all projects of an OpenProject instance (therefore, the numbering within a project may not be sequential).
+
**Work package ID** is defined as a unique integer assigned to a newly created work package. Work package IDs cannot be changed and are numbered across all projects of an OpenProject instance (therefore, the numbering within a project may not be sequential). +
-**Types** are the different items a work package can represent, such as task, feature, bug, phase, milestone. The work package types can be configured in the system administration.
+**Types** are the different items a work package can represent, such as task, feature, bug, phase, milestone. The work package types can be configured in the system administration. + + diff --git a/docs/user-guide/work-packages/work-package-table-configuration/README.md b/docs/user-guide/work-packages/work-package-table-configuration/README.md index 7818d75e38..1a062f1fa7 100644 --- a/docs/user-guide/work-packages/work-package-table-configuration/README.md +++ b/docs/user-guide/work-packages/work-package-table-configuration/README.md @@ -76,7 +76,9 @@ The results will be displayed accordingly in the work package list. By default, the work package list will be sorted by work package ID.
-The **ID** is unique for a work package within OpenProject. It will be set automatically from the system. With the ID you can reference to one specific work package in OpenProject.
+The **ID** is unique for a work package within OpenProject. It will be set automatically from the system. With the ID you can reference a specific work package in OpenProject. + + To sort the work package list view, open the [work package table configuration](#work-package-table-configuration) and select the tab **Sort by**. You can sort by up to three attributes, either ascending or descending. @@ -87,7 +89,9 @@ Clicking the blue **Apply** button will save your changes and display the result ![sort-work-packages](sort-work-packages.png) +**Note**: If you have the hierarchy mode activated, all filtered table results will be augmented with their ancestors. Hierarchies can be expanded and collapsed. + + Therefore, the results may differ if you sort in a flat list or in a hierarchy mode. From 1fee143488eacb6922a1c361d50949623d8804f3 Mon Sep 17 00:00:00 2001 From: ulferts Date: Fri, 20 Nov 2020 09:00:28 +0100 Subject: [PATCH 08/34] adapt overview seeding row_count (#8851) --- modules/overviews/config/locales/en.seeders.bim.yml | 8 ++++---- modules/overviews/config/locales/en.seeders.standard.yml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/overviews/config/locales/en.seeders.bim.yml b/modules/overviews/config/locales/en.seeders.bim.yml index f483cb6024..042b246ae4 100644 --- a/modules/overviews/config/locales/en.seeders.bim.yml +++ b/modules/overviews/config/locales/en.seeders.bim.yml @@ -32,7 +32,7 @@ en: projects: demo-construction-project: project-overview: - row_count: 5 + row_count: 6 column_count: 2 widgets: - identifier: 'custom_text' @@ -106,7 +106,7 @@ en: queryId: '##query.id:"Milestones"' demo-planning-constructing-project: project-overview: - row_count: 5 + row_count: 6 column_count: 2 widgets: - identifier: 'custom_text' @@ -176,7 +176,7 @@ en: queryId: '##query.id:"Milestones"' demo-bim-project: project-overview: - row_count: 5 + row_count: 6 column_count: 2 widgets: - identifier: 'custom_text' @@ -249,7 +249,7 @@ en: queryId: '##query.id:"Milestones"' demo-bcf-management-project: project-overview: - row_count: 4 + row_count: 5 column_count: 2 widgets: - identifier: 'custom_text' diff --git a/modules/overviews/config/locales/en.seeders.standard.yml b/modules/overviews/config/locales/en.seeders.standard.yml index 19842ddf36..9a60cc499d 100644 --- a/modules/overviews/config/locales/en.seeders.standard.yml +++ b/modules/overviews/config/locales/en.seeders.standard.yml @@ -32,7 +32,7 @@ en: projects: demo-project: project-overview: - row_count: 5 + row_count: 6 column_count: 2 widgets: - identifier: 'custom_text' @@ -102,7 +102,7 @@ en: queryId: '##query.id:"Milestones"' scrum-project: project-overview: - row_count: 5 + row_count: 6 column_count: 2 widgets: - identifier: 'custom_text' From 741a89407e1bc8aa74600f8bbde8021cada6f283 Mon Sep 17 00:00:00 2001 From: ulferts Date: Tue, 24 Nov 2020 08:24:55 +0100 Subject: [PATCH 09/34] fix custom styles on backlogs (#8857) Reimporting the global styles will overwrite custom styles --- .../app/modules/backlogs/backlogs-page/styles/taskboard.sass | 3 --- 1 file changed, 3 deletions(-) diff --git a/frontend/src/app/modules/backlogs/backlogs-page/styles/taskboard.sass b/frontend/src/app/modules/backlogs/backlogs-page/styles/taskboard.sass index 32a510160f..1b51f77bcb 100644 --- a/frontend/src/app/modules/backlogs/backlogs-page/styles/taskboard.sass +++ b/frontend/src/app/modules/backlogs/backlogs-page/styles/taskboard.sass @@ -26,9 +26,6 @@ * See docs/COPYRIGHT.rdoc for more details. ++ */ -@import "~global_styles/openproject/variables" -@import "~global_styles/openproject/functions" - @mixin story-header background-color: #FFFFFF font-size: 1rem - rem-calc(5px) From 21560c7e0399472ac03510b7b112a5118b6cf25c Mon Sep 17 00:00:00 2001 From: ulferts Date: Tue, 24 Nov 2020 09:57:35 +0100 Subject: [PATCH 10/34] add i18n key for manage overview permission --- modules/overviews/config/locales/en.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/overviews/config/locales/en.yml b/modules/overviews/config/locales/en.yml index 01fc05df23..a58c459884 100644 --- a/modules/overviews/config/locales/en.yml +++ b/modules/overviews/config/locales/en.yml @@ -1,3 +1,4 @@ en: overviews: label: 'Overview' + permission_manage_overview: 'Manage overview page' From 2333fd5372af20ffbb333cc203248bfff0f4745c Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Tue, 24 Nov 2020 09:18:46 +0000 Subject: [PATCH 11/34] update locales from crowdin [ci skip] --- modules/bim/config/locales/crowdin/js-fi.yml | 6 +++--- modules/costs/config/locales/crowdin/cs.yml | 4 ++-- modules/overviews/config/locales/crowdin/ar.yml | 1 + modules/overviews/config/locales/crowdin/bg.yml | 1 + modules/overviews/config/locales/crowdin/ca.yml | 1 + modules/overviews/config/locales/crowdin/cs.yml | 1 + modules/overviews/config/locales/crowdin/da.yml | 1 + modules/overviews/config/locales/crowdin/de.yml | 1 + modules/overviews/config/locales/crowdin/el.yml | 1 + modules/overviews/config/locales/crowdin/es.yml | 1 + modules/overviews/config/locales/crowdin/fi.yml | 1 + modules/overviews/config/locales/crowdin/fil.yml | 1 + modules/overviews/config/locales/crowdin/fr.yml | 1 + modules/overviews/config/locales/crowdin/hr.yml | 1 + modules/overviews/config/locales/crowdin/hu.yml | 1 + modules/overviews/config/locales/crowdin/id.yml | 1 + modules/overviews/config/locales/crowdin/it.yml | 1 + modules/overviews/config/locales/crowdin/ja.yml | 1 + modules/overviews/config/locales/crowdin/ko.yml | 1 + modules/overviews/config/locales/crowdin/lt.yml | 1 + modules/overviews/config/locales/crowdin/nl.yml | 1 + modules/overviews/config/locales/crowdin/no.yml | 1 + modules/overviews/config/locales/crowdin/pl.yml | 1 + modules/overviews/config/locales/crowdin/pt.yml | 1 + modules/overviews/config/locales/crowdin/ro.yml | 1 + modules/overviews/config/locales/crowdin/ru.yml | 1 + modules/overviews/config/locales/crowdin/sk.yml | 1 + modules/overviews/config/locales/crowdin/sl.yml | 1 + modules/overviews/config/locales/crowdin/sv.yml | 1 + modules/overviews/config/locales/crowdin/tr.yml | 1 + modules/overviews/config/locales/crowdin/uk.yml | 1 + modules/overviews/config/locales/crowdin/vi.yml | 1 + modules/overviews/config/locales/crowdin/zh-CN.yml | 1 + modules/overviews/config/locales/crowdin/zh-TW.yml | 1 + modules/reporting/config/locales/crowdin/cs.yml | 2 +- 35 files changed, 38 insertions(+), 6 deletions(-) diff --git a/modules/bim/config/locales/crowdin/js-fi.yml b/modules/bim/config/locales/crowdin/js-fi.yml index b00994c797..70d317d19b 100644 --- a/modules/bim/config/locales/crowdin/js-fi.yml +++ b/modules/bim/config/locales/crowdin/js-fi.yml @@ -20,8 +20,8 @@ fi: ifc_models: 'IFC models' views: viewer: 'Selain' - split: 'Viewer and table' + split: 'Näkymä ja tiedot' split_cards: 'Selain ja kortit' revit: - revit_add_in: "Revit Add-In" - revit_add_in_settings: "Revit Add-In settings" + revit_add_in: "Revit Lisäosa" + revit_add_in_settings: "Revit Lisäosa asetukset" diff --git a/modules/costs/config/locales/crowdin/cs.yml b/modules/costs/config/locales/crowdin/cs.yml index 1b3bace2cb..024544d2d0 100644 --- a/modules/costs/config/locales/crowdin/cs.yml +++ b/modules/costs/config/locales/crowdin/cs.yml @@ -82,7 +82,7 @@ cs: label_costlog: "Logované jednotkové náklady" label_cost_plural: "Náklady" label_cost_type_plural: "Typy nákladů" - label_cost_type_specific: "Cost type #%{id}: %{name}" + label_cost_type_specific: "Typ nákladu #%{id}: %{name}" label_costs_per_page: "Náklady na stránku" label_currency: "Měna" label_currency_format: "Formát měny" @@ -132,7 +132,7 @@ cs: permission_view_own_cost_entries: "Zobrazit vlastní rezervované náklady" permission_view_own_hourly_rate: "Zobrazit vlastní hodinovou sazbu" permission_view_own_time_entries: "Zobrazit vlastní strávený čas" - project_module_costs: "Time and costs" + project_module_costs: "Čas a náklady" text_assign_time_and_cost_entries_to_project: "Přiřadit nahlášené hodiny a náklady projektu" text_destroy_cost_entries_question: "%{cost_entries} byl nahlášen k pracovním balíčkům, které se chystáte odstranit. Co chcete udělat?" text_destroy_time_and_cost_entries: "Odstranit nahlášené hodiny a náklady" diff --git a/modules/overviews/config/locales/crowdin/ar.yml b/modules/overviews/config/locales/crowdin/ar.yml index fdf31b87bb..8acd762539 100644 --- a/modules/overviews/config/locales/crowdin/ar.yml +++ b/modules/overviews/config/locales/crowdin/ar.yml @@ -1,3 +1,4 @@ ar: overviews: label: 'نظرة عامة' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/bg.yml b/modules/overviews/config/locales/crowdin/bg.yml index e35149aeb8..256c53cecd 100644 --- a/modules/overviews/config/locales/crowdin/bg.yml +++ b/modules/overviews/config/locales/crowdin/bg.yml @@ -1,3 +1,4 @@ bg: overviews: label: 'Общ преглед' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/ca.yml b/modules/overviews/config/locales/crowdin/ca.yml index 6e78622bb2..88e42eec39 100644 --- a/modules/overviews/config/locales/crowdin/ca.yml +++ b/modules/overviews/config/locales/crowdin/ca.yml @@ -1,3 +1,4 @@ ca: overviews: label: 'Visió general' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/cs.yml b/modules/overviews/config/locales/crowdin/cs.yml index 29394a01b2..6db38b896d 100644 --- a/modules/overviews/config/locales/crowdin/cs.yml +++ b/modules/overviews/config/locales/crowdin/cs.yml @@ -1,3 +1,4 @@ cs: overviews: label: 'Přehled' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/da.yml b/modules/overviews/config/locales/crowdin/da.yml index c5724b2a2a..b4f7d0b9d6 100644 --- a/modules/overviews/config/locales/crowdin/da.yml +++ b/modules/overviews/config/locales/crowdin/da.yml @@ -1,3 +1,4 @@ da: overviews: label: 'Overblik' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/de.yml b/modules/overviews/config/locales/crowdin/de.yml index 93a1add22a..2e00ac1e71 100644 --- a/modules/overviews/config/locales/crowdin/de.yml +++ b/modules/overviews/config/locales/crowdin/de.yml @@ -1,3 +1,4 @@ de: overviews: label: 'Übersicht' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/el.yml b/modules/overviews/config/locales/crowdin/el.yml index 39c2bc438e..3451c0cbfb 100644 --- a/modules/overviews/config/locales/crowdin/el.yml +++ b/modules/overviews/config/locales/crowdin/el.yml @@ -1,3 +1,4 @@ el: overviews: label: 'Επισκόπηση' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/es.yml b/modules/overviews/config/locales/crowdin/es.yml index b7757faef0..e8f888ff8f 100644 --- a/modules/overviews/config/locales/crowdin/es.yml +++ b/modules/overviews/config/locales/crowdin/es.yml @@ -1,3 +1,4 @@ es: overviews: label: 'Resumen' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/fi.yml b/modules/overviews/config/locales/crowdin/fi.yml index f7b4e21269..6cc93a877b 100644 --- a/modules/overviews/config/locales/crowdin/fi.yml +++ b/modules/overviews/config/locales/crowdin/fi.yml @@ -1,3 +1,4 @@ fi: overviews: label: 'Yleiskatsaus' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/fil.yml b/modules/overviews/config/locales/crowdin/fil.yml index fec4b95172..9ddffe632e 100644 --- a/modules/overviews/config/locales/crowdin/fil.yml +++ b/modules/overviews/config/locales/crowdin/fil.yml @@ -1,3 +1,4 @@ fil: overviews: label: 'Buod' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/fr.yml b/modules/overviews/config/locales/crowdin/fr.yml index 60c4c8afa2..975ef9373c 100644 --- a/modules/overviews/config/locales/crowdin/fr.yml +++ b/modules/overviews/config/locales/crowdin/fr.yml @@ -1,3 +1,4 @@ fr: overviews: label: 'Vue globale' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/hr.yml b/modules/overviews/config/locales/crowdin/hr.yml index b951b556e2..b815acaaec 100644 --- a/modules/overviews/config/locales/crowdin/hr.yml +++ b/modules/overviews/config/locales/crowdin/hr.yml @@ -1,3 +1,4 @@ hr: overviews: label: 'Pregled' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/hu.yml b/modules/overviews/config/locales/crowdin/hu.yml index 90060584d8..8c8912daa6 100644 --- a/modules/overviews/config/locales/crowdin/hu.yml +++ b/modules/overviews/config/locales/crowdin/hu.yml @@ -1,3 +1,4 @@ hu: overviews: label: 'Áttekintés' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/id.yml b/modules/overviews/config/locales/crowdin/id.yml index 36270a615d..9686c08b08 100644 --- a/modules/overviews/config/locales/crowdin/id.yml +++ b/modules/overviews/config/locales/crowdin/id.yml @@ -1,3 +1,4 @@ id: overviews: label: 'Tinjauan' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/it.yml b/modules/overviews/config/locales/crowdin/it.yml index 88bda2784c..16dc54d309 100644 --- a/modules/overviews/config/locales/crowdin/it.yml +++ b/modules/overviews/config/locales/crowdin/it.yml @@ -1,3 +1,4 @@ it: overviews: label: 'Panoramica' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/ja.yml b/modules/overviews/config/locales/crowdin/ja.yml index 71dc6e3f00..998abc04b8 100644 --- a/modules/overviews/config/locales/crowdin/ja.yml +++ b/modules/overviews/config/locales/crowdin/ja.yml @@ -1,3 +1,4 @@ ja: overviews: label: '概要' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/ko.yml b/modules/overviews/config/locales/crowdin/ko.yml index 6267d3dc88..1806dfc789 100644 --- a/modules/overviews/config/locales/crowdin/ko.yml +++ b/modules/overviews/config/locales/crowdin/ko.yml @@ -1,3 +1,4 @@ ko: overviews: label: '요약' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/lt.yml b/modules/overviews/config/locales/crowdin/lt.yml index e25b6df652..014577135f 100644 --- a/modules/overviews/config/locales/crowdin/lt.yml +++ b/modules/overviews/config/locales/crowdin/lt.yml @@ -1,3 +1,4 @@ lt: overviews: label: 'Peržiūra' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/nl.yml b/modules/overviews/config/locales/crowdin/nl.yml index 02cf0e6373..2af6c77580 100644 --- a/modules/overviews/config/locales/crowdin/nl.yml +++ b/modules/overviews/config/locales/crowdin/nl.yml @@ -1,3 +1,4 @@ nl: overviews: label: 'Overzicht' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/no.yml b/modules/overviews/config/locales/crowdin/no.yml index 1f32f93479..52c255605a 100644 --- a/modules/overviews/config/locales/crowdin/no.yml +++ b/modules/overviews/config/locales/crowdin/no.yml @@ -1,3 +1,4 @@ "no": overviews: label: 'Oversikt' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/pl.yml b/modules/overviews/config/locales/crowdin/pl.yml index 2a2f21d5de..90398b3e16 100644 --- a/modules/overviews/config/locales/crowdin/pl.yml +++ b/modules/overviews/config/locales/crowdin/pl.yml @@ -1,3 +1,4 @@ pl: overviews: label: 'Przegląd' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/pt.yml b/modules/overviews/config/locales/crowdin/pt.yml index ad5c2273c1..c2e01db8d1 100644 --- a/modules/overviews/config/locales/crowdin/pt.yml +++ b/modules/overviews/config/locales/crowdin/pt.yml @@ -1,3 +1,4 @@ pt: overviews: label: 'Visão geral' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/ro.yml b/modules/overviews/config/locales/crowdin/ro.yml index 2187d482e5..3bd2e2c876 100644 --- a/modules/overviews/config/locales/crowdin/ro.yml +++ b/modules/overviews/config/locales/crowdin/ro.yml @@ -1,3 +1,4 @@ ro: overviews: label: 'Vedere de ansamblu' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/ru.yml b/modules/overviews/config/locales/crowdin/ru.yml index 33ce9d94b0..6224fcdf69 100644 --- a/modules/overviews/config/locales/crowdin/ru.yml +++ b/modules/overviews/config/locales/crowdin/ru.yml @@ -1,3 +1,4 @@ ru: overviews: label: 'Обзор' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/sk.yml b/modules/overviews/config/locales/crowdin/sk.yml index 688a94e7bb..92eef575d4 100644 --- a/modules/overviews/config/locales/crowdin/sk.yml +++ b/modules/overviews/config/locales/crowdin/sk.yml @@ -1,3 +1,4 @@ sk: overviews: label: 'Prehľad' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/sl.yml b/modules/overviews/config/locales/crowdin/sl.yml index 89cec304df..ce9eb1c25a 100644 --- a/modules/overviews/config/locales/crowdin/sl.yml +++ b/modules/overviews/config/locales/crowdin/sl.yml @@ -1,3 +1,4 @@ sl: overviews: label: 'Pregled' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/sv.yml b/modules/overviews/config/locales/crowdin/sv.yml index 0d7e0b72ca..4238481c02 100644 --- a/modules/overviews/config/locales/crowdin/sv.yml +++ b/modules/overviews/config/locales/crowdin/sv.yml @@ -1,3 +1,4 @@ sv: overviews: label: 'Översikt' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/tr.yml b/modules/overviews/config/locales/crowdin/tr.yml index f0c88f66a5..5cf5d969fb 100644 --- a/modules/overviews/config/locales/crowdin/tr.yml +++ b/modules/overviews/config/locales/crowdin/tr.yml @@ -1,3 +1,4 @@ tr: overviews: label: 'Genel Bakış' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/uk.yml b/modules/overviews/config/locales/crowdin/uk.yml index 7ea0854ee6..870c0f7c2e 100644 --- a/modules/overviews/config/locales/crowdin/uk.yml +++ b/modules/overviews/config/locales/crowdin/uk.yml @@ -1,3 +1,4 @@ uk: overviews: label: 'Огляд' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/vi.yml b/modules/overviews/config/locales/crowdin/vi.yml index edb83d5565..455c692c81 100644 --- a/modules/overviews/config/locales/crowdin/vi.yml +++ b/modules/overviews/config/locales/crowdin/vi.yml @@ -1,3 +1,4 @@ vi: overviews: label: 'Tổng quan' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/zh-CN.yml b/modules/overviews/config/locales/crowdin/zh-CN.yml index 16c9f4b10c..4505ac4ed4 100644 --- a/modules/overviews/config/locales/crowdin/zh-CN.yml +++ b/modules/overviews/config/locales/crowdin/zh-CN.yml @@ -1,3 +1,4 @@ zh-CN: overviews: label: '概述' + permission_manage_overview: 'Manage overview page' diff --git a/modules/overviews/config/locales/crowdin/zh-TW.yml b/modules/overviews/config/locales/crowdin/zh-TW.yml index 2f98986f8e..c539824e14 100644 --- a/modules/overviews/config/locales/crowdin/zh-TW.yml +++ b/modules/overviews/config/locales/crowdin/zh-TW.yml @@ -1,3 +1,4 @@ zh-TW: overviews: label: '概要' + permission_manage_overview: 'Manage overview page' diff --git a/modules/reporting/config/locales/crowdin/cs.yml b/modules/reporting/config/locales/crowdin/cs.yml index 5eeed761c5..15cd098b9a 100644 --- a/modules/reporting/config/locales/crowdin/cs.yml +++ b/modules/reporting/config/locales/crowdin/cs.yml @@ -22,7 +22,7 @@ cs: button_save_as: "Uložit report jako..." comments: "Komentář" - cost_reports_title: "Time and costs" + cost_reports_title: "Čas a náklady" label_cost_report: "Výkaz nákladů" label_cost_report_plural: "Výkazy nákladů" description_drill_down: "Zobrazit detaily" From 06cc0ec588c4cea7defe237ff8fb4a9785ab8c7c Mon Sep 17 00:00:00 2001 From: Wieland Lindenthal Date: Tue, 24 Nov 2020 14:35:40 +0100 Subject: [PATCH 12/34] Optimize memory usage for pdf exports with attachments (#8854) https://community.openproject.com/wp/35327 - Installs Imagemagick package for image conversion. - converts all attachments to a smaller size before printing them to the PDF file. - Ads a installation check to the _Admin -> Information_ screen. --- .pkgr.yml | 4 +++ Gemfile | 2 ++ Gemfile.lock | 2 ++ app/controllers/admin_controller.rb | 10 ++++++++ .../work_package/pdf_export/attachments.rb | 25 ++++++++++++++++++- .../pdf_export/work_package_list_to_pdf.rb | 2 ++ config/locales/en.yml | 3 +++ docker/setup/preinstall-common.sh | 3 ++- .../installation/manual/README.md | 3 ++- 9 files changed, 51 insertions(+), 3 deletions(-) diff --git a/.pkgr.yml b/.pkgr.yml index 1eb5d5b065..4e93ba164e 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -10,6 +10,7 @@ targets: - unrtf - tesseract-ocr - catdoc + - imagemagick debian-10: <<: *debian9 ubuntu-16.04: @@ -22,12 +23,15 @@ targets: dependencies: - unzip - epel-release + - ImageMagick centos-7: dependencies: - epel-release + - ImageMagick sles-12: build_dependencies: - sqlite3-devel + - ImageMagick before_precompile: "packaging/setup" after_precompile: "packaging/teardown" services: diff --git a/Gemfile b/Gemfile index b771821d5b..36b9bed1a2 100644 --- a/Gemfile +++ b/Gemfile @@ -187,6 +187,8 @@ gem 'rest-client', '~> 2.0' gem 'ruby-progressbar', '~> 1.10.0', require: false +gem 'mini_magick', '~> 4.11.0', require: false + group :test do gem 'launchy', '~> 2.5.0' gem 'rack-test', '~> 1.1.0' diff --git a/Gemfile.lock b/Gemfile.lock index c05c8a8d19..ab8774e80d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -617,6 +617,7 @@ GEM mime-types-data (~> 3.2015) mime-types-data (3.2020.0512) mimemagic (0.3.5) + mini_magick (4.11.0) mini_mime (1.0.2) mini_portile2 (2.4.0) minisyntax (0.2.5) @@ -1027,6 +1028,7 @@ DEPENDENCIES livingstyleguide (~> 2.1.0) lograge (~> 0.11.0) meta-tags (~> 2.13.0) + mini_magick (~> 4.11.0) multi_json (~> 1.15.0) my_page! net-ldap (~> 0.16.0) diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 3170c4f076..4226d1fa18 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -26,6 +26,7 @@ # # See docs/COPYRIGHT.rdoc for more details. #++ +require 'open3' class AdminController < ApplicationController layout 'admin' @@ -84,6 +85,7 @@ class AdminController < ApplicationController @checklist += file_storage_checks @checklist += plaintext_extraction_checks @checklist += admin_information_hook_checks + @checklist += image_conversion_checks @storage_information = OpenProject::Storage.mount_information end @@ -118,6 +120,14 @@ class AdminController < ApplicationController end end + def image_conversion_checks + [[:'image_conversion.imagemagick', image_conversion_libs_available?]] + end + + def image_conversion_libs_available? + Open3.capture2e('convert', '-version').first.include?('ImageMagick') + end + def file_storage_checks # Add local directory test if we're not using fog if OpenProject::Configuration.file_storage? diff --git a/app/models/work_package/pdf_export/attachments.rb b/app/models/work_package/pdf_export/attachments.rb index b23afecd21..2060cee27d 100644 --- a/app/models/work_package/pdf_export/attachments.rb +++ b/app/models/work_package/pdf_export/attachments.rb @@ -50,13 +50,36 @@ module WorkPackage::PDFExport::Attachments # Access the local file. For Carrierwave attachments, this will be blocking. file_path = attachment.file.local_file.path + + # Let's not include the raw images as the sum of all images can hit the memory limit of the worker process. + # As we do not need the full image size when printing small images into the PDF let's reduce it on the fly. + # It uses CPU and time. However, we don't expect that feature to get used often. + resized_file_path = resize_image(file_path) + # Fit the image roughly in the center of each cell - pdf.make_cell(image: file_path, fit: [available_width, 125], position: :center) + pdf.make_cell(image: resized_file_path, fit: [available_width, 125], position: :center) rescue => e Rails.logger.error { "Failed to attach work package image to PDF: #{e} #{e.message}" } nil end + def resize_image(file_path) + resized_file_path = extend_file_name_in_path(file_path, '__x325') + image = MiniMagick::Image.open(file_path) + image.resize("x325") + image.write(resized_file_path) + + resized_file_path + end + + def extend_file_name_in_path(file_path, name_suffix) + dir_path = File.dirname(file_path) + file_extension = File.extname(file_path) + file_name = File.basename(file_path, '.*') + + File.join(dir_path, "#{file_name}#{name_suffix}#{file_extension}") + end + def pdf_embeddable?(attachment) %w[image/jpeg image/png].include?(attachment.content_type) end diff --git a/app/models/work_package/pdf_export/work_package_list_to_pdf.rb b/app/models/work_package/pdf_export/work_package_list_to_pdf.rb index 890f997c7e..66fbe627d7 100644 --- a/app/models/work_package/pdf_export/work_package_list_to_pdf.rb +++ b/app/models/work_package/pdf_export/work_package_list_to_pdf.rb @@ -28,6 +28,8 @@ # See docs/COPYRIGHT.rdoc for more details. #++ +require 'mini_magick' + class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base include WorkPackage::PDFExport::Common include WorkPackage::PDFExport::Attachments diff --git a/config/locales/en.yml b/config/locales/en.yml index d097951cb1..143415cd8c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1238,6 +1238,9 @@ en: forums: "Community forum" newsletter: "Security alerts / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' + journals: changes_retracted: "The changes were retracted." diff --git a/docker/setup/preinstall-common.sh b/docker/setup/preinstall-common.sh index 56ce61d3fb..19887ea131 100755 --- a/docker/setup/preinstall-common.sh +++ b/docker/setup/preinstall-common.sh @@ -18,7 +18,8 @@ apt-get install -y \ tesseract-ocr \ catdoc \ postgresql-9.6 \ - postgresql-client-9.6 + postgresql-client-9.6 \ + imagemagick rm -rf "$PGDATA_LEGACY" diff --git a/docs/installation-and-operations/installation/manual/README.md b/docs/installation-and-operations/installation/manual/README.md index 14a1e41b2a..5cd78d8d02 100644 --- a/docs/installation-and-operations/installation/manual/README.md +++ b/docs/installation-and-operations/installation/manual/README.md @@ -49,7 +49,8 @@ sudo passwd openproject #(enter desired password) libncurses5-dev automake \ libtool bison libffi-dev git curl \ poppler-utils unrtf tesseract-ocr catdoc \ - libxml2 libxml2-dev libxslt1-dev # nokogiri + libxml2 libxml2-dev libxslt1-dev # nokogiri \ + imagemagick ``` ## Install the caching server (memcached) From 50e2f7d4d7aad39769c0cf1ba42030d25d0854fa Mon Sep 17 00:00:00 2001 From: Wieland Lindenthal Date: Tue, 24 Nov 2020 17:16:21 +0100 Subject: [PATCH 13/34] Increase wait time for IFC model presence --- modules/bim/spec/support/pages/ifc_models/index.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/bim/spec/support/pages/ifc_models/index.rb b/modules/bim/spec/support/pages/ifc_models/index.rb index edbde4f0a5..cc5e5f379b 100644 --- a/modules/bim/spec/support/pages/ifc_models/index.rb +++ b/modules/bim/spec/support/pages/ifc_models/index.rb @@ -108,7 +108,7 @@ module Pages end def expect_model_active(model, active = true) - expect(page).to have_field(model.id.to_s, checked: active) + expect(page).to have_field(model.id.to_s, checked: active, wait: 30) end def show_defaults(models = []) From 2f159dfd35c33ea6f19e23bb4af624068ceef04c Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Wed, 25 Nov 2020 09:10:03 +0000 Subject: [PATCH 14/34] update locales from crowdin [ci skip] --- config/locales/crowdin/cs.yml | 60 +++++++++---------- modules/boards/config/locales/crowdin/tr.yml | 2 +- .../overviews/config/locales/crowdin/lt.yml | 2 +- .../overviews/config/locales/crowdin/tr.yml | 2 +- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/config/locales/crowdin/cs.yml b/config/locales/crowdin/cs.yml index 1262bc9a49..be651013c9 100644 --- a/config/locales/crowdin/cs.yml +++ b/config/locales/crowdin/cs.yml @@ -28,10 +28,10 @@ cs: plugins: no_results_title_text: V současné době nejsou k dispozici žádné pluginy. custom_styles: - color_theme: "Color theme" + color_theme: "Barevné téma" color_theme_custom: "Vlastní" colors: - alternative-color: "Alternative" + alternative-color: "Alternativa" content-link-color: "Link font" primary-color: "Primární" primary-color-dark: "Primární (tmavé)" @@ -39,20 +39,20 @@ cs: header-item-bg-hover-color: "Pozadí záhlaví při přejetí myší" header-item-font-color: "Písmo záhlaví" header-item-font-hover-color: "Písmo záhlaví při přejetí myší" - header-border-bottom-color: "Header border" - main-menu-bg-color: "Main menu background" - main-menu-bg-selected-background: "Main menu when selected" - main-menu-bg-hover-background: "Main menu on hover" - main-menu-font-color: "Main menu font" - main-menu-selected-font-color: "Main menu font when selected" - main-menu-hover-font-color: "Main menu font on hover" - main-menu-border-color: "Main menu border" + header-border-bottom-color: "Okraj záhlaví" + main-menu-bg-color: "Pozadí hlavního menu" + main-menu-bg-selected-background: "Hlavní menu při výběru" + main-menu-bg-hover-background: "Hlavní menu při přejetí myší" + main-menu-font-color: "Písmo hlavního menu" + main-menu-selected-font-color: "Písmo hlavního menu při výběru" + main-menu-hover-font-color: "Písmo hlavního menu při přejetí myší" + main-menu-border-color: "Okraj hlavního menu" custom_colors: "Vlastní barvy" customize: "Přizpůsobte si svou OpenProject instalaci vlastním logem. Poznámka: Logo bude veřejně přístupné." enterprise_notice: "Jako zvláštní 'Děkujeme!' za jejich finanční příspěvky na vývoj OpenProjektu, je tato malá funkce dostupná pouze pro podporu Enterprise Edition." manage_colors: "Upravit možnosti výběru barvy" instructions: - alternative-color: "Strong accent color, typically used for the most important button on a screen." + alternative-color: "Silná barva zvýraznění, obvykle používaná pro nejdůležitější tlačítko na obrazovce." content-link-color: "Barva písma většiny odkazů." primary-color: "Hlavní barva." primary-color-dark: "Obvykle tmavší verze hlavní barvy použité pro efekt vznášení." @@ -61,7 +61,7 @@ cs: header-item-font-hover-color: "Barva pozadí klikacích položek záhlaví při najetí myší." header-border-bottom-color: "Tenký řádek pod záhlavím. Ponechte toto pole prázdné, pokud nechcete žádný řádek." main-menu-bg-color: "Barva pozadí levého menu." - theme_warning: Changing the theme will overwrite you custom style. The design will then be lost. Are you sure you want to continue? + theme_warning: Změna motivu přepíše váš vlastní styl. Vzhled pak bude ztracen. Jste si jisti, že chcete pokračovat? enterprise: upgrade_to_ee: "Upgrade to the Enterprise Edition" add_token: "Nahrát podpůrný token Enterprise Edition" @@ -94,13 +94,13 @@ cs: cancelled_due_to: "Job was cancelled due to error: %{message}" ldap_auth_sources: technical_warning_html: | - This LDAP form requires technical knowledge of your LDAP / Active Directory setup. + Tento LDAP formulář vyžaduje technické znalosti nastavení LDAP / Active Directory.
- Please visit our documentation for detailed instructions. + Prosím navštivte naši dokumentaci pro podrobné pokyny. attribute_texts: name: Arbitrary name of the LDAP connection - host: LDAP host name or IP address - login_map: The attribute key in LDAP that is used to identify the unique user login. Usually, this will be `uid` or `samAccountName`. + host: LDAP název hostitele nebo IP adresa + login_map: Atribut klíč v LDAP, který se používá k identifikaci jedinečného přihlášení uživatele. Obvykle se jedná o `uid` nebo `samAccountName`. generic_map: The attribute key in LDAP that is mapped to the OpenProject `%{attribute}` attribute admin_map_html: "Optional: The attribute key in LDAP that if present marks the OpenProject user an admin. Leave empty when in doubt." system_user_dn_html: | @@ -126,12 +126,12 @@ cs: If you enable group synchronization for this LDAP connection, users will also be automatically created in OpenProject for synchronized groups. Without it, only existing accounts in OpenProject will be added to groups. connection_encryption: 'Šifrování připojení' - system_account: 'System account' + system_account: 'Systémový účet' system_account_legend: | - OpenProject requires read-only access through a system account to lookup users and groups in your LDAP tree. - Please specify the bind credentials for that system user in the following section. + OpenProject vyžaduje přístup pouze pro čtení prostřednictvím systémového účtu pro vyhledávání uživatelů a skupin ve stromu LDAP. + Zadejte prosím přístupové údaje pro tohoto systémového uživatele v následující sekci. ldap_details: 'Podrobnosti LDAP' - user_settings: 'Attribute mapping' + user_settings: 'Mapování atributů' user_settings_legend: | The following fields are related to how users are created in OpenProject from LDAP entries and what LDAP attributes are used to define the attributes of an OpenProject user (attribute mapping). @@ -539,7 +539,7 @@ cs: invalid_url: 'není platná adresa URL.' invalid_url_scheme: 'není podporovaný protokol (povoleny: %{allowed_schemes}).' less_than_or_equal_to: "musí být menší než nebo rovno %{count}." - not_current_user: "is not the current user." + not_current_user: "není aktuální uživatel." not_a_date: "není platné datum." not_a_datetime: "není platný čas." not_a_number: "není číslo." @@ -1118,7 +1118,7 @@ cs: enumeration_work_package_priorities: "Priority pracovního balíčku" enumeration_reported_project_statuses: "Nahlášený stav projektu" error_auth_source_sso_failed: "Jednotné přihlášení (SSO) pro uživatele '%{value}' selhalo" - error_can_not_archive_project: "This project cannot be archived: %{errors}" + error_can_not_archive_project: "Tento projekt nelze archivovat: %{errors}" error_can_not_delete_entry: "Nelze odstranit položku" error_can_not_delete_custom_field: "Nelze odstranit vlastní pole" error_can_not_delete_type: "Tento typ obsahuje pracovní balíčky a nedá sa odstrániť." @@ -1127,7 +1127,7 @@ cs: error_can_not_remove_role: "Tato role je používána a nelze ji odstranit." error_can_not_reopen_work_package_on_closed_version: "Pracovní balíček v uzavřené verzi nemůže být znovu otevřen" error_can_not_find_all_resources: "Nelze najít všechny související zdroje k tomuto požadavku." - error_can_not_unarchive_project: "This project cannot be unarchived: %{errors}" + error_can_not_unarchive_project: "Tento projekt nemůže být odarchivován: %{errors}" error_check_user_and_role: "Vyberte uživatele a roli." error_code: "Chyba %{code}" error_cookie_missing: 'OpenProject cookie chybí. Ujistěte se, že jsou soubory cookie povoleny, protože aplikace nebude správně fungovat.' @@ -1187,7 +1187,7 @@ cs: pdf_with_descriptions_and_attachments: "PDF s popisky a přílohami" pdf_with_attachments: "PDF s přílohami" image: - omitted: "Image not exported." + omitted: "Obrázek nebyl exportován." extraction: available: pdftotext: "Pdftotext k dispozici (volitelné)" @@ -1766,25 +1766,25 @@ cs: label_workflow_plural: "Pracovní vrstvy" label_workflow_summary: "Souhrn" label_x_closed_work_packages_abbr: - zero: "0 closed" + zero: "0 uzavřeno" one: "1 uzavřen" few: "%{count} uzavřeny" many: "%{count} uzavřeny" other: "%{count} uzavřeny" label_x_comments: - zero: "no comments" + zero: "žádné komentáře" one: "1 komentář" few: "%{count} komentářů" many: "%{count} komentářů" other: "%{count} komentářů" label_x_open_work_packages_abbr: - zero: "0 open" + zero: "0 otevřených" one: "1 otevřený" few: "%{count} otevřených" many: "%{count} otevřených" other: "%{count} otevřených" label_x_projects: - zero: "no projects" + zero: "Žádné projekty" one: "1 projekt" few: "%{count} projektů" many: "%{count} projektů" @@ -1830,14 +1830,14 @@ cs: mail_body_register_closing: "Your OpenProject team" mail_body_register_ending: "Stay connected! Kind regards," mail_body_reminder: "%{count} pracovních balíčků, které máte přiřazeny, mají termín během následujících %{days} dnů:" - mail_body_group_reminder: "%{count} work package(s) that are assigned to group \"%{group}\" are due in the next %{days} days:" + mail_body_group_reminder: "%{count} pracovních balíčků, které jsou přiřazeny ke skupině \"%{group}\", má termín splatnosti během následujících %{days} dnů:" mail_body_wiki_content_added: "Wiki stránka '%{id}' byla přidána uživatelem %{author}." mail_body_wiki_content_updated: "Wiki stránka '%{id}' byla aktualizována uživatelem %{author}." mail_subject_account_activation_request: "Žádost o aktivaci účtu %{value}" mail_subject_lost_password: "Vaše heslo %{value}" mail_subject_register: "Aktivace vašeho účtu %{value}" mail_subject_reminder: "%{count} pracovních balíčků s termínem do dalších %{days} dnů" - mail_subject_group_reminder: "For group \"%{group}\" %{count} work package(s) due in the next %{days} days" + mail_subject_group_reminder: "Pro skupinu \"%{group}\" %{count} pracovních balíčků splatných během následujících %{days} dnů" mail_subject_wiki_content_added: "'%{id}' wiki stránka byla přidána" mail_subject_wiki_content_updated: "'%{id}' wiki stránka byla aktualizována" mail_user_activation_limit_reached: diff --git a/modules/boards/config/locales/crowdin/tr.yml b/modules/boards/config/locales/crowdin/tr.yml index d413305170..e10ffebf79 100644 --- a/modules/boards/config/locales/crowdin/tr.yml +++ b/modules/boards/config/locales/crowdin/tr.yml @@ -1,6 +1,6 @@ #English strings go here tr: - permission_show_board_views: "Panoları görüntülemek" + permission_show_board_views: "Panoları görüntüle" permission_manage_board_views: "Panoları yönet" project_module_board_view: "Panolar" boards: diff --git a/modules/overviews/config/locales/crowdin/lt.yml b/modules/overviews/config/locales/crowdin/lt.yml index 014577135f..590603a215 100644 --- a/modules/overviews/config/locales/crowdin/lt.yml +++ b/modules/overviews/config/locales/crowdin/lt.yml @@ -1,4 +1,4 @@ lt: overviews: label: 'Peržiūra' - permission_manage_overview: 'Manage overview page' + permission_manage_overview: 'Valdyti apžvalgos puslapį' diff --git a/modules/overviews/config/locales/crowdin/tr.yml b/modules/overviews/config/locales/crowdin/tr.yml index 5cf5d969fb..c1b022abcc 100644 --- a/modules/overviews/config/locales/crowdin/tr.yml +++ b/modules/overviews/config/locales/crowdin/tr.yml @@ -1,4 +1,4 @@ tr: overviews: label: 'Genel Bakış' - permission_manage_overview: 'Manage overview page' + permission_manage_overview: 'Genel bakış sayfasını yönet' From 544f8b2b5859d6afc43752abe119212c05a24b6a Mon Sep 17 00:00:00 2001 From: birthe Date: Wed, 25 Nov 2020 13:23:19 +0100 Subject: [PATCH 15/34] Inserted one additonal comment [ci skip] --- .../system-settings/display-settings/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/system-admin-guide/system-settings/display-settings/README.md b/docs/system-admin-guide/system-settings/display-settings/README.md index f4e4263c9e..4d5b9789aa 100644 --- a/docs/system-admin-guide/system-settings/display-settings/README.md +++ b/docs/system-admin-guide/system-settings/display-settings/README.md @@ -21,6 +21,8 @@ At the moment there are more than 30 languages available. **Note**: Many languages are translated by the Community. We highly appreciate if you want to [help translating OpenProject to your language](../../../development/translate-openproject). +You can [choose your language in your user profile](../../../getting-started/my-account/#change-your-language). + ## Time and date formatting Change time and date formats in OpenProject and configure the display of journal aggregation. @@ -32,4 +34,4 @@ Change time and date formats in OpenProject and configure the display of journal 5. **Display journals as aggregated within** will enable you to choose a time to combine journals of this timespan, e.g. for work package notifications. This way if you do several updates at in a short period of time, you will not receive a notification for each update but only a notification for the chosen period. 6. Do not forget to **save** your changes. -![Sys-admin-display-settings](Sys-admin-display-settings.png) \ No newline at end of file +![Sys-admin-display-settings](Sys-admin-display-settings.png) From 23b9c6cbfd1255258a57f443d2c5baf1292e50f8 Mon Sep 17 00:00:00 2001 From: birthe Date: Wed, 25 Nov 2020 13:23:54 +0100 Subject: [PATCH 16/34] Added spacing [ci skip] --- .../system-settings/display-settings/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/system-admin-guide/system-settings/display-settings/README.md b/docs/system-admin-guide/system-settings/display-settings/README.md index 4d5b9789aa..fa09e43d77 100644 --- a/docs/system-admin-guide/system-settings/display-settings/README.md +++ b/docs/system-admin-guide/system-settings/display-settings/README.md @@ -21,6 +21,7 @@ At the moment there are more than 30 languages available. **Note**: Many languages are translated by the Community. We highly appreciate if you want to [help translating OpenProject to your language](../../../development/translate-openproject). + You can [choose your language in your user profile](../../../getting-started/my-account/#change-your-language). ## Time and date formatting From 85a33926953285325b8211e41a4f3af1338a3c43 Mon Sep 17 00:00:00 2001 From: birthe Date: Wed, 25 Nov 2020 13:49:03 +0100 Subject: [PATCH 17/34] Include GitHub [ci skip] --- docs/user-guide/integrations/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/user-guide/integrations/README.md b/docs/user-guide/integrations/README.md index 8190df66af..b6950117ca 100644 --- a/docs/user-guide/integrations/README.md +++ b/docs/user-guide/integrations/README.md @@ -10,6 +10,10 @@ keywords: projects, integration, Jira If you have previously worked with other tools and want to switch or need an integration to OpenProject, there is a way to do so for some applications. +##GitHub + +OpenProject offers a basic GitHub integration. You will find more information about the GitHub integration in our [GitHub integration guideline](../../system-admin-guide/github-integration/). + ## Gitlab The GitLab integration to OpenProject is currently being developed and you can find all information [here](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/21933#note_309977508). From 91508bd08bf982826d9e6921aa54e83b365b7f5f Mon Sep 17 00:00:00 2001 From: birthe Date: Wed, 25 Nov 2020 13:49:30 +0100 Subject: [PATCH 18/34] small correction [ci skip] --- docs/user-guide/integrations/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/integrations/README.md b/docs/user-guide/integrations/README.md index b6950117ca..a1a83ced8c 100644 --- a/docs/user-guide/integrations/README.md +++ b/docs/user-guide/integrations/README.md @@ -10,7 +10,7 @@ keywords: projects, integration, Jira If you have previously worked with other tools and want to switch or need an integration to OpenProject, there is a way to do so for some applications. -##GitHub +## GitHub OpenProject offers a basic GitHub integration. You will find more information about the GitHub integration in our [GitHub integration guideline](../../system-admin-guide/github-integration/). From 87dbf27a8a38fbb093e3208f648fcdf5d0ad53d2 Mon Sep 17 00:00:00 2001 From: birthe Date: Wed, 25 Nov 2020 14:12:27 +0100 Subject: [PATCH 19/34] remove two-step user registration [ci skip] --- docs/development/security/README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/development/security/README.md b/docs/development/security/README.md index f59b3462a4..348ae8d0fa 100644 --- a/docs/development/security/README.md +++ b/docs/development/security/README.md @@ -34,14 +34,10 @@ Please include a description on how to reproduce the issue if possible. Our secu OpenProject administrators can enforce [authentication mechanisms and password rules]() to ensure users choose secure passwords according to current industry standards. Passwords stored by OpenProject are securely stored using salted bcrypt. Alternatively, external authentication providers and protocols (such as LDAP, SAML) can be enforced to avoid using and exposing passwords within OpenProject. -### Two-step user registration - -In compliance with common requirements in works committees, ensure that new users added by project responsibles are confirmed by a superior before allowing the user to enter the system for the first time. - ### User management and access control. Administrators are provided with [fine-grained role-based access control mechanisms]() to ensure that users are only seeing and accessing the data they are allowed to on an individual project level. ### Two-Factor authentication. (Cloud or Enterprise Edition) -Secure your authentication mechanisms with a second factor by TOTP standard (or SMS, depending on your instance) to be entered by users upon logging in. [More information](). \ No newline at end of file +Secure your authentication mechanisms with a second factor by TOTP standard (or SMS, depending on your instance) to be entered by users upon logging in. [More information](). From e111794528778f08fa3b307de5cf4c00ff809410 Mon Sep 17 00:00:00 2001 From: ulferts Date: Wed, 25 Nov 2020 16:10:36 +0100 Subject: [PATCH 20/34] fix viewing version of meeting agenda/meetings --- modules/meeting/app/controllers/meeting_contents_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/meeting/app/controllers/meeting_contents_controller.rb b/modules/meeting/app/controllers/meeting_contents_controller.rb index cc0ffb1f89..207d64432b 100644 --- a/modules/meeting/app/controllers/meeting_contents_controller.rb +++ b/modules/meeting/app/controllers/meeting_contents_controller.rb @@ -44,7 +44,7 @@ class MeetingContentsController < ApplicationController before_action :authorize def show - if params[:id].present? && @content.version == params[:id].to_i + if params[:id].present? && @content.last_journal.version == params[:id].to_i # Redirect links to the last version redirect_to controller: '/meetings', action: :show, From ab08c9dfbf0bdac8875baefab053032e73bb2390 Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Thu, 26 Nov 2020 09:16:21 +0000 Subject: [PATCH 21/34] update locales from crowdin [ci skip] --- config/locales/crowdin/ar.yml | 2 ++ config/locales/crowdin/bg.yml | 2 ++ config/locales/crowdin/ca.yml | 2 ++ config/locales/crowdin/cs.yml | 2 ++ config/locales/crowdin/da.yml | 2 ++ config/locales/crowdin/de.yml | 2 ++ config/locales/crowdin/el.yml | 2 ++ config/locales/crowdin/es.yml | 2 ++ config/locales/crowdin/fi.yml | 2 ++ config/locales/crowdin/fil.yml | 2 ++ config/locales/crowdin/fr.yml | 4 +++- config/locales/crowdin/hr.yml | 2 ++ config/locales/crowdin/hu.yml | 2 ++ config/locales/crowdin/id.yml | 2 ++ config/locales/crowdin/it.yml | 2 ++ config/locales/crowdin/ja.yml | 2 ++ config/locales/crowdin/ko.yml | 2 ++ config/locales/crowdin/lt.yml | 2 ++ config/locales/crowdin/nl.yml | 2 ++ config/locales/crowdin/no.yml | 2 ++ config/locales/crowdin/pl.yml | 2 ++ config/locales/crowdin/pt.yml | 2 ++ config/locales/crowdin/ro.yml | 4 +++- config/locales/crowdin/ru.yml | 2 ++ config/locales/crowdin/sk.yml | 2 ++ config/locales/crowdin/sl.yml | 2 ++ config/locales/crowdin/sv.yml | 2 ++ config/locales/crowdin/tr.yml | 2 ++ config/locales/crowdin/uk.yml | 2 ++ config/locales/crowdin/vi.yml | 2 ++ config/locales/crowdin/zh-CN.yml | 2 ++ config/locales/crowdin/zh-TW.yml | 2 ++ modules/avatars/config/locales/crowdin/js-ro.yml | 4 ++-- modules/overviews/config/locales/crowdin/fr.yml | 2 +- modules/xls_export/config/locales/crowdin/ro.yml | 14 +++++++------- 35 files changed, 76 insertions(+), 12 deletions(-) diff --git a/config/locales/crowdin/ar.yml b/config/locales/crowdin/ar.yml index 337e023686..aa60d3b599 100644 --- a/config/locales/crowdin/ar.yml +++ b/config/locales/crowdin/ar.yml @@ -1262,6 +1262,8 @@ ar: blog: "مدونة أوبِن بروجِكت" forums: "منتدى المجتمع" newsletter: "Security alerts / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/bg.yml b/config/locales/crowdin/bg.yml index 5d9f59def4..7f1f5f8bf8 100644 --- a/config/locales/crowdin/bg.yml +++ b/config/locales/crowdin/bg.yml @@ -1198,6 +1198,8 @@ bg: blog: "OpenProject блог" forums: "Форум на Общността" newsletter: "Security alerts / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/ca.yml b/config/locales/crowdin/ca.yml index 40cf50f887..b899870836 100644 --- a/config/locales/crowdin/ca.yml +++ b/config/locales/crowdin/ca.yml @@ -1198,6 +1198,8 @@ ca: blog: "Blog OpenProject" forums: "Fòrum de la comunitat" newsletter: "Security alerts / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/cs.yml b/config/locales/crowdin/cs.yml index be651013c9..9b54ecf431 100644 --- a/config/locales/crowdin/cs.yml +++ b/config/locales/crowdin/cs.yml @@ -1230,6 +1230,8 @@ cs: blog: "OpenProject blog" forums: "Komunitní fórum" newsletter: "Bezpečnostní upozornění / newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/da.yml b/config/locales/crowdin/da.yml index 5a3d9ab340..1fb9484015 100644 --- a/config/locales/crowdin/da.yml +++ b/config/locales/crowdin/da.yml @@ -1198,6 +1198,8 @@ da: blog: "OpenProject blog" forums: "Community forum" newsletter: "Security alerts / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml index f40aebf953..f72d0c6f6c 100644 --- a/config/locales/crowdin/de.yml +++ b/config/locales/crowdin/de.yml @@ -1193,6 +1193,8 @@ de: blog: "OpenProject Blog" forums: "Community Forum" newsletter: "Sicherheitswarnungen / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Die Änderungen wurden zurückgezogen." links: diff --git a/config/locales/crowdin/el.yml b/config/locales/crowdin/el.yml index 2e60fc9928..51705800e6 100644 --- a/config/locales/crowdin/el.yml +++ b/config/locales/crowdin/el.yml @@ -1195,6 +1195,8 @@ el: blog: "OpenProject blog" forums: "Φόρουμ κοινότητας" newsletter: "Ειδοποιήσεις ασφάλεια / Ενημερωτικό δελτίο" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Οι αλλαγές αποσύρθηκαν." links: diff --git a/config/locales/crowdin/es.yml b/config/locales/crowdin/es.yml index 93e3337c6a..1866546e30 100644 --- a/config/locales/crowdin/es.yml +++ b/config/locales/crowdin/es.yml @@ -1195,6 +1195,8 @@ es: blog: "Blog de OpenProject" forums: "Foro de la comunidad" newsletter: "Alertas de seguridad / boletín" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Se deshicieron los cambios." links: diff --git a/config/locales/crowdin/fi.yml b/config/locales/crowdin/fi.yml index c268d9bc0f..186b5c9bfd 100644 --- a/config/locales/crowdin/fi.yml +++ b/config/locales/crowdin/fi.yml @@ -1198,6 +1198,8 @@ fi: blog: "OpenProject blogi" forums: "Keskustelupalsta" newsletter: "Suojausvaroitukset / uutiskirje" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/fil.yml b/config/locales/crowdin/fil.yml index 4db96c75f4..2b1f99ae95 100644 --- a/config/locales/crowdin/fil.yml +++ b/config/locales/crowdin/fil.yml @@ -1198,6 +1198,8 @@ fil: blog: "Blog ng OpenProject" forums: "Komunidad forum" newsletter: "Mga alertong seguridad/ Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/fr.yml b/config/locales/crowdin/fr.yml index c865285e49..32ea04d679 100644 --- a/config/locales/crowdin/fr.yml +++ b/config/locales/crowdin/fr.yml @@ -536,7 +536,7 @@ fr: invalid_url: 'n’est pas une URL valide.' invalid_url_scheme: 'n’est pas un protocole pris en charge (autorisés : %{allowed_schemes}).' less_than_or_equal_to: "doit être inférieur ou égal à %{count}." - not_current_user: "is not the current user." + not_current_user: "n'est pas l'utilisateur actuel." not_a_date: "n'est pas une date valide." not_a_datetime: "n'est pas une heure valide." not_a_number: "n'est pas un nombre." @@ -1197,6 +1197,8 @@ fr: blog: "Blog OpenProject" forums: "Forum de la communauté" newsletter: "Alertes de sécurité / Lettre d’information" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Les modifications ont été retirées." links: diff --git a/config/locales/crowdin/hr.yml b/config/locales/crowdin/hr.yml index 842c5191dd..cb0c0c8688 100644 --- a/config/locales/crowdin/hr.yml +++ b/config/locales/crowdin/hr.yml @@ -1214,6 +1214,8 @@ hr: blog: "OpenProject blog" forums: "Forum Zajednice" newsletter: "Security alerts / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/hu.yml b/config/locales/crowdin/hu.yml index b84028911d..3b25d5450e 100644 --- a/config/locales/crowdin/hu.yml +++ b/config/locales/crowdin/hu.yml @@ -1195,6 +1195,8 @@ hu: blog: "OpenProject blog" forums: "Közösségi fórum" newsletter: "Biztonsági figyelmeztetések / hírlevél" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/id.yml b/config/locales/crowdin/id.yml index 5c5ebf1f3b..f9abcbaad8 100644 --- a/config/locales/crowdin/id.yml +++ b/config/locales/crowdin/id.yml @@ -1181,6 +1181,8 @@ id: blog: "OpenProject blog" forums: "Community forum" newsletter: "Peringatan keamanan / Jurnal berkala" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/it.yml b/config/locales/crowdin/it.yml index fc65b6c44b..b75747231c 100644 --- a/config/locales/crowdin/it.yml +++ b/config/locales/crowdin/it.yml @@ -1194,6 +1194,8 @@ it: blog: "Blog di OpenProject" forums: "Forum della Comunità" newsletter: "Avvisi di sicurezza / Notizie" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Le modifiche sono state annullate." links: diff --git a/config/locales/crowdin/ja.yml b/config/locales/crowdin/ja.yml index a3145d7c35..703b8a357c 100644 --- a/config/locales/crowdin/ja.yml +++ b/config/locales/crowdin/ja.yml @@ -1177,6 +1177,8 @@ ja: blog: "OpenProject ブログ" forums: "コミュニティ フォーラム" newsletter: "セキュリティアラート / ニュースレター" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/ko.yml b/config/locales/crowdin/ko.yml index 64701c37a0..9946216cb0 100644 --- a/config/locales/crowdin/ko.yml +++ b/config/locales/crowdin/ko.yml @@ -1181,6 +1181,8 @@ ko: blog: "OpenProject 블로그" forums: "커뮤니티 포럼" newsletter: "보안 알림/뉴스레터" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "변경 사항이 취소되었습니다." links: diff --git a/config/locales/crowdin/lt.yml b/config/locales/crowdin/lt.yml index 7b647a9bc6..b1729fd635 100644 --- a/config/locales/crowdin/lt.yml +++ b/config/locales/crowdin/lt.yml @@ -1225,6 +1225,8 @@ lt: blog: "OpenProject blogas" forums: "Bendruomenės forumas" newsletter: "Saugos įspėjimai / Naujienos" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Pakeitimai buvo atšaukti." links: diff --git a/config/locales/crowdin/nl.yml b/config/locales/crowdin/nl.yml index b236e99511..0489b5dbf4 100644 --- a/config/locales/crowdin/nl.yml +++ b/config/locales/crowdin/nl.yml @@ -1198,6 +1198,8 @@ nl: blog: "OpenProject blog" forums: "Gemeenschapsforum" newsletter: "Beveiligingswaarschuwingen / nieuwsbrief" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/no.yml b/config/locales/crowdin/no.yml index 534ad4d8cc..5e72a4cef2 100644 --- a/config/locales/crowdin/no.yml +++ b/config/locales/crowdin/no.yml @@ -1198,6 +1198,8 @@ blog: "OpenProject blogg" forums: "Brukerforum" newsletter: "Security alerts / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/pl.yml b/config/locales/crowdin/pl.yml index aeae51736b..466109ebd5 100644 --- a/config/locales/crowdin/pl.yml +++ b/config/locales/crowdin/pl.yml @@ -1226,6 +1226,8 @@ pl: blog: "Blog OpenProject" forums: "Forum społeczności" newsletter: "Powiadomienia bezpieczeństwa / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Zmiany zostały wycofane." links: diff --git a/config/locales/crowdin/pt.yml b/config/locales/crowdin/pt.yml index 40f7fd2e1c..6daa4da34a 100644 --- a/config/locales/crowdin/pt.yml +++ b/config/locales/crowdin/pt.yml @@ -1196,6 +1196,8 @@ pt: blog: "Blog do OpenProject" forums: "Fórum da Comunidade" newsletter: "Alertas de segurança / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "As mudanças foram retraídas." links: diff --git a/config/locales/crowdin/ro.yml b/config/locales/crowdin/ro.yml index d6f551dc05..67967a2034 100644 --- a/config/locales/crowdin/ro.yml +++ b/config/locales/crowdin/ro.yml @@ -538,7 +538,7 @@ ro: invalid_url: 'nu este o adresa URL validă.' invalid_url_scheme: 'nu este un protocol permis (allowed: %{allowed_schemes}).' less_than_or_equal_to: "trebuie să fie mai mic sau egal cu %{count}." - not_current_user: "is not the current user." + not_current_user: "nu este utilizatorul curent." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "nu este un număr." @@ -1214,6 +1214,8 @@ ro: blog: "Blog-ul OpenProject" forums: "Forum comunitate" newsletter: "Security alerts / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/ru.yml b/config/locales/crowdin/ru.yml index 885d5ec261..81b143ba79 100644 --- a/config/locales/crowdin/ru.yml +++ b/config/locales/crowdin/ru.yml @@ -1229,6 +1229,8 @@ ru: blog: "Openproject блог" forums: "Форум сообщества" newsletter: "Оповещения системы безопасности / Новости" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Изменения отменены." links: diff --git a/config/locales/crowdin/sk.yml b/config/locales/crowdin/sk.yml index 13bda17d1a..9195322f95 100644 --- a/config/locales/crowdin/sk.yml +++ b/config/locales/crowdin/sk.yml @@ -1230,6 +1230,8 @@ sk: blog: "OpenProject blog" forums: "Komunitné fórum" newsletter: "Bezpečnostné upozornenia / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/sl.yml b/config/locales/crowdin/sl.yml index c737bc616a..01ff051228 100644 --- a/config/locales/crowdin/sl.yml +++ b/config/locales/crowdin/sl.yml @@ -1228,6 +1228,8 @@ sl: blog: "Blog OpenProject" forums: "Forum skupnosti" newsletter: "Varnostna opozorila / Glasilo" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Spremembe so bile umaknjene." links: diff --git a/config/locales/crowdin/sv.yml b/config/locales/crowdin/sv.yml index a87831f246..8ad6549bf9 100644 --- a/config/locales/crowdin/sv.yml +++ b/config/locales/crowdin/sv.yml @@ -1197,6 +1197,8 @@ sv: blog: "OpenProject blogg" forums: "Community forum" newsletter: "Säkerhetsnotifieringar / Nyhetsbrev" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/tr.yml b/config/locales/crowdin/tr.yml index 310b70b283..d4f026865e 100644 --- a/config/locales/crowdin/tr.yml +++ b/config/locales/crowdin/tr.yml @@ -1198,6 +1198,8 @@ tr: blog: "OpenProject blog" forums: "Topluluk forumu" newsletter: "Güvenlik uyarıları / haber bülteni" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Değişiklikler geri çekildi." links: diff --git a/config/locales/crowdin/uk.yml b/config/locales/crowdin/uk.yml index f790cbe304..9b1ed68512 100644 --- a/config/locales/crowdin/uk.yml +++ b/config/locales/crowdin/uk.yml @@ -1230,6 +1230,8 @@ uk: blog: "Openproject блог" forums: "Форум спільноти" newsletter: "Сигнали безпеки / Інформаційний бюлетень" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/config/locales/crowdin/vi.yml b/config/locales/crowdin/vi.yml index df51075a87..f3111c512d 100644 --- a/config/locales/crowdin/vi.yml +++ b/config/locales/crowdin/vi.yml @@ -1184,6 +1184,8 @@ vi: blog: "OpenProject blog" forums: "Diễn đàn cộng đồng" newsletter: "Security alerts / Newsletter" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "Những thay đổi đã bị rút lại" links: diff --git a/config/locales/crowdin/zh-CN.yml b/config/locales/crowdin/zh-CN.yml index e862f89876..0563c1044b 100644 --- a/config/locales/crowdin/zh-CN.yml +++ b/config/locales/crowdin/zh-CN.yml @@ -1177,6 +1177,8 @@ zh-CN: blog: "OpenProject 博客" forums: "社区论坛" newsletter: "安全警报/通信" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "更改已撤回。" links: diff --git a/config/locales/crowdin/zh-TW.yml b/config/locales/crowdin/zh-TW.yml index 47333c356a..53e61a3272 100644 --- a/config/locales/crowdin/zh-TW.yml +++ b/config/locales/crowdin/zh-TW.yml @@ -1182,6 +1182,8 @@ zh-TW: blog: "Openproject 部落格" forums: "社群論壇" newsletter: "安全警報 / 消息" + image_conversion: + imagemagick: 'Imagemagick' journals: changes_retracted: "The changes were retracted." links: diff --git a/modules/avatars/config/locales/crowdin/js-ro.yml b/modules/avatars/config/locales/crowdin/js-ro.yml index 2a7911f30d..ef85642de9 100644 --- a/modules/avatars/config/locales/crowdin/js-ro.yml +++ b/modules/avatars/config/locales/crowdin/js-ro.yml @@ -5,11 +5,11 @@ ro: button_update: 'Actualizare' avatars: label_choose_avatar: "Choose Avatar from file" - uploading_avatar: "Uploading your avatar." + uploading_avatar: "Se încarcă avatarul tău." text_upload_instructions: | Upload your own custom avatar of 128 by 128 pixels. Larger files will be resized and cropped to match. A preview of your avatar will be shown before uploading, once you selected an image. - error_image_too_large: "Image is too large." + error_image_too_large: "Imaginea este prea mare." wrong_file_format: "Allowed formats are jpg, png, gif" empty_file_error: "Please upload a valid image (jpg, png, gif)" diff --git a/modules/overviews/config/locales/crowdin/fr.yml b/modules/overviews/config/locales/crowdin/fr.yml index 975ef9373c..de1c6df441 100644 --- a/modules/overviews/config/locales/crowdin/fr.yml +++ b/modules/overviews/config/locales/crowdin/fr.yml @@ -1,4 +1,4 @@ fr: overviews: label: 'Vue globale' - permission_manage_overview: 'Manage overview page' + permission_manage_overview: 'Gérer la page d''aperçu' diff --git a/modules/xls_export/config/locales/crowdin/ro.yml b/modules/xls_export/config/locales/crowdin/ro.yml index 571bee26b7..7b57d0fbab 100644 --- a/modules/xls_export/config/locales/crowdin/ro.yml +++ b/modules/xls_export/config/locales/crowdin/ro.yml @@ -1,13 +1,13 @@ ro: - export_to_excel: "Export XLS" - print_with_description: "Print preview with description" + export_to_excel: "Exportă XLS" + print_with_description: "Previzualizare printare cu descriere" sentence_separator_or: "sau" - different_formats: Different formats + different_formats: Formate diferite export: format: xls: "XLS" - xls_with_descriptions: "XLS with descriptions" - xls_with_relations: "XLS with relations" + xls_with_descriptions: "XLS cu descrieri" + xls_with_relations: "XLS cu relații" xls_export: - child_of: child of - parent_of: parent of + child_of: copil al + parent_of: părinte al From e58df37e29ada43ee7187a123a50910d61697cf5 Mon Sep 17 00:00:00 2001 From: ulferts Date: Thu, 26 Nov 2020 10:49:10 +0100 Subject: [PATCH 22/34] Fix/copy budgets (#8856) * Fix broken call to #super in Budget#copy_from The #copy_from method in Budget appears to assume that superclasses will have the same method available to them as called on the new Budget object to which the copy is going. This is not the case. Resolve the issue by assigning duplicated attributes from the source object directly to self.attributes prior to copying the actual budget items. Tested in Chef/Vagrant test environment. Deployed to SemperVictus pre-production OP instance successfully. * Resolve budget child item copy confusion The #copy_from method does not account for child models duplicated from another Budget holding a unique constraint validation on the :budget_id attribute. The Budget itself also appears to inherit the source Budget's ID, creating additional problems. Address by unfolding the sub-object copy procedure and clean up the relevant attributes on #dup ensuring the appropriate relations are created when the object is assigned (after the #dup block). Tested in Chef/Vagrant workflow. * Rewrite for readability DRY the code, leaving it as an instance method for the time being. TODO for upstream: Convert to class method and update controller in the MVC (per GH comment). Write tests/spec and verify results of the original fix and final revision for release branches. * use whitelist approach for copying budgets * extract method Co-authored-by: RageLtMan --- .../app/controllers/budgets_controller.rb | 9 +- modules/budgets/app/models/budget.rb | 60 +++++++++---- .../spec/features/budgets/copy_budget_spec.rb | 89 +++++++++++++++++++ .../budgets/spec/support/pages/budget_form.rb | 9 ++ .../budgets/spec/support/pages/edit_budget.rb | 6 ++ 5 files changed, 151 insertions(+), 22 deletions(-) create mode 100644 modules/budgets/spec/features/budgets/copy_budget_spec.rb diff --git a/modules/budgets/app/controllers/budgets_controller.rb b/modules/budgets/app/controllers/budgets_controller.rb index c35c74f69e..e9f7e3d41e 100644 --- a/modules/budgets/app/controllers/budgets_controller.rb +++ b/modules/budgets/app/controllers/budgets_controller.rb @@ -84,11 +84,12 @@ class BudgetsController < ApplicationController def copy source = Budget.find(params[:id].to_i) - @budget = Budget.new - if source - @budget.copy_from(source) - end + @budget = if source + Budget.new_copy(source) + else + Budget.new + end @budget.fixed_date ||= Date.today diff --git a/modules/budgets/app/models/budget.rb b/modules/budgets/app/models/budget.rb index d379083a87..a81994b024 100644 --- a/modules/budgets/app/models/budget.rb +++ b/modules/budgets/app/models/budget.rb @@ -63,10 +63,48 @@ class Budget < ApplicationRecord Budget.replace_author_with_deleted_user user end - def self.visible(user) - includes(:project) - .references(:projects) - .merge(Project.allowed_to(user, :view_budgets)) + class << self + def visible(user) + includes(:project) + .references(:projects) + .merge(Project.allowed_to(user, :view_budgets)) + end + + # TODO: Extract into copy service + def new_copy(source) + copy = new(copy_attributes(source)) + + copy_budget_items(source, copy, items: :labor_budget_items) + copy_budget_items(source, copy, items: :material_budget_items) + + copy + end + + def replace_author_with_deleted_user(user) + substitute = DeletedUser.first + + where(author_id: user.id).update_all(author_id: substitute.id) + end + + protected + + def copy_attributes(source) + source.attributes.slice('project_id', 'subject', 'description', 'fixed_date').merge('author' => User.current) + end + + def copy_budget_items(source, sink, items:) + raise ArgumentError unless %i(labor_budget_items material_budget_items).include? items + + source.send(items).each do |bi| + to_slice = if items == :material_budget_items + %w(units cost_type_id comments amount) + else + %w(hours user_id comments amount) + end + + sink.send(items).build(bi.attributes.slice(*to_slice).merge('budget' => sink)) + end + end end def initialize(attributes = nil) @@ -74,14 +112,6 @@ class Budget < ApplicationRecord self.author = User.current if new_record? end - def copy_from(arg) - budget = (arg.is_a?(Budget) ? arg : self.class.find(arg)) - attrs = budget.attributes.dup - super(attrs) - self.labor_budget_items = budget.labor_budget_items.map(&:dup) - self.material_budget_items = budget.material_budget_items.map(&:dup) - end - def budget material_budget + labor_budget end @@ -105,12 +135,6 @@ class Budget < ApplicationRecord 'budget' end - def self.replace_author_with_deleted_user(user) - substitute = DeletedUser.first - - where(author_id: user.id).update_all(author_id: substitute.id) - end - def to_s subject end diff --git a/modules/budgets/spec/features/budgets/copy_budget_spec.rb b/modules/budgets/spec/features/budgets/copy_budget_spec.rb new file mode 100644 index 0000000000..6b25a20dc2 --- /dev/null +++ b/modules/budgets/spec/features/budgets/copy_budget_spec.rb @@ -0,0 +1,89 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb') + +describe 'Copying a budget', type: :feature, js: true do + let(:project) { FactoryBot.create :project, enabled_module_names: %i[budgets costs] } + let(:current_user) do + FactoryBot.create :user, + member_in_project: project, + member_with_permissions: %i(view_budgets edit_budgets view_hourly_rates view_cost_rates) + end + let(:original_author) { FactoryBot.create :user } + let(:budget_subject) { "A budget subject" } + let(:budget_description) { "A budget description" } + let!(:budget) do + FactoryBot.create :budget, + subject: budget_subject, + description: budget_description, + author: original_author, + project: project + end + let!(:cost_type) do + FactoryBot.create :cost_type, name: 'Post-war', unit: 'cap', unit_plural: 'caps' + end + let!(:cost_type_rate) { FactoryBot.create :cost_rate, cost_type: cost_type, rate: 50.0 } + let!(:default_hourly_rate) { FactoryBot.create :default_hourly_rate, user: original_author, rate: 25.0 } + let!(:material_budget_item) do + FactoryBot.create :material_budget_item, + units: 3, + cost_type: cost_type, + budget: budget + end + + let!(:labor_budget_item) do + FactoryBot.create :labor_budget_item, + hours: 5, + user: original_author, + budget: budget + end + let(:budget_page) { Pages::EditBudget.new budget.id } + + before do + login_as(current_user) + end + + it 'copies all the items of the budget under the name of the copying user' do + budget_page.visit! + + budget_page.click_copy + + budget_page.expect_subject(budget_subject) + + budget_page.expect_planned_costs!(type: :labor, row: 1, expected: '125.00 EUR') + budget_page.expect_planned_costs!(type: :material, row: 1, expected: '150.00 EUR') + + click_button 'Create' + + budget_page.expect_notification message: 'Successful creation.' + + expect(page) + .to have_selector('.author', text: current_user.name) + end +end diff --git a/modules/budgets/spec/support/pages/budget_form.rb b/modules/budgets/spec/support/pages/budget_form.rb index e811ec2bef..26da55599e 100644 --- a/modules/budgets/spec/support/pages/budget_form.rb +++ b/modules/budgets/spec/support/pages/budget_form.rb @@ -121,6 +121,11 @@ module Pages end end + def expect_subject(subject) + expect(page) + .to have_field("Subject", with: subject) + end + def unit_costs_at(num_row) unit_costs_container.all('tbody td.currency')[num_row - 1] end @@ -176,5 +181,9 @@ module Pages def labor_rows @labor_rows ||= 0 end + + def notification_type + :rails + end end end diff --git a/modules/budgets/spec/support/pages/edit_budget.rb b/modules/budgets/spec/support/pages/edit_budget.rb index 458dfc2a59..1065c3439c 100644 --- a/modules/budgets/spec/support/pages/edit_budget.rb +++ b/modules/budgets/spec/support/pages/edit_budget.rb @@ -39,6 +39,12 @@ module Pages @budget_id = budget_id end + def click_copy + within '.toolbar-items' do + click_link 'Copy' + end + end + def path "/budgets/#{budget_id}" end From dd96011f11ac8b1d636d35dfa69ccd11b5bfe5a4 Mon Sep 17 00:00:00 2001 From: ulferts Date: Thu, 26 Nov 2020 12:43:05 +0100 Subject: [PATCH 23/34] remove renamed cron job (#8860) The Job was renamed in #58562e737989896f0354c38aa79e9d3af42b6397 but there might still be a job in the database using the old name. --- .../20201125121949_remove_renamed_cron_job.rb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 db/migrate/20201125121949_remove_renamed_cron_job.rb diff --git a/db/migrate/20201125121949_remove_renamed_cron_job.rb b/db/migrate/20201125121949_remove_renamed_cron_job.rb new file mode 100644 index 0000000000..2dbd65d8dd --- /dev/null +++ b/db/migrate/20201125121949_remove_renamed_cron_job.rb @@ -0,0 +1,40 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +class RemoveRenamedCronJob < ActiveRecord::Migration[6.0] + def up + # The job has been renamed to JobStatus::Cron::ClearOldJobStatusJob + # the new job will be added on restarting the application but the old will still be in the database + # and will cause 'uninitialized constant' errors. + Delayed::Job + .where('handler LIKE ?', "%job_class: Cron::ClearOldJobStatusJob%") + .delete_all + end +end From 954d1f0b31d33ee16b9907b38e5a5b8377e4c63f Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Mon, 30 Nov 2020 09:22:04 +0000 Subject: [PATCH 24/34] update locales from crowdin [ci skip] --- config/locales/crowdin/ko.yml | 4 ++-- modules/boards/config/locales/crowdin/js-ko.yml | 2 +- modules/overviews/config/locales/crowdin/ko.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/locales/crowdin/ko.yml b/config/locales/crowdin/ko.yml index 9946216cb0..ad70decc85 100644 --- a/config/locales/crowdin/ko.yml +++ b/config/locales/crowdin/ko.yml @@ -535,7 +535,7 @@ ko: invalid_url: '은(는) 올바른 URL이 아닙니다.' invalid_url_scheme: '은(는) 지원되는 프로토콜(허용: %{allowed_schemes})이 아닙니다.' less_than_or_equal_to: "은(는) %{count} 보다 작거나 같아야 합니다" - not_current_user: "is not the current user." + not_current_user: "은(는) 현재 유효한 사용자가 아닙니다." not_a_date: "은(는) 유효한 날짜가 아닙니다." not_a_datetime: "은(는) 유효한 날짜가 아닙니다." not_a_number: "은(는) 숫자가 아닙니다." @@ -615,7 +615,7 @@ ko: queries/filters/base: attributes: values: - inclusion: "filter has invalid values." + inclusion: "필터에 잘못된 값이 있습니다." format: "%{message}" relation: typed_dag: diff --git a/modules/boards/config/locales/crowdin/js-ko.yml b/modules/boards/config/locales/crowdin/js-ko.yml index cddafd0cee..22690089e3 100644 --- a/modules/boards/config/locales/crowdin/js-ko.yml +++ b/modules/boards/config/locales/crowdin/js-ko.yml @@ -50,7 +50,7 @@ ko: action_text_assignee: > 할당된 사용자에 기반한 자동화된 열이 있는 보드입니다. 작업 패키지 디스패치에 적합합니다. action_text_version: > - Board with automated columns based on the version attribute. Ideal for planning product development. + 버전 속성 컬럼이 있는 보드. 소프트웨어 개발 계획에 적합함. action_type: assignee: 담당자 status: 상태 diff --git a/modules/overviews/config/locales/crowdin/ko.yml b/modules/overviews/config/locales/crowdin/ko.yml index 1806dfc789..0308d6ef55 100644 --- a/modules/overviews/config/locales/crowdin/ko.yml +++ b/modules/overviews/config/locales/crowdin/ko.yml @@ -1,4 +1,4 @@ ko: overviews: label: '요약' - permission_manage_overview: 'Manage overview page' + permission_manage_overview: '개요 페이지 관리' From 2869acf63b49539a4d9b4075fa5c566a3835e197 Mon Sep 17 00:00:00 2001 From: Markus Kahl Date: Mon, 30 Nov 2020 10:20:55 +0000 Subject: [PATCH 25/34] Added EE remark to avoid confusion when button is not showing --- .../misc/custom-openid-connect-providers/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/installation-and-operations/misc/custom-openid-connect-providers/README.md b/docs/installation-and-operations/misc/custom-openid-connect-providers/README.md index bc5662e411..beac5dd899 100644 --- a/docs/installation-and-operations/misc/custom-openid-connect-providers/README.md +++ b/docs/installation-and-operations/misc/custom-openid-connect-providers/README.md @@ -62,3 +62,5 @@ After you are done you can leave the console by entering `exit`. Once this is done you will see an "Okta" button in the bottom area of the login form. Clicking on it will start the login process. + +_**Note**: This is an Enterprise Edition feature. If you do not see the button you will have to activate the Enterprise Edition first._ From 92ba723a1e62182512377acf9733ebc677a66b5a Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Tue, 1 Dec 2020 09:19:23 +0000 Subject: [PATCH 26/34] update locales from crowdin [ci skip] --- config/locales/crowdin/de.yml | 22 +++++++++---------- .../overviews/config/locales/crowdin/de.yml | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml index f72d0c6f6c..1a4ac635e3 100644 --- a/config/locales/crowdin/de.yml +++ b/config/locales/crowdin/de.yml @@ -33,13 +33,13 @@ de: colors: alternative-color: "Alternativ" content-link-color: "Link-Schriftfarbe" - primary-color: "Primär" - primary-color-dark: "Primär (dunkel)" + primary-color: "Primärfarbe" + primary-color-dark: "Primärfarbe (dunkel)" header-bg-color: "Hintergrund der Kopfzeile" header-item-bg-hover-color: "Hintergrund der Kopfzeile bei Hover" header-item-font-color: "Textfarbe der Kopfzeile" header-item-font-hover-color: "Textfarbe der Kopfzeile bei Hover" - header-border-bottom-color: "Header border" + header-border-bottom-color: "Rahmenfarbe der Kopfzeile" main-menu-bg-color: "Hintergrundfarbe des Hauptmenüs" main-menu-bg-selected-background: "Hintergrundfarbe des Hauptmenüs bei Auswahl" main-menu-bg-hover-background: "Hintergrundfarbe des Hauptmenüs bei Hover" @@ -52,7 +52,7 @@ de: enterprise_notice: "Als ein besonderes Dankeschön für Ihre finanzielle Unterstützung in der Entwicklung von OpenProject ist diese Funktionalität nur in Verknüpfung mit einem Enterprise-Edition Abonnement verfügbar." manage_colors: "Farbauswahloptionen bearbeiten" instructions: - alternative-color: "Starken Akzentfarbe, wird normalerweise für die wichtigste Schaltfläche auf dem Bildschirm verwendet." + alternative-color: "Starke Akzentfarbe, wird normalerweise für die wichtigste Schaltfläche auf dem Bildschirm verwendet." content-link-color: "Schriftfarbe der meisten Links." primary-color: "Hauptfarbe." primary-color-dark: "In der Regel wird eine dunklere Version der Hauptfarbe für Hover-Effekte verwendet." @@ -96,13 +96,13 @@ de: technical_warning_html: | Dieses LDAP-Formular erfordert technische Kenntnisse ihres LDAP-/Active Directory Setups.
- Bitte besuchen Sie unsere Dokumentation für detaillierte Anweisungen. + Bitte rufen Sie für eine detaillierte Anleitung unsere Dokumentation auf. attribute_texts: name: Beliebiger Name der LDAP-Verbindung - host: LDAP Hostname oder IP-Adresse - login_map: Der Attributschlüssel in LDAP, der benutzt wird, um die eindeutige Benutzeranmeldung zu identifizieren. Normalerweise wird dies `uid` oder `samAccountName` sein. + host: LDAP-Hostname oder IP-Adresse + login_map: Der Attributschlüssel in LDAP, der benutzt wird, um die eindeutige Benutzeranmeldung zu identifizieren. Normalerweise ist das `uid` oder `samAccountName`. generic_map: Der Attributschlüssel in LDAP, der dem OpenProject `%{attribute}` Attribut zugeordnet ist - admin_map_html: "Optional: Der Attributenschlüssel in LDAP der, falls vorhanden, den OpenProject Nutzer als einen Administrator makiert. \nIm Zweifel leer lassen." + admin_map_html: "Optional: Der Attributschlüssel in LDAP der, falls vorhanden, den OpenProject-Nutzer als einen Administrator markiert. \nIm Zweifel leer lassen." system_user_dn_html: | Geben Sie den DN des Systembenutzers ein, der für schreibgeschützten Zugriff verwendet wird.
@@ -126,7 +126,7 @@ de: connection_encryption: 'Verbindungsverschlüsselung' system_account: 'Systemkonto' system_account_legend: | - OpenProject benötigt lesenden Zugriff über ein LDAP Systemkonto, um Benutzer und Gruppen in Ihrem LDAP-Baum zu suchen. + OpenProject benötigt lesenden Zugriff über ein LDAP-Systemkonto, um Benutzer und Gruppen in Ihrem LDAP-Baum zu suchen. Bitte geben Sie die Anmeldedaten für den Systembenutzer im folgenden Abschnitt an. ldap_details: 'LDAP-Details' user_settings: 'Zuordnen von Attributen' @@ -532,7 +532,7 @@ de: invalid_url: 'ist keine gültige URL.' invalid_url_scheme: 'ist kein unterstütztes Protokoll (erlaubt: %{allowed_schemes}).' less_than_or_equal_to: "muss kleiner oder gleich %{count} sein." - not_current_user: "is not the current user." + not_current_user: "ist nicht der aktuelle Benutzer." not_a_date: "ist kein gültiges Datum." not_a_datetime: "ist kein gültiges Datum." not_a_number: "ist keine Zahl." @@ -1194,7 +1194,7 @@ de: forums: "Community Forum" newsletter: "Sicherheitswarnungen / Newsletter" image_conversion: - imagemagick: 'Imagemagick' + imagemagick: 'ImageMagick' journals: changes_retracted: "Die Änderungen wurden zurückgezogen." links: diff --git a/modules/overviews/config/locales/crowdin/de.yml b/modules/overviews/config/locales/crowdin/de.yml index 2e00ac1e71..e5d73eaf99 100644 --- a/modules/overviews/config/locales/crowdin/de.yml +++ b/modules/overviews/config/locales/crowdin/de.yml @@ -1,4 +1,4 @@ de: overviews: label: 'Übersicht' - permission_manage_overview: 'Manage overview page' + permission_manage_overview: 'Übersichtsseite verwalten' From aea0cbc91ee21313ed4411282fa25c6f266040f3 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Tue, 1 Dec 2020 11:02:22 +0100 Subject: [PATCH 27/34] update video embedding [skip ci] --- docs/getting-started/sign-in-registration/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/sign-in-registration/README.md b/docs/getting-started/sign-in-registration/README.md index 8a47d2b2e8..0fd8e250e0 100644 --- a/docs/getting-started/sign-in-registration/README.md +++ b/docs/getting-started/sign-in-registration/README.md @@ -25,7 +25,7 @@ Here you will get an overview how to sign in and register to an existing OpenPro | [Choose your language](#choose-your-language) | How to select your language in OpenProject? | | [Reset your password](#reset-your-password) | If you forgot your password find out how to reset it. | - + ## Sign in with an existing account From fd2b2a3f2ac4d01e8fe3f51f6dfaf4b63f1b3adc Mon Sep 17 00:00:00 2001 From: Wieland Lindenthal Date: Tue, 1 Dec 2020 13:59:04 +0100 Subject: [PATCH 28/34] Feature: Optimize memory for pdf exports with attachments (#8861) * Change design of WP list PDF export to batches In order to keep memory consumption low when exporting WP as list in PDF, we split the work in batches of 100 work packages. In every batch we resize the attached photos and create a PDF. When all batches have been processed, we merge the PDF files via the command line tool `pdfunite` which fortunately comes with a package that we already require for text extraction. Only at the end, when the merged PDF is ready (and small) we load it into the ruby process to return the PDF's content with service's success. In every batch, we make sure that we remove all minimized images afterwards. And after merging the batch PDF files to the final PDF we also delete all batch PDFs. * Don't load the merged PDF file into the ruby process * Rename tempfile to final file name before storing. * Improve code structure. --- .../work_package/pdf_export/attachments.rb | 8 ++ .../pdf_export/work_package_list_to_pdf.rb | 109 +++++++++++++++--- .../work_packages/exports/export_job.rb | 10 ++ 3 files changed, 111 insertions(+), 16 deletions(-) diff --git a/app/models/work_package/pdf_export/attachments.rb b/app/models/work_package/pdf_export/attachments.rb index 2060cee27d..ce18a85994 100644 --- a/app/models/work_package/pdf_export/attachments.rb +++ b/app/models/work_package/pdf_export/attachments.rb @@ -69,6 +69,8 @@ module WorkPackage::PDFExport::Attachments image.resize("x325") image.write(resized_file_path) + @resized_image_paths << resized_file_path + resized_file_path end @@ -83,4 +85,10 @@ module WorkPackage::PDFExport::Attachments def pdf_embeddable?(attachment) %w[image/jpeg image/png].include?(attachment.content_type) end + + def delete_all_resized_images + @resized_image_paths.each do |file_path| + File.delete(file_path) + end + end end diff --git a/app/models/work_package/pdf_export/work_package_list_to_pdf.rb b/app/models/work_package/pdf_export/work_package_list_to_pdf.rb index 66fbe627d7..436f263e37 100644 --- a/app/models/work_package/pdf_export/work_package_list_to_pdf.rb +++ b/app/models/work_package/pdf_export/work_package_list_to_pdf.rb @@ -28,7 +28,19 @@ # See docs/COPYRIGHT.rdoc for more details. #++ +# Exporter for work package table. +# +# It can optionally export a work package with +# - description, or with +# - attached images, or with +# - description and attached images. +# +# When exporting with attached images then the memory consumption can quickly +# grow beyond limits. Therefore we create multiple smaller PDFs that we finally +# merge do one file. + require 'mini_magick' +require 'open3' class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base include WorkPackage::PDFExport::Common @@ -37,26 +49,29 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base attr_accessor :pdf, :options + WORK_PACKAGES_PER_BATCH = 100 + def initialize(object, options = {}) super @cell_padding = options.delete(:cell_padding) - self.pdf = get_pdf(current_language) - - configure_page_size - configure_markup - end - - def configure_page_size - pdf.options[:page_size] = 'EXECUTIVE' - pdf.options[:page_layout] = :landscape + @total_wp_count = query.results.work_package_count + @batches_count = @total_wp_count.fdiv(WORK_PACKAGES_PER_BATCH).ceil + @batch_files = [] + @page_count = -1 end def render! - write_content! + (1..@batches_count).each do |batch_index| + run_batch!(batch_index) + end + + @merged_pdf_file = merge_pdfs - success(pdf.render) + delete_tmp_files + + success(@merged_pdf_file) rescue Prawn::Errors::CannotFit error(I18n.t(:error_pdf_export_too_many_columns)) rescue StandardError => e @@ -64,12 +79,57 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base error(I18n.t(:error_pdf_failed_to_export, error: e.message)) end - def write_content! + private + + def on_first_batch(batch_index) + return unless batch_index == 1 + write_title! write_headers! - write_work_packages! + end + + def delete_tmp_files + @batch_files.each(&:delete) + end + def configure_page_size + pdf.options[:page_size] = 'EXECUTIVE' + pdf.options[:page_layout] = :landscape + end + + def merge_pdfs + merged_pdf = Tempfile.new + # We use the command line tool "pdfunite" for concatenating the PDFs. + # That tool comes with the system package "poppler-utils" which we + # fortunately already have installed for text extraction purposes. + Open3.capture2e("pdfunite", *@batch_files.map(&:path), merged_pdf.path) + + merged_pdf + end + + def run_batch!(batch_index) + initialize_batch_page + + batch_file = render_batch!(batch_index) + + @page_count += pdf.page_count + batch_file.close + @batch_files << batch_file + end + + def render_batch!(batch_index) + @resized_image_paths = [] + + on_first_batch(batch_index) + write_work_packages!(batch_index) write_footers! + + batch_file = Tempfile.new("pdf_batch_#{batch_index}") + pdf.render_file(batch_file.path) + + delete_all_resized_images + + batch_file end def project @@ -98,11 +158,13 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base end def write_footers! + @page_count += 1 pdf.number_pages format_date(Date.today), at: [pdf.bounds.left, 0], style: :italic - pdf.number_pages "/", + pdf.number_pages "", + start_count_at: @page_count, at: [pdf.bounds.right - 25, 0], style: :italic end @@ -140,11 +202,11 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base end end - def write_work_packages! + def write_work_packages!(batch_index) pdf.font style: :normal, size: 8 previous_group = nil - work_packages.each do |work_package| + work_packages_batch(batch_index).each do |work_package| previous_group = write_group_header!(work_package, previous_group) write_attributes!(work_package) @@ -159,6 +221,14 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base end end + def work_packages_batch(batch_index) + query + .results + .work_packages + .page(batch_index) + .per_page(WORK_PACKAGES_PER_BATCH) + end + def write_attributes!(work_package) values = valid_export_columns.map do |column| make_column_value work_package, column @@ -220,4 +290,11 @@ class WorkPackage::PDFExport::WorkPackageListToPdf < WorkPackage::Exporter::Base pdf.make_cell values.map(&:formatted_value).join(', '), padding: cell_padding end + + def initialize_batch_page + self.pdf = get_pdf(current_language) + + configure_page_size + configure_markup + end end diff --git a/app/workers/work_packages/exports/export_job.rb b/app/workers/work_packages/exports/export_job.rb index 56b6858bcf..842b08f998 100644 --- a/app/workers/work_packages/exports/export_job.rb +++ b/app/workers/work_packages/exports/export_job.rb @@ -33,12 +33,22 @@ module WorkPackages raise export_result.message elsif export_result.content.is_a? File store_attachment(export, export_result.content) + elsif export_result.content.is_a? Tempfile + store_from_tempfile(export, export_result) else store_from_string(export, export_result) end end end + def store_from_tempfile(export, export_result) + renamed_file_path = File.join(File.dirname(export_result.content.path), export_result.title) + File.rename(export_result.content.path, renamed_file_path) + file = File.open(renamed_file_path) + store_attachment(export, file) + file.close + end + def schedule_cleanup ::WorkPackages::Exports::CleanupOutdatedJob.perform_after_grace end From 7e10b93632a006293799556b7c27711ce55583bc Mon Sep 17 00:00:00 2001 From: ML-OpenP Date: Tue, 1 Dec 2020 17:02:57 +0100 Subject: [PATCH 29/34] small improvements in docs [ci skip] --- docs/getting-started/my-account/README.md | 4 ++-- docs/installation-and-operations/operation/faq/README.md | 2 +- .../manage-work-packages/work-package-status/README.md | 3 ++- docs/user-guide/budgets/README.md | 8 ++++---- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/getting-started/my-account/README.md b/docs/getting-started/my-account/README.md index e898222f98..6abfe4190e 100644 --- a/docs/getting-started/my-account/README.md +++ b/docs/getting-started/my-account/README.md @@ -4,7 +4,7 @@ sidebar_navigation: priority: 400 description: Learn how to configure account settings. robots: index, follow -keywords: my account, account settings +keywords: my account, account settings, change language --- # My Account @@ -16,7 +16,7 @@ Change your personal settings in My Account. Here you can adapt, e.g. the langua | [Open My Account settings](#open-my-account-settings) | How to open your personal settings in OpenProject? | | [Change password](#change-password) | How to change my password? | | [Edit your user information](#edit-your-user-information) | How to change the name or email address in OpenProject? | -| [Profile settings: change your language, time zone or display of comments](#profile-settings:-change-your-language,-time-zone-or-display-of-comments) | How to change the language, time zone or display of comments in OpenProject? | +| [Profile settings: change your language, time zone or display of comments](#profile-settings) | How to change the language, time zone or display of comments in OpenProject? | | [Two-factor authentication](#two-factor-authentication-premium-feature) | How to set up a two-factor authentication? | | [Email notifications](#email-notifications) | How to change email notifications sent by OpenProject? | | [Set an Avatar](#set-an-avatar) | How to set an Avatar in OpenProject and change the profile picture? | diff --git a/docs/installation-and-operations/operation/faq/README.md b/docs/installation-and-operations/operation/faq/README.md index aa6ecd4d00..89737c9cca 100644 --- a/docs/installation-and-operations/operation/faq/README.md +++ b/docs/installation-and-operations/operation/faq/README.md @@ -6,7 +6,7 @@ sidebar_navigation: # Frequently asked questions - FAQ -## I lost access to my admin account, how to I reset my password? +## I lost access to my admin account, how do I reset my password? You can reset your admin account through the Rails console. [Please see this separate page on how to start the console](https://docs.openproject.org/installation-and-operations/operation/control/). diff --git a/docs/system-admin-guide/manage-work-packages/work-package-status/README.md b/docs/system-admin-guide/manage-work-packages/work-package-status/README.md index 7690398faa..2343805cd2 100644 --- a/docs/system-admin-guide/manage-work-packages/work-package-status/README.md +++ b/docs/system-admin-guide/manage-work-packages/work-package-status/README.md @@ -13,7 +13,8 @@ Work packages can have various status depending on their types, e.g. tasks can h The status can be set at the top of the work package details view or in the list view in the corresponding column. -![Sys-admin-work-package-status](Sys-admin-work-package-status.png)The status field can be configured under *Administration ->* *Work packages* -> *Status*. You will see the list of all the existing work package status in the system. You can add new status or change the name and order of existing status. +![Sys-admin-work-package-status](Sys-admin-work-package-status.png)The status field can be configured under *Administration ->* *Work packages* -> *Status*. You will see the list of all the existing work package status in the system. You can add new status or change the name and order of existing status. +To learn about the options for configuring the transition from one status to another navigate to [Manage work package workflows](../work-package-workflows). ## Create a new work package status diff --git a/docs/user-guide/budgets/README.md b/docs/user-guide/budgets/README.md index f6ab578594..61d8daec52 100644 --- a/docs/user-guide/budgets/README.md +++ b/docs/user-guide/budgets/README.md @@ -4,7 +4,7 @@ sidebar_navigation: priority: 780 description: Find out how to create and manage budgets for a project in OpenProject. robots: index, follow -keywords: budgets +keywords: budgets, project budget, costs --- # Budgets @@ -15,14 +15,14 @@ You can add planned **unit costs** as well as **labor costs** for the project. Then, you will assign work packages to a budgets. If you log time or costs to this work package the costs will booked to this budget and show the percentage spent for a project budget. -| Feature | Documentation for | +| Topic | Content | | ------------------------------------------------------------ | ------------------------------------------------------------ | | [Create a project budget](#create-a-project-budget) | How to set up a project budget in OpenProject? | | [Add planned unit costs](#add-planned-unit-costs) | How to add planned unit costs to a budget? | | [Add planned labor costs](#add-planned-labor-costs) | How to add planned labor costs to a budget? | -| [Assign a work package to a budget](#assign-work-package-to-a-budget) | How to assign a work package to book time and costs to a project budget? | +| [Assign a work package to a budget](#assign-a-work-package-to-a-budget) | How to assign a work package to book time and costs to a project budget? | | [View details and update budget](#view-details-and-update-budget) | How to display the details, update, copy or delete a project budget? | -| | | +| [Frequently asked questions (FAQ)](Frequently-asked-questions-(FAQ)) | What are frequent questions regarding budgets? | ## Create a project budget From e2087ac8755df71dd5e5610912ffda129f07e48e Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Wed, 2 Dec 2020 09:34:01 +0100 Subject: [PATCH 30/34] changed video embedding [ci skip] --- docs/getting-started/sign-in-registration/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/sign-in-registration/README.md b/docs/getting-started/sign-in-registration/README.md index 0fd8e250e0..8a47d2b2e8 100644 --- a/docs/getting-started/sign-in-registration/README.md +++ b/docs/getting-started/sign-in-registration/README.md @@ -25,7 +25,7 @@ Here you will get an overview how to sign in and register to an existing OpenPro | [Choose your language](#choose-your-language) | How to select your language in OpenProject? | | [Reset your password](#reset-your-password) | If you forgot your password find out how to reset it. | - + ## Sign in with an existing account From f1cda2ca0d944d4717a6bfc590ee1db238db2511 Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Wed, 2 Dec 2020 09:15:23 +0000 Subject: [PATCH 31/34] update locales from crowdin [ci skip] --- config/locales/crowdin/de.yml | 2 +- config/locales/crowdin/js-de.yml | 6 +++--- config/locales/crowdin/js-sv.yml | 10 +++++----- config/locales/crowdin/sv.yml | 14 +++++++------- modules/backlogs/config/locales/crowdin/de.yml | 2 +- modules/meeting/config/locales/crowdin/de.yml | 2 +- modules/overviews/config/locales/crowdin/ru.yml | 2 +- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml index 1a4ac635e3..aa135c5059 100644 --- a/config/locales/crowdin/de.yml +++ b/config/locales/crowdin/de.yml @@ -1370,7 +1370,7 @@ de: label_enterprise_active_users: "%{current}/%{limit} gebuchte aktive Nutzer" label_enterprise_edition: "Enterprise-Edition" label_environment: "Umgebung" - label_estimates_and_time: "Schätzungen & Zeit" + label_estimates_and_time: "Schätzungen & Zeiten" label_equals: "ist" label_everywhere: "überall" label_example: "Beispiel" diff --git a/config/locales/crowdin/js-de.yml b/config/locales/crowdin/js-de.yml index 29ee61c522..e8eae03b3e 100644 --- a/config/locales/crowdin/js-de.yml +++ b/config/locales/crowdin/js-de.yml @@ -271,7 +271,7 @@ de: standard: learn_about_link: https://www.openproject.org/openproject-11-0-release current_new_feature_html: > - Die Version enthält zahlreiche neue Funktionen und Verbesserungen:
  • Top-Down-Planung um alle Projektaufgaben zu definieren. Dabei sind die Anfangs- und Enddaten eines Elternelements unabhängig von den Daten der Unteraufgaben.
  • Vielseitige agile Boards ermöglichen Ihnen die Erstellung eines Projektstrukturplans oder die Verteilung von Aufgaben auf Unterprojekte.
  • Projektvorlagen zur einfachen Erstellung neuer Projekte.
  • Konfiguration der Projektseite ermöglicht ein besseres Projektportfolio-Management.
+ Die Version enthält zahlreiche neue Funktionen und Verbesserungen:
  • Top-Down-Planung um alle Projektaufgaben zu definieren. Dabei sind die Anfangs- und Enddaten eines Elternelements unabhängig von den Daten der Unteraufgaben.
  • Vielseitige agile Boards ermöglichen Ihnen die Erstellung eines Projektstrukturplans oder die Verteilung von Aufgaben auf Unterprojekte.
  • Projektvorlagen zur einfachen Erstellung neuer Projekte.
  • Die Konfiguration der Projektseite ermöglicht ein besseres Projektportfolio-Management.
bim: learn_about_link: "https://www.openproject.org/openproject-bim-10-5\n" current_new_feature_html: > @@ -477,7 +477,7 @@ de: drag: 'Ziehen Sie Ihre Karten in eine Liste, um diese zu sortieren oder weisen Sie diese einer anderen Liste zu. Ein Doppelklick auf eine Karte öffnet die Detailansicht.' wp: toggler: "Hier sind die Arbeitspakete, die Ihnen eine detailliertere Sicht auf die Arbeit in Ihrem Projekt geben." - list: 'Dies ist die Liste der wichtigen Arbeitspakete in Ihrem Projekt, z.B. Aufgaben, Funktionen, Meilensteine, Fehler, und Vieles mehr.
Sie können neue Arbeitspakete direkt in der Liste anlegen und bearbeiten. Ein Doppelklick auf die Zeile öffnet die Detailansicht.' + list: 'Dies ist die Liste der wichtigen Arbeitspakete in Ihrem Projekt, z.B. Aufgaben, Funktionen, Meilensteine, Fehler, und Vieles mehr.
Sie können neue Arbeitspakete direkt in der Liste anlegen und bearbeiten. Ein Doppelklick auf eine Zeile öffnet die Detailansicht.' full_view: 'In der Arbeitspaket-Detailansicht finden Sie alle wichtigen Informationen, wie Beschreibung, Status und Priorität, Aktivitäten, Abhängigkeiten oder Kommentare.' back_button: 'Mit dem Pfeil kommen Sie zurück in die Listenansicht.' create_button: 'Mit Anlegen Können Sie neue Arbeitspakete Ihrem Projekt hinzufügen.' @@ -740,7 +740,7 @@ de: property_groups: details: "Details" people: "Personen" - estimatesAndTime: "Schätzungen & Zeit" + estimatesAndTime: "Schätzungen & Zeiten" other: "Andere" properties: assignee: "Zugewiesen an" diff --git a/config/locales/crowdin/js-sv.yml b/config/locales/crowdin/js-sv.yml index 47bee8abe1..36342de155 100644 --- a/config/locales/crowdin/js-sv.yml +++ b/config/locales/crowdin/js-sv.yml @@ -170,12 +170,12 @@ sv: reset_to_defaults: 'Återställ standardinställningar' enterprise: trial: - confirmation: "Confirmation of email address" + confirmation: "Bekräftelse av e-postadress" confirmation_info: > We sent you an email on %{date} to %{email}. Please check your inbox and click the confirmation link provided to start your 14 days trial. form: general_consent: > - I agree with the terms of service and the privacy policy. + Jag godkänner användarvillkoren och integritetspolicyn. invalid_email: "Invalid email address" label_company: "Company" label_first_name: "Förnamn" @@ -213,11 +213,11 @@ sv: premium_features_text: "Agile boards, custom theme and logo, graphs, intelligent workflows with custom actions, full text search for work package attachments and multi-select custom fields." professional_support: "Professionell hjälp" professional_support_text: "Get reliable, high-touch support from senior support engineers with expert knowledge about running OpenProject in business-critical environments." - button_start_trial: "Start free trial" - button_book_now: "Book now" + button_start_trial: "Starta fri provperiod" + button_book_now: "Boka nu" confidence: > We deliver the confidence of a tested and supported enterprise-class project management software - with Open Source and an open mind. - link_quote: "Get a quote" + link_quote: "Få en offert" text: > The OpenProject Enterprise Edition builds on top of the Community Edition. It includes premium features and professional support mainly aimed at organizations with more than 10 users that manage business critical projects with OpenProject. unlimited: "Unlimited" diff --git a/config/locales/crowdin/sv.yml b/config/locales/crowdin/sv.yml index 8ad6549bf9..bb97533d55 100644 --- a/config/locales/crowdin/sv.yml +++ b/config/locales/crowdin/sv.yml @@ -63,16 +63,16 @@ sv: main-menu-bg-color: "Bakgrundsfärg på den vänstra sidomenyn." theme_warning: Changing the theme will overwrite you custom style. The design will then be lost. Are you sure you want to continue? enterprise: - upgrade_to_ee: "Upgrade to the Enterprise Edition" + upgrade_to_ee: "33 / 5000\nUppgradera till Enterprise Edition" add_token: "Ladda upp en Enterprise Edition support-nyckel" replace_token: "Ersätta din nuvarande support-nyckel" order: "Beställ Enterprise Edition" paste: "Klistra in din Enterprise Edition support-nyckel" required_for_feature: "Denna funktion är endast tillgänglig med en aktiv Enterprise Edition support-nyckel." enterprise_link: "För mer information, klicka här." - start_trial: 'Start free trial' - book_now: 'Book now' - get_quote: 'Get a quote' + start_trial: 'Starta fri provperiod' + book_now: 'Boka nu' + get_quote: 'Få en offert' announcements: show_until: Visa fram till is_active: visas för tillfället @@ -1200,10 +1200,10 @@ sv: image_conversion: imagemagick: 'Imagemagick' journals: - changes_retracted: "The changes were retracted." + changes_retracted: "Förändringarna drogs tillbaka." links: configuration_guide: 'Konfigurationsguide' - get_in_touch: "You have questions? Get in touch with us." + get_in_touch: "Har du frågor? Ta kontakt med oss." instructions_after_registration: "Du kan logga in så snart ditt konto har aktiverats genom att klicka på %{signin}." instructions_after_logout: "Du kan logga in igen genom att klicka på %{signin}." instructions_after_error: "Du kan försöka logga in igen genom att klicka på %{signin}. Om felet kvarstår, be din systemadministratör om hjälp." @@ -2565,7 +2565,7 @@ sv: mail_self_notified: "Jag vill bli meddelad om ändringar som jag själv gör" status_user_and_brute_force: "%{user} och %{brute_force}" status_change: "Statusändring" - text_change_disabled_for_provider_login: "The name is set by your login provider and can thus not be changed." + text_change_disabled_for_provider_login: "Namnet är satt av din inloggningsleverantör och kan därför inte ändras." unlock: "Lås upp" unlock_and_reset_failed_logins: "Lås upp och nollställ misslyckade inloggningsförsök" version_status_closed: "stängt" diff --git a/modules/backlogs/config/locales/crowdin/de.yml b/modules/backlogs/config/locales/crowdin/de.yml index 727f8495df..51d9a809b5 100644 --- a/modules/backlogs/config/locales/crowdin/de.yml +++ b/modules/backlogs/config/locales/crowdin/de.yml @@ -84,7 +84,7 @@ de: backlogs_product_backlog: "Produkt Backlog" backlogs_product_backlog_is_empty: "Produkt Backlog ist leer" backlogs_product_backlog_unsized: "Die Spitze des Produkt Backlogs hat Stories ohne Aufwandsangaben" - backlogs_sizing_inconsistent: "Story Aufwand weicht von den Schätzwerten ab" + backlogs_sizing_inconsistent: "Die Story-Aufwände weichen von den Schätzwerten ab" backlogs_sprint_notes_missing: "Geschlossene Sprints ohne Closed sprints without Retrospective-/Besprechungsnotizen" backlogs_sprint_unestimated: "Geschlossene oder aktive Sprints mit nicht abgeschätzten Stories" backlogs_sprint_unsized: "Das Projekt hat Stories auf aktiven oder vor kurzem geschlossenen Sprints welche keine Aufwandsangaben enthalten" diff --git a/modules/meeting/config/locales/crowdin/de.yml b/modules/meeting/config/locales/crowdin/de.yml index 0b225d0b3a..2cd13328cf 100644 --- a/modules/meeting/config/locales/crowdin/de.yml +++ b/modules/meeting/config/locales/crowdin/de.yml @@ -59,7 +59,7 @@ de: label_meeting_date_time: "Datum/Uhrzeit" label_meeting_diff: "Differenz" label_notify: "Zur Einsicht verschicken" - label_icalendar: "ICalendar senden" + label_icalendar: "iCalendar senden" label_version: "Version" label_time_zone: "Zeitzone" label_start_date: "Anfangstermin" diff --git a/modules/overviews/config/locales/crowdin/ru.yml b/modules/overviews/config/locales/crowdin/ru.yml index 6224fcdf69..2b5e115449 100644 --- a/modules/overviews/config/locales/crowdin/ru.yml +++ b/modules/overviews/config/locales/crowdin/ru.yml @@ -1,4 +1,4 @@ ru: overviews: label: 'Обзор' - permission_manage_overview: 'Manage overview page' + permission_manage_overview: 'Управление страницей обзора' From cbbf5c4214cb76535c26a7b58948d2a1394b4160 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Wed, 2 Dec 2020 12:57:27 +0100 Subject: [PATCH 32/34] add video [skip ci] --- docs/getting-started/sign-in-registration/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/getting-started/sign-in-registration/README.md b/docs/getting-started/sign-in-registration/README.md index 8a47d2b2e8..fe4c1ccaa6 100644 --- a/docs/getting-started/sign-in-registration/README.md +++ b/docs/getting-started/sign-in-registration/README.md @@ -1,11 +1,10 @@ ---- sidebar_navigation: title: Sign in and registration priority: 990 description: Sign in and registration in OpenProject. robots: index, follow keywords: sing in, login, registration ---- + # Sign in and registration Here you will get an overview how to sign in and register to an existing OpenProject installation. @@ -27,6 +26,8 @@ Here you will get an overview how to sign in and register to an existing OpenPro + + ## Sign in with an existing account To sign in to an OpenProject installation with an existing account, please enter the URL of your OpenProject in a modern browser, e.g. documentation.openproject.com. From 1b1c6cb8a30e8f200e1b086750b66fed24097c81 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Wed, 2 Dec 2020 21:11:59 +0100 Subject: [PATCH 33/34] Remove video [ci skip] --- docs/getting-started/sign-in-registration/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/getting-started/sign-in-registration/README.md b/docs/getting-started/sign-in-registration/README.md index fe4c1ccaa6..e0cda7f815 100644 --- a/docs/getting-started/sign-in-registration/README.md +++ b/docs/getting-started/sign-in-registration/README.md @@ -26,8 +26,6 @@ Here you will get an overview how to sign in and register to an existing OpenPro - - ## Sign in with an existing account To sign in to an OpenProject installation with an existing account, please enter the URL of your OpenProject in a modern browser, e.g. documentation.openproject.com. From 8dac6a9a85a67ada09f8f6d87ebbf8c277424279 Mon Sep 17 00:00:00 2001 From: ulferts Date: Thu, 3 Dec 2020 08:51:25 +0100 Subject: [PATCH 34/34] Add release-notes file --- docs/release-notes/11-0-4/README.md | 28 ++++++++++++++++++++++++++++ docs/release-notes/README.md | 7 +++++++ 2 files changed, 35 insertions(+) create mode 100644 docs/release-notes/11-0-4/README.md diff --git a/docs/release-notes/11-0-4/README.md b/docs/release-notes/11-0-4/README.md new file mode 100644 index 0000000000..58f09ed623 --- /dev/null +++ b/docs/release-notes/11-0-4/README.md @@ -0,0 +1,28 @@ +--- +title: OpenProject 11.0.4 +sidebar_navigation: + title: 11.0.4 +release_version: 11.0.4 +release_date: 2020-12-03 +--- + +# OpenProject 11.0.4 + +We released [OpenProject 11.0.4](https://community.openproject.com/versions/1458). +The release contains several bug fixes and we recommend updating to the newest version. + + +#### Bug fixes and changes + +- Fixed: Budgets Fail to Copy due to Missing Superclass Method \[[#34966](https://community.openproject.com/wp/34966)\] +- Fixed: Selected design / theme lost when switching to "Backlogs" module \[[#34968](https://community.openproject.com/wp/34968)\] +- Fixed: Initially seeded homepage grid cannot be edited \[[#35266](https://community.openproject.com/wp/35266)\] +- Fixed: [Translation][German] Administration>User&Permissions>Roles \[[#35363](https://community.openproject.com/wp/35363)\] +- Fixed: Internal error (500) on meeting history page when clicking on previous version link \[[#35433](https://community.openproject.com/wp/35433)\] + +#### Contributions +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. + +Special thanks for reporting and finding bugs go to + +Boris Lukashev, Benjamin Bädorf, Frank Schmid diff --git a/docs/release-notes/README.md b/docs/release-notes/README.md index c2615d5450..7bb740920a 100644 --- a/docs/release-notes/README.md +++ b/docs/release-notes/README.md @@ -12,6 +12,13 @@ Stay up to date and get an overview of the new features included in the releases +## 11.0.4 + +Release date: 2020-12-03 + +[Release Notes](11-0-4/) + + ## 11.0.3 Release date: 2020-11-16