Compare commits

...
36 Commits
Author SHA1 Message Date
Lauri Ojansivu 9c0eba4f00 v2.40 2019-03-06 18:21:26 +02:00
Lauri Ojansivu f19625d835 Fix manifest and icon urls, part 2.
Thanks to xet7 !
2019-03-06 18:18:34 +02:00
Lauri Ojansivu c4754d9f85 v2.39 2019-03-06 17:31:15 +02:00
Lauri Ojansivu acdc5dc1f4 Update translations. 2019-03-06 17:23:33 +02:00
Lauri Ojansivu 4927609af0 Update changelog. 2019-03-06 17:20:47 +02:00
Lauri Ojansivu e845fe3e71 Fix manifest and icon paths.
Thanks to xet7 !

Closes #2168,
closes #1692
2019-03-06 17:15:36 +02:00
Lauri Ojansivu d807efd4f8 Update translations. 2019-03-06 03:14:13 +02:00
Lauri Ojansivu 5f76695298 Update release scripts. 2019-03-06 03:12:27 +02:00
Lauri Ojansivu aadb1f3109 v2.38 2019-03-06 03:07:50 +02:00
Lauri Ojansivu cb986912c4 [Added support for LDAP admin status sync](https://github.com/wekan/wekan-ldap/pull/40).
Examples: LDAP_SYNC_ADMIN_STATUS=true, LDAP_SYNC_ADMIN_GROUP=group1,group2 (https://github.com/wekan/wekan/commit/7e451d9033eb6162cd37de3e5ffabdc22e272948).
Thanks to JulianJacobi and xet7.
2019-03-06 02:55:13 +02:00
Lauri Ojansivu 7e451d9033 [Add support for admin status sync](https://github.com/wekan/wekan-ldap/pull/40).
Examples: LDAP_SYNC_ADMIN_STATUS=true, LDAP_SYNC_ADMIN_GROUP=group1,group2

Thanks to JulianJacobi and xet7 !
2019-03-06 02:47:27 +02:00
Lauri Ojansivu a024b6d692 Update changelog. 2019-03-06 02:00:31 +02:00
Lauri Ojansivu a45ccf1db7 [Remove phantomjs binary from Docker/Snap/Stackerfile to reduce size](https://github.com/wekan/wekan/issues/2229).
Thanks to soohwa !

Closes #2229
2019-03-06 01:56:32 +02:00
Lauri Ojansivu 30bf430a91 - [Use ubuntu:cosmic base in Dockerfile](https://github.com/wekan/wekan/commit/df00776e6ca47080435eca9a31a16fd24c0770ed). Thanks to xet7. 2019-03-06 01:44:47 +02:00
Lauri Ojansivu df00776e6c Use ubuntu:cosmic base in Dockerfile.
Thanks to xet7 !
2019-03-06 01:42:30 +02:00
Lauri Ojansivu 1dc0d0c12e Update changelog. 2019-03-06 01:34:58 +02:00
Lauri Ojansivu 002fd411ea [Fix: LDAP Authentication with Recursive Group Filtering Does Not Work on Snap](https://github.com/wekan/wekan/issues/2228).
Thanks to apages2 !

Closes #2228,
closes wekan/wekan-ldap#23
2019-03-06 01:27:40 +02:00
Lauri Ojansivu 6311cf0c5a Update translations. 2019-03-06 01:23:40 +02:00
Lauri Ojansivu d71543beb6 - [Fix card deletion from archive](https://github.com/wekan/wekan/commit/77754cf32f28498e550a46325d90eb41f08f8552).
- [Fix card move with wrong swimlaneId](https://github.com/wekan/wekan/commit/1bef3a3f8ff4eac43bf97cc8b86d85e618b0e2ef).
  NOTE: This does not yet fix card move with Custom Field, it will be fixed later.

Thanks to andresmanelli !

Closes wekan/wekan-snap#83,
closes #2224,
closes #2230,
related #2233
2019-03-06 01:05:15 +02:00
Lauri Ojansivu 5a9837f676 Merge remote-tracking branch 'andresmanelli/edge' into edge 2019-03-06 00:58:49 +02:00
Andrés Manelli 77754cf32f Fix card deletion from archive 2019-03-05 22:48:29 +01:00
Lauri Ojansivu 43a74fb99b Merge remote-tracking branch 'andresmanelli/edge' into edge 2019-03-05 23:38:47 +02:00
Andrés Manelli 1bef3a3f8f Fix card move with wrong swimlaneId 2019-03-05 22:35:45 +01:00
Lauri Ojansivu b6b6be34f6 Update translations. 2019-03-04 21:29:04 +02:00
Lauri Ojansivu f1cde3e873 - [Added a Helm Chart to the project](https://github.com/wekan/wekan/pull/2227).
Thanks to TechnoTaff !
2019-03-04 21:27:35 +02:00
Lauri Ojansivu dcd6ae2e01 Merge pull request #2227 from TechnoTaff/devel
Added a Helm Chart to the project
2019-03-04 21:21:51 +02:00
Stephen Randall 8984172ff6 Readme updates 2019-03-04 16:44:12 +00:00
Stephen Randall 87a5e7f030 Merge branch 'devel' of https://github.com/TechnoTaff/wekan into devel 2019-03-04 16:29:29 +00:00
Stephen Randall 115d07da5a Added some notes 2019-03-04 16:28:44 +00:00
Steve Randall e67ed023cd Create .gitkeep 2019-03-04 16:26:34 +00:00
Steve Randall 1f1d753791 Delete requirements.lock 2019-03-04 16:13:34 +00:00
Steve Randall 34fcce60af Delete mongodb-replicaset-3.6.4.tgz 2019-03-04 16:13:11 +00:00
Stephen Randall e7a90d9a7c Added helm chart v1 2019-03-04 15:55:20 +00:00
Lauri Ojansivu 9d6d5e1a14 v2.37 2019-03-04 12:08:55 +02:00
Lauri Ojansivu 763cf81c97 [Fix Adding Labels to cards is not possible anymore](https://github.com/wekan/wekan/issues/2223).
Thanks to xet7 !

Closes #2223
2019-03-04 12:04:12 +02:00
Lauri Ojansivu 0b64a46bdc Update translations. 2019-03-04 08:55:42 +02:00
50 changed files with 1076 additions and 287 deletions

No files matched your search

+46
View File
@@ -1,3 +1,49 @@
# v2.40 2019-03-06 Wekan erlease
- Part 2: [Fix](https://github.com/wekan/wekan/commit/e845fe3e7130d111be4c3a73e2551738c980ff7b)
[manifest](https://github.com/wekan/wekan/issues/2168) and
[icon](https://github.com/wekan/wekan/issues/1692) paths. Thanks to xet7.
Thanks to above GitHub users for their contributions, and translators for their translations.
# v2.39 2019-03-06 Wekan release
This release fixes the following bugs:
- [Fix](https://github.com/wekan/wekan/commit/e845fe3e7130d111be4c3a73e2551738c980ff7b)
[manifest](https://github.com/wekan/wekan/issues/2168) and
[icon](https://github.com/wekan/wekan/issues/1692) paths. Thanks to xet7.
Thanks to above GitHub users for their contributions, and translators for their translations.
# v2.38 2019-03-06 Wekan release
This release adds the following new features:
- [Added a Helm Chart to the project](https://github.com/wekan/wekan/pull/2227), thanks to TechnoTaff.
- [Added support for LDAP admin status sync](https://github.com/wekan/wekan-ldap/pull/40).
Examples: LDAP_SYNC_ADMIN_STATUS=true, LDAP_SYNC_ADMIN_GROUP=group1,group2 (https://github.com/wekan/wekan/commit/7e451d9033eb6162cd37de3e5ffabdc22e272948).
Thanks to JulianJacobi and xet7.
and fixes the following bugs:
- [Fix card deletion from archive](https://github.com/wekan/wekan/commit/77754cf32f28498e550a46325d90eb41f08f8552). Thanks to andresmanelli.
- [Fix card move with wrong swimlaneId](https://github.com/wekan/wekan/commit/1bef3a3f8ff4eac43bf97cc8b86d85e618b0e2ef). Thanks to andresmanelli.
NOTE: This does not yet fix card move [with Custom Field](https://github.com/wekan/wekan/issues/2233), it will be fixed later.
- [Fix: LDAP Authentication with Recursive Group Filtering Does Not Work on Snap](https://github.com/wekan/wekan/issues/2228). Thanks to apages2.
- [Use ubuntu:cosmic base in Dockerfile](https://github.com/wekan/wekan/commit/df00776e6ca47080435eca9a31a16fd24c0770ed). Thanks to xet7.
- [Remove phantomjs binary from Docker/Snap/Stackerfile to reduce size](https://github.com/wekan/wekan/issues/2229). Thanks to soohwa.
Thanks to above GitHub users for their contributions, and translators for their translations.
# v2.37 2019-03-04 Wekan release
This release fixes the following bugs:
- [Fix Adding Labels to cards is not possible anymore](https://github.com/wekan/wekan/issues/2223).
Thanks to GitHub user xet7 for contributions.
# v2.36 2019-03-03 Wekan release
This release adds the following UI changes:
+6 -1
View File
@@ -1,4 +1,4 @@
FROM debian:buster-slim
FROM ubuntu:cosmic
LABEL maintainer="wekan"
# Declare Arguments
@@ -75,6 +75,8 @@ ARG LDAP_SYNC_USER_DATA
ARG LDAP_SYNC_USER_DATA_FIELDMAP
ARG LDAP_SYNC_GROUP_ROLES
ARG LDAP_DEFAULT_DOMAIN
ARG LDAP_SYNC_ADMIN_STATUS
ARG LDAP_SYNC_ADMIN_GROUPS
ARG LOGOUT_WITH_TIMER
ARG LOGOUT_IN
ARG LOGOUT_ON_HOURS
@@ -159,6 +161,8 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
LDAP_SYNC_USER_DATA_FIELDMAP="" \
LDAP_SYNC_GROUP_ROLES="" \
LDAP_DEFAULT_DOMAIN="" \
LDAP_SYNC_ADMIN_STATUS="" \
LDAP_SYNC_ADMIN_GROUPS="" \
LOGOUT_WITH_TIMER=false \
LOGOUT_IN="" \
LOGOUT_ON_HOURS="" \
@@ -293,6 +297,7 @@ RUN \
gosu wekan:wekan /home/wekan/.meteor/meteor npm install && \
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs && \
chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v2.36.0"
appVersion: "v2.40.0"
files:
userUploads:
- README.md
+30
View File
@@ -133,6 +133,36 @@ template(name="boardVisibilityList")
i.fa.fa-check
span.sub-name {{_ 'public-desc'}}
template(name="boardChangeVisibilityPopup")
+boardVisibilityList
template(name="boardChangeWatchPopup")
ul.pop-over-list
li
with "watching"
a.js-select-watch
i.fa.fa-eye.colorful
| {{_ 'watching'}}
if watchCheck
i.fa.fa-check
span.sub-name {{_ 'watching-info'}}
li
with "tracking"
a.js-select-watch
i.fa.fa-bell.colorful
| {{_ 'tracking'}}
if watchCheck
i.fa.fa-check
span.sub-name {{_ 'tracking-info'}}
li
with "muted"
a.js-select-watch
i.fa.fa-bell-slash.colorful
| {{_ 'muted'}}
if watchCheck
i.fa.fa-check
span.sub-name {{_ 'muted-info'}}
template(name="createBoard")
form
label
+53
View File
@@ -1,3 +1,49 @@
Template.boardMenuPopup.events({
'click .js-rename-board': Popup.open('boardChangeTitle'),
'click .js-custom-fields'() {
Sidebar.setView('customFields');
Popup.close();
},
'click .js-open-archives'() {
Sidebar.setView('archives');
Popup.close();
},
'click .js-change-board-color': Popup.open('boardChangeColor'),
'click .js-change-language': Popup.open('changeLanguage'),
'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
currentBoard.archive();
// XXX We should have some kind of notification on top of the page to
// confirm that the board was successfully archived.
FlowRouter.go('home');
}),
'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
Popup.close();
Boards.remove(currentBoard._id);
FlowRouter.go('home');
}),
'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'),
'click .js-import-board': Popup.open('chooseBoardSource'),
'click .js-subtask-settings': Popup.open('boardSubtaskSettings'),
});
Template.boardMenuPopup.helpers({
exportUrl() {
const params = {
boardId: Session.get('currentBoard'),
};
const queryParams = {
authToken: Accounts._storedLoginToken(),
};
return FlowRouter.path('/api/boards/:boardId/export', params, queryParams);
},
exportFilename() {
const boardId = Session.get('currentBoard');
return `wekan-export-board-${boardId}.json`;
},
});
Template.boardChangeTitlePopup.events({
submit(evt, tpl) {
const newTitle = tpl.$('.js-board-name').val().trim();
@@ -35,8 +81,12 @@ BlazeComponent.extendComponent({
'click .js-star-board'() {
Meteor.user().toggleBoardStar(Session.get('currentBoard'));
},
'click .js-open-board-menu': Popup.open('boardMenu'),
'click .js-change-visibility': Popup.open('boardChangeVisibility'),
'click .js-watch-board': Popup.open('boardChangeWatch'),
'click .js-open-archived-board'() {
Modal.open('archivedBoards');
},
'click .js-toggle-board-view'() {
const currentUser = Meteor.user();
if (currentUser.profile.boardView === 'board-view-swimlanes') {
@@ -136,6 +186,9 @@ const CreateBoard = BlazeComponent.extendComponent({
this.setVisibility(this.currentData());
},
'click .js-change-visibility': this.toggleVisibilityMenu,
'click .js-import': Popup.open('boardImportBoard'),
submit: this.onSubmit,
'click .js-import-board': Popup.open('chooseBoardSource'),
'click .js-board-template': Popup.open('searchElement'),
}];
},
+7 -1
View File
@@ -67,7 +67,13 @@ BlazeComponent.extendComponent({
const nCards = MultiSelection.isActive() ? MultiSelection.count() : 1;
const sortIndex = calculateIndex(prevCardDom, nextCardDom, nCards);
const listId = Blaze.getData(ui.item.parents('.list').get(0))._id;
const swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id;
const currentBoard = Boards.findOne(Session.get('currentBoard'));
let swimlaneId = '';
const boardView = Meteor.user().profile.boardView;
if (boardView === 'board-view-swimlanes')
swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id;
else if ((boardView === 'board-view-lists') || (boardView === 'board-view-cal'))
swimlaneId = currentBoard.getDefaultSwimline()._id;
// Normally the jquery-ui sortable library moves the dragged DOM element
// to its new position, which disrupts Blaze reactive updates mechanism
+4 -4
View File
@@ -7,10 +7,10 @@ head
where the application is deployed with a path prefix, but it seems to be
difficult to do that cleanly with Blaze -- at least without adding extra
packages.
link(rel="shortcut icon" href="/public/wekan-favicon.png")
link(rel="apple-touch-icon" href="/public/wekan-favicon.png")
link(rel="mask-icon" href="/public/wekan-150.svg")
link(rel="manifest" href="/public/wekan-manifest.json")
link(rel="shortcut icon" href="/wekan-favicon.png")
link(rel="apple-touch-icon" href="/wekan-favicon.png")
link(rel="mask-icon" href="/wekan-150.svg")
link(rel="manifest" href="/wekan-manifest.json")
template(name="userFormsLayout")
section.auth-layout
-30
View File
@@ -56,36 +56,6 @@ template(name="membersWidget")
button.js-member-invite-accept.primary {{_ 'accept'}}
button.js-member-invite-decline {{_ 'decline'}}
template(name="boardChangeVisibilityPopup")
+boardVisibilityList
template(name="boardChangeWatchPopup")
ul.pop-over-list
li
with "watching"
a.js-select-watch
i.fa.fa-eye.colorful
| {{_ 'watching'}}
if watchCheck
i.fa.fa-check
span.sub-name {{_ 'watching-info'}}
li
with "tracking"
a.js-select-watch
i.fa.fa-bell.colorful
| {{_ 'tracking'}}
if watchCheck
i.fa.fa-check
span.sub-name {{_ 'tracking-info'}}
li
with "muted"
a.js-select-watch
i.fa.fa-bell-slash.colorful
| {{_ 'muted'}}
if watchCheck
i.fa.fa-check
span.sub-name {{_ 'muted-info'}}
template(name="boardChangeColorPopup")
.board-backgrounds-list.clearfix
each backgroundColors
+6
View File
@@ -501,6 +501,12 @@ services:
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#- LDAP_DEFAULT_DOMAIN=
#
# Enable/Disable syncing of admin status based on ldap groups:
#- LDAP_SYNC_ADMIN_STATUS=true
#
# Comma separated list of admin group names to sync.
#- LDAP_SYNC_ADMIN_GROUPS=group1,group2
#---------------------------------------------------------------------
# ==== LOGOUT TIMER, probably does not work yet ====
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
+22
View File
@@ -0,0 +1,22 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*~
# Various IDEs
.project
.idea/
*.tmproj
OWNERS
+13
View File
@@ -0,0 +1,13 @@
name: wekan
version: 1.0.0
appVersion: 2.x.x
kubeVersion: "^1.8.0-0"
description: Open Source kanban
home: https://wekan.github.io/
icon: https://wekan.github.io/wekan-logo.svg
sources:
- https://github.com/wekan/wekan
maintainers:
- name: technotaff
email: github@randall.cc
engine: gotpl
+4
View File
@@ -0,0 +1,4 @@
approvers:
- technotaff
reviewers:
- technotaff
+58
View File
@@ -0,0 +1,58 @@
# Helm Chart for Wekan
## Features
o Uses a MongoDB replica set by default - this allows fault-tolerant
and scalable MongoDB deployment (or just set the replicas to 1 for
a single server install)
o Optional Horizontal Pod Autoscaler (HPA), so that your Wekan pods
will scale automatically with increased CPU load.
## The configurable values (values.yaml)
Scaling Wekan:
```yaml
## Configuration for wekan component
##
replicaCount: 1
```
**replicaCount** Will set the initial number of replicas for the Wekan pod (and container)
```yaml
## Configure an horizontal pod autoscaler
##
autoscaling:
enabled: true
config:
minReplicas: 1
maxReplicas: 16
## Note: when setting this, a `resources.request.cpu` is required. You
## likely want to set it to `1` or some lower value.
##
targetCPUUtilizationPercentage: 80
```
This section (if *enabled* is set to **true**) will enable the Kubernetes Horizontal Pod Autoscaler (HPA).
**minReplicas:** this is the minimum number of pods to scale down to (We recommend setting this to the same value as **replicaCount**).
**maxReplicas:** this is the maximum number of pods to scale up to.
**targetCPUUtilizationPercentage:** This is the CPU at which the HPA will scale-out the number of Wekan pods.
```yaml
mongodb-replicaset:
enabled: true
replicas: 3
replicaSetName: rs0
securityContext:
runAsUser: 1000
fsGroup: 1000
runAsNonRoot: true
```
This section controls the scale of the MongoDB redundant Replica Set.
**replicas:** This is the number of MongoDB instances to include in the set. You can set this to 1 for a single server - this will still allow you to scale-up later with a helm upgrade.
+1
View File
@@ -0,0 +1 @@
+5
View File
@@ -0,0 +1,5 @@
dependencies:
- name: mongodb-replicaset
version: 3.6.x
repository: "https://kubernetes-charts.storage.googleapis.com/"
condition: mongodb-replicaset.enabled
+19
View File
@@ -0,0 +1,19 @@
1. Get the application URL by running these commands:
{{- if .Values.ingress.enabled }}
{{- range .Values.ingress.hosts }}
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }}
{{- end }}
{{- else if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "wekan.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get svc -w {{ template "wekan.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "wekan.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }}
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "wekan.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl port-forward $POD_NAME 8080:8080
{{- end }}
+82
View File
@@ -0,0 +1,82 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "wekan.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "wekan.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{/*
Create a default fully qualified name for the wekan data app.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "wekan.localdata.fullname" -}}
{{- if .Values.localdata.fullnameOverride -}}
{{- .Values.localdata.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- printf "%s-localdata" .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s-localdata" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "wekan.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create the name of the service account to use for the api component
*/}}
{{- define "wekan.serviceAccountName" -}}
{{- if .Values.serviceAccounts.create -}}
{{ default (include "wekan.fullname" .) .Values.serviceAccounts.name }}
{{- else -}}
{{ default "default" .Values.serviceAccounts.name }}
{{- end -}}
{{- end -}}
{{/*
Create a default fully qualified mongodb-replicaset name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "wekan.mongodb-replicaset.fullname" -}}
{{- $name := default "mongodb-replicaset" (index .Values "mongodb-replicaset" "nameOverride") -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create the MongoDB URL. If MongoDB is installed as part of this chart, use k8s service discovery,
else use user-provided URL.
*/}}
{{- define "mongodb-replicaset.url" -}}
{{- if (index .Values "mongodb-replicaset" "enabled") -}}
{{- $count := (int (index .Values "mongodb-replicaset" "replicas")) -}}
{{- $release := .Release.Name -}}
mongodb://{{- range $v := until $count }}{{ $release }}-mongodb-replicaset-{{ $v }}.{{ $release }}-mongodb-replicaset:27017{{ if ne $v (sub $count 1) }},{{- end -}}{{- end -}}?replicaSet={{ index .Values "mongodb-replicaset" "replicaSetName" }}
{{- else -}}
{{- index .Values "mongodb-replicaset" "url" -}}
{{- end -}}
{{- end -}}
+58
View File
@@ -0,0 +1,58 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ template "wekan.fullname" . }}
labels:
app: {{ template "wekan.name" . }}
chart: {{ template "wekan.chart" . }}
component: wekan
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ template "wekan.name" . }}
component: wekan
release: {{ .Release.Name }}
template:
metadata:
annotations:
labels:
app: {{ template "wekan.name" . }}
component: wekan
release: {{ .Release.Name }}
spec:
serviceAccountName: {{ template "wekan.serviceAccountName" . }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
terminationMessagePolicy: FallbackToLogsOnError
ports:
- name: http
containerPort: 8080
env:
- name: ROOT_URL
value: {{ .Values.root_url | default "https://wekan.local" | quote }}
- name: MONGO_URL
value: "{{ template "mongodb-replicaset.url" . }}"
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
resources:
{{ toYaml .Values.resources | indent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{ toYaml . | indent 8 }}
{{- end }}
{{- if .Values.affinity }}
affinity:
{{ toYaml .Values.affinity | indent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{ toYaml . | indent 8 }}
{{- end }}
+18
View File
@@ -0,0 +1,18 @@
{{- if .Values.autoscaling.enabled -}}
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: {{ template "wekan.fullname" . }}
labels:
app: {{ template "wekan.name" . }}
chart: {{ template "wekan.chart" . }}
component: wekan
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ template "wekan.fullname" . }}
{{ toYaml .Values.autoscaling.config | indent 2 }}
{{- end -}}
+40
View File
@@ -0,0 +1,40 @@
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "wekan.fullname" . -}}
{{- $servicePort := .Values.service.port -}}
{{- $ingressPath := .Values.ingress.path -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ $fullName }}
labels:
app: {{ template "wekan.name" . }}
chart: {{ template "wekan.chart" . }}
component: wekan
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
{{- with .Values.ingress.annotations }}
annotations:
{{ toYaml . | indent 4 }}
{{- end }}
spec:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ . }}
http:
paths:
- path: {{ $ingressPath }}
backend:
serviceName: {{ $fullName }}
servicePort: http
{{- end }}
{{- end }}
+14
View File
@@ -0,0 +1,14 @@
apiVersion: v1
kind: Secret
metadata:
name: {{ template "wekan.fullname" . }}
labels:
app: {{ template "wekan.name" . }}
chart: {{ template "wekan.chart" . }}
component: wekan
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
type: Opaque
data:
accessKey: {{ .Values.credentials.accessKey | b64enc }}
secretKey: {{ .Values.credentials.secretKey | b64enc }}
+25
View File
@@ -0,0 +1,25 @@
apiVersion: v1
kind: Service
metadata:
{{- if .Values.service.annotations }}
annotations:
{{ toYaml .Values.service.annotations | indent 4 }}
{{- end }}
name: {{ template "wekan.fullname" . }}
labels:
app: {{ template "wekan.name" . }}
chart: {{ template "wekan.chart" . }}
component: wekan
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
app: {{ template "wekan.name" . }}
component: wekan
release: {{ .Release.Name }}
+12
View File
@@ -0,0 +1,12 @@
{{- if .Values.serviceAccounts.create }}
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: {{ template "wekan.name" . }}
chart: {{ template "wekan.chart" . }}
component: wekan
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
name: {{ template "wekan.serviceAccountName" . }}
{{- end }}
@@ -0,0 +1,27 @@
apiVersion: v1
kind: Pod
metadata:
name: {{ template "wekan.fullname" . }}-test
annotations:
"helm.sh/hook": test-success
spec:
containers:
- name: {{ template "wekan.fullname" . }}-test
imagePullPolicy: IfNotPresent
image: "docker.io/mesosphere/aws-cli:1.14.5"
command:
- sh
- -c
- aws s3 --endpoint-url=http://{{ include "wekan.fullname" . }} --region=us-east-1 ls
env:
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: {{ template "wekan.fullname" . }}
key: accessKey
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: {{ template "wekan.fullname" . }}
key: secretKey
restartPolicy: Never
+110
View File
@@ -0,0 +1,110 @@
# ------------------------------------------------------------------------------
# Wekan:
# ------------------------------------------------------------------------------
## Define serviceAccount names to create or use. Defaults to component's fully
## qualified name.
##
serviceAccounts:
create: true
name: ""
## Wekan image configuration
##
image:
repository: quay.io/wekan/wekan
tag: latest
pullPolicy: IfNotPresent
## Configuration for wekan component
##
replicaCount: 1
## Specify wekan credentials
##
credentials:
accessKey: access-key
secretKey: secret-key
## Specify additional environmental variables for the Deployment
##
env: {}
service:
type: NodePort
port: 80
annotations: {}
# prometheus.io/scrape: "true"
# prometheus.io/port: "8000"
# prometheus.io/path: "/_/monitoring/metrics"
## Comma-separated string of allowed virtual hosts for external access.
## This should match the ingress hosts
##
endpoint: wekan.local
ingress:
enabled: true
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
path: /*
# This must match 'endpoint', unless your client supports different
# hostnames.
hosts: [ wekan.local ]
# - wekan.local
tls: []
# - secretName: wekan-example-tls
# hosts:
# - wekan-example.local
resources:
requests:
memory: 128Mi
cpu: 300m
limits:
memory: 1Gi
cpu: 500m
## Node labels for pod assignment
## ref: https://kubernetes.io/docs/user-guide/node-selection/
##
nodeSelector: {}
## Tolerations for pod assignment
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
##
tolerations: []
## Affinity for pod assignment
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
##
affinity: {}
## Configure an horizontal pod autoscaler
##
autoscaling:
enabled: true
config:
minReplicas: 1
maxReplicas: 16
## Note: when setting this, a `resources.request.cpu` is required. You
## likely want to set it to `1` or some lower value.
##
targetCPUUtilizationPercentage: 80
# ------------------------------------------------------------------------------
# MongoDB:
# ------------------------------------------------------------------------------
mongodb-replicaset:
enabled: true
replicas: 3
replicaSetName: rs0
securityContext:
runAsUser: 1000
fsGroup: 1000
runAsNonRoot: true
#image:
# tag: 3.2.21
+43 -43
View File
@@ -1,37 +1,37 @@
{
"accept": "Přijmout",
"act-activity-notify": "Notifikace aktivit",
"act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createBoard": "created board __board__",
"act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createList": "added list __list__ to board __board__",
"act-addBoardMember": "added member __member__ to board __board__",
"act-archivedBoard": "Board __board__ moved to Archive",
"act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
"act-importBoard": "imported board __board__",
"act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
"act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-moveCard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-removeBoardMember": "removed member __member__ from board __board__",
"act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addAttachment": "přidal(a) přílohu __attachment__ na kartu __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-deleteAttachment": "smazal(a) přílohu __attachment__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-addSubtask": "přidal(a) podúkol __subtask__ na kartu __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-addLabel": "Přídán štítek __label__ na kartu __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-removeLabel": "Odstraněn štítek __label__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-addChecklist": "přidal(a) zaškrtávací seznam __checklist__ na kartu __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-addChecklistItem": "přidal(a) položku zaškrtávacího seznamu __checklistItem__ do zaškrtávacího seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-removeChecklist": "smazal(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-removeChecklistItem": "smazal(a) položku zaškrtávacího seznamu __checklistItem__ ze zaškrtávacího seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-checkedItem": "zaškrtl(a) __checklistItem__ na zaškrtávacím seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-uncheckedItem": "zrušil(a) zaškrtnutí __checklistItem__ na zaškrtávacím seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-completeChecklist": "dokončil(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-uncompleteChecklist": "zrušil(a) dokončení zaškrtávacího seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-addComment": "přidal(a) komentář na kartě __card__: __comment__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-createBoard": "přidal(a) tablo __board__",
"act-createCard": "přidal(a) kartu __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
"act-createCustomField": "vytvořil(a) vlastní pole __customField__ na kartu __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
"act-createList": "přidal(a) sloupec __list__ do tabla __board__",
"act-addBoardMember": "přidal(a) člena __member__ do tabla __board__",
"act-archivedBoard": "Tablo __board__ přesunuto do Archivu",
"act-archivedCard": "Karta __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__ přesunuta do Archivu",
"act-archivedList": "Sloupec __list__ ve swimlane __swimlane__ na tablu __board__ přesunut do Archivu",
"act-archivedSwimlane": "Swimlane __swimlane__ na tablu __board__ přesunut do Archivu",
"act-importBoard": "importoval(a) tablo __board__",
"act-importCard": "importoval(a) karta __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
"act-importList": "importoval(a) sloupec __list__ do swimlane __swimlane__ na tablu __board__",
"act-joinMember": "přidal(a) člena __member__ na kartu __card__ v seznamu __list__ ve swimlane __swimlane__ na tablu __board__",
"act-moveCard": "přesunul(a) kartu __card__ ze sloupce __oldList__ ve swimlane __oldSwimlane__ na tablu __oldBoard__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
"act-removeBoardMember": "odstranil(a) člena __member__ z tabla __board__",
"act-restoredCard": "obnovil(a) kartu __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
"act-unjoinMember": "odstranil(a) člena __member__ z karty __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Akce",
@@ -56,14 +56,14 @@
"activity-unchecked-item": "nedokončen %s v seznamu %s z %s",
"activity-checklist-added": "přidán checklist do %s",
"activity-checklist-removed": "odstraněn checklist z %s",
"activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-completed": "dokončil(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"activity-checklist-uncompleted": "nedokončen seznam %s z %s",
"activity-checklist-item-added": "přidána položka checklist do '%s' v %s",
"activity-checklist-item-removed": "odstraněna položka seznamu do '%s' v %s",
"add": "Přidat",
"activity-checked-item-card": "dokončen %s v seznamu %s",
"activity-unchecked-item-card": "nedokončen %s v seznamu %s",
"activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-completed-card": "dokončil(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"activity-checklist-uncompleted-card": "nedokončený seznam %s",
"add-attachment": "Přidat přílohu",
"add-board": "Přidat tablo",
@@ -121,7 +121,7 @@
"boardChangeTitlePopup-title": "Přejmenovat tablo",
"boardChangeVisibilityPopup-title": "Upravit viditelnost",
"boardChangeWatchPopup-title": "Změnit sledování",
"boardMenuPopup-title": "Board Settings",
"boardMenuPopup-title": "Nastavení Tabla",
"boards": "Tabla",
"board-view": "Náhled tabla",
"board-view-cal": "Kalendář",
@@ -181,21 +181,21 @@
"close-board-pop": "Budete moci obnovit tablo kliknutím na tlačítko \"Archiv\" v hlavním menu.",
"color-black": "černá",
"color-blue": "modrá",
"color-crimson": "crimson",
"color-darkgreen": "darkgreen",
"color-crimson": "karmínová",
"color-darkgreen": "tmavě zelená",
"color-gold": "zlatá",
"color-gray": "šedá",
"color-green": "zelená",
"color-indigo": "indigo",
"color-lime": "světlezelená",
"color-magenta": "magenta",
"color-magenta": "purpurová",
"color-mistyrose": "mistyrose",
"color-navy": "tmavě modrá",
"color-orange": "oranžová",
"color-paleturquoise": "paleturquoise",
"color-peachpuff": "peachpuff",
"color-pink": "růžová",
"color-plum": "plum",
"color-plum": "švestková",
"color-purple": "fialová",
"color-red": "červená",
"color-saddlebrown": "saddlebrown",
@@ -350,7 +350,7 @@
"set-color-list": "Nastavit barvu",
"listActionPopup-title": "Vypsat akce",
"swimlaneActionPopup-title": "Akce swimlane",
"swimlaneAddPopup-title": "Add a Swimlane below",
"swimlaneAddPopup-title": "Přidat swimlane dolů",
"listImportCardPopup-title": "Importovat Trello kartu",
"listMorePopup-title": "Více",
"link-list": "Odkaz na tento sloupec",
@@ -465,9 +465,9 @@
"welcome-swimlane": "Milník 1",
"welcome-list1": "Základní",
"welcome-list2": "Pokročilé",
"card-templates-swimlane": "Card Templates",
"list-templates-swimlane": "List Templates",
"board-templates-swimlane": "Board Templates",
"card-templates-swimlane": "Šablony Karty",
"list-templates-swimlane": "Šablony Sloupce",
"board-templates-swimlane": "Šablony Tabla",
"what-to-do": "Co chcete dělat?",
"wipLimitErrorPopup-title": "Neplatný WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "Počet úkolů v tomto sloupci je vyšší než definovaný WIP limit.",
@@ -550,7 +550,7 @@
"subtask-settings": "Nastavení podúkolů",
"boardSubtaskSettingsPopup-title": "Nastavení podúkolů tabla",
"show-subtasks-field": "Karty mohou mít podúkoly",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-board": "Vložit podúkoly do tohoto tabla",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Ukázat předka na minikartě",
"prefix-with-full-path": "Prefix s celou cestou",
+1 -1
View File
@@ -28,7 +28,7 @@
"act-importCard": "importiert Karte __card__ auf der Liste __list__ bei Swimlane __swimlane__ in Board __board__ ",
"act-importList": "importiert Liste __list__ bei Swimlane __swimlane__ in Board __board__ ",
"act-joinMember": "fügt Mitglied __member__ der Karte __card__ auf der Liste __list__ bei Swimlane __swimlane__ an Board __board__ hinzu",
"act-moveCard": "verschiebe Karte __card__ von Liste __oldList__ von Swimlane __oldSwimlane__ von Board __oldBoard__ nach Liste __list__ in Swimlane __swimlane__ zu Board __board__",
"act-moveCard": "verschiebt Karte __card__ von Liste __oldList__ von Swimlane __oldSwimlane__ von Board __oldBoard__ nach Liste __list__ in Swimlane __swimlane__ zu Board __board__",
"act-removeBoardMember": "entfernte Mitglied __member__ vom Board __board__",
"act-restoredCard": "wiederherstellte Karte __card__ auf der Liste __list__ bei Swimlane __swimlane__ an Board __board__",
"act-unjoinMember": "entfernte Mitglied __member__ von Karte __card__ auf der Liste __list__ bei Swimlane __swimlane__ an Board __board__",
+38 -38
View File
@@ -1,37 +1,37 @@
{
"accept": "Aceptar",
"act-activity-notify": "Notificación de actividad",
"act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createBoard": "created board __board__",
"act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createList": "added list __list__ to board __board__",
"act-addBoardMember": "added member __member__ to board __board__",
"act-archivedBoard": "Board __board__ moved to Archive",
"act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
"act-importBoard": "imported board __board__",
"act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
"act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-moveCard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-removeBoardMember": "removed member __member__ from board __board__",
"act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addAttachment": "añadido el adjunto __attachment__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-deleteAttachment": "eliminado el adjunto __attachment__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-addSubtask": "añadida la subtarea __subtask__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-addLabel": "añadida la etiqueta __label__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-removeLabel": "eliminada la etiqueta __label__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-addChecklist": "añadida la lista de verificación __checklist__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-addChecklistItem": "añadido el elemento __checklistItem__ a la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-removeChecklist": "eliminada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-removeChecklistItem": "eliminado el elemento __checklistItem__ de la lista de verificación __checkList__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-checkedItem": "marcado el elemento __checklistItem__ de la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-uncheckedItem": "desmarcado el elemento __checklistItem__ de la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-completeChecklist": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-uncompleteChecklist": "no completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-addComment": "comentario en la tarjeta__card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-createBoard": "creado el tablero __board__",
"act-createCard": "creada la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-createCustomField": "creado el campo personalizado __customField__ en la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-createList": "añadida la lista __list__ al tablero __board__",
"act-addBoardMember": "añadido el mimbro __member__ al tablero __board__",
"act-archivedBoard": "El tablero __board__ se ha movido a Archivo",
"act-archivedCard": "La tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__ se ha movido a Archivo",
"act-archivedList": "La lista __list__ del carril __swimlane__ del tablero __board__ se ha movido a Archivo",
"act-archivedSwimlane": "El carril __swimlane__ del tablero __board__ se ha movido a Archivo",
"act-importBoard": "importado el tablero __board__",
"act-importCard": "importada la tarjeta __card__ a la lista __list__ del carrril __swimlane__ del tablero __board__",
"act-importList": "importada la lista __list__ al carril __swimlane__ del tablero __board__",
"act-joinMember": "añadido el miembro __member__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-moveCard": "movida la tarjeta __card__ de la lista __oldList__ del carril __oldSwimlane__ del tablero __oldBoard__ a la lista __list__ del carril __swimlane__ del tablero __board__",
"act-removeBoardMember": "eliminado el miembro __member__ del tablero __board__",
"act-restoredCard": "restaurada la tarjeta __card__ a la lista __list__ del carril __swimlane__ del tablero __board__",
"act-unjoinMember": "eliminado el miembro __member__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Acciones",
@@ -56,14 +56,14 @@
"activity-unchecked-item": "desmarcado %s en lista %s de %s",
"activity-checklist-added": "ha añadido una lista de verificación a %s",
"activity-checklist-removed": "eliminada una lista de verificación desde %s ",
"activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-completed": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"activity-checklist-uncompleted": "no completado la lista %s de %s",
"activity-checklist-item-added": "ha añadido el elemento de la lista de verificación a '%s' en %s",
"activity-checklist-item-removed": "eliminado un elemento de la lista de verificación desde '%s' en %s",
"add": "Añadir",
"activity-checked-item-card": "marcado %s en la lista de verificación %s",
"activity-unchecked-item-card": "desmarcado %s en la lista de verificación %s",
"activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-completed-card": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"activity-checklist-uncompleted-card": "no completó la lista de verificación %s",
"add-attachment": "Añadir adjunto",
"add-board": "Añadir tablero",
@@ -243,7 +243,7 @@
"decline": "Declinar",
"default-avatar": "Avatar por defecto",
"delete": "Eliminar",
"deleteCustomFieldPopup-title": "¿Borrar el campo personalizado?",
"deleteCustomFieldPopup-title": "¿Eliminar el campo personalizado?",
"deleteLabelPopup-title": "¿Eliminar la etiqueta?",
"description": "Descripción",
"disambiguateMultiLabelPopup-title": "Desambiguar la acción de etiqueta",
@@ -542,8 +542,8 @@
"requested-by": "Solicitado por",
"board-delete-notice": "Se eliminarán todas las listas, tarjetas y acciones asociadas a este tablero. Esta acción no puede deshacerse.",
"delete-board-confirm-popup": "Se eliminarán todas las listas, tarjetas, etiquetas y actividades, y no podrás recuperar los contenidos del tablero. Esta acción no puede deshacerse.",
"boardDeletePopup-title": "¿Borrar el tablero?",
"delete-board": "Borrar el tablero",
"boardDeletePopup-title": "¿Eliminar el tablero?",
"delete-board": "Eliminar el tablero",
"default-subtasks-board": "Subtareas para el tablero __board__",
"default": "Por defecto",
"queue": "Cola",
@@ -563,10 +563,10 @@
"no-parent": "No mostrar la tarjeta padre",
"activity-added-label": "añadida etiqueta %s a %s",
"activity-removed-label": "eliminada etiqueta '%s' desde %s",
"activity-delete-attach": "borrado un adjunto desde %s",
"activity-delete-attach": "eliminado un adjunto desde %s",
"activity-added-label-card": "añadida etiqueta '%s'",
"activity-removed-label-card": "eliminada etiqueta '%s'",
"activity-delete-attach-card": "borrado un adjunto",
"activity-delete-attach-card": "eliminado un adjunto",
"r-rule": "Regla",
"r-add-trigger": "Añadir disparador",
"r-add-action": "Añadir acción",
+42 -42
View File
@@ -75,11 +75,11 @@
"add-cover": "Ajouter la couverture",
"add-label": "Ajouter une étiquette",
"add-list": "Ajouter une liste",
"add-members": "Assigner des membres",
"add-members": "Assigner des participants",
"added": "Ajouté le",
"addMemberPopup-title": "Membres",
"addMemberPopup-title": "Participants",
"admin": "Admin",
"admin-desc": "Peut voir et éditer les cartes, supprimer des membres et changer les paramètres du tableau.",
"admin-desc": "Peut voir et éditer les cartes, supprimer des participants et changer les paramètres du tableau.",
"admin-announcement": "Annonce",
"admin-announcement-active": "Annonce destinée à tous",
"admin-announcement-title": "Annonce de l'administrateur",
@@ -103,7 +103,7 @@
"archives": "Archiver",
"template": "Modèle",
"templates": "Modèles",
"assign-member": "Affecter un membre",
"assign-member": "Affecter un participant",
"attached": "joint",
"attachment": "Pièce jointe",
"attachment-delete-pop": "La suppression d'une pièce jointe est définitive. Elle ne peut être annulée.",
@@ -141,9 +141,9 @@
"card-edit-attachments": "Modifier les pièces jointes",
"card-edit-custom-fields": "Éditer les champs personnalisés",
"card-edit-labels": "Gérer les étiquettes",
"card-edit-members": "Gérer les membres",
"card-edit-members": "Gérer les participants",
"card-labels-title": "Modifier les étiquettes de la carte.",
"card-members-title": "Ajouter ou supprimer des membres à la carte.",
"card-members-title": "Assigner ou supprimer des participants à la carte.",
"card-start": "Début",
"card-start-on": "Commence le",
"cardAttachmentsPopup-title": "Ajouter depuis",
@@ -152,7 +152,7 @@
"cardDeletePopup-title": "Supprimer la carte ?",
"cardDetailsActionsPopup-title": "Actions sur la carte",
"cardLabelsPopup-title": "Étiquettes",
"cardMembersPopup-title": "Membres",
"cardMembersPopup-title": "Participants",
"cardMorePopup-title": "Plus",
"cardTemplatePopup-title": "Créer un modèle",
"cards": "Cartes",
@@ -247,7 +247,7 @@
"deleteLabelPopup-title": "Supprimer l'étiquette ?",
"description": "Description",
"disambiguateMultiLabelPopup-title": "Préciser l'action sur l'étiquette",
"disambiguateMultiMemberPopup-title": "Préciser l'action sur le membre",
"disambiguateMultiMemberPopup-title": "Préciser l'action sur le participant",
"discard": "Mettre à la corbeille",
"done": "Fait",
"download": "Télécharger",
@@ -263,13 +263,13 @@
"editLabelPopup-title": "Modifier l'étiquette",
"editNotificationPopup-title": "Modifier la notification",
"editProfilePopup-title": "Modifier le profil",
"email": "Email",
"email": "E-mail",
"email-enrollAccount-subject": "Un compte a été créé pour vous sur __siteName__",
"email-enrollAccount-text": "Bonjour __user__,\n\nPour commencer à utiliser ce service, il suffit de cliquer sur le lien ci-dessous.\n\n__url__\n\nMerci.",
"email-fail": "Échec de l'envoi du courriel.",
"email-fail-text": "Une erreur est survenue en tentant d'envoyer l'email",
"email-invalid": "Adresse email incorrecte.",
"email-invite": "Inviter par email",
"email-invalid": "Adresse e-mail incorrecte.",
"email-invite": "Inviter par e-mail",
"email-invite-subject": "__inviter__ vous a envoyé une invitation",
"email-invite-text": "Cher __user__,\n\n__inviter__ vous invite à rejoindre le tableau \"__board__\" pour collaborer.\n\nVeuillez suivre le lien ci-dessous :\n\n__url__\n\nMerci.",
"email-resetPassword-subject": "Réinitialiser votre mot de passe sur __siteName__",
@@ -280,7 +280,7 @@
"enable-wip-limit": "Activer la limite WIP",
"error-board-doesNotExist": "Ce tableau n'existe pas",
"error-board-notAdmin": "Vous devez être administrateur de ce tableau pour faire cela",
"error-board-notAMember": "Vous devez être membre de ce tableau pour faire cela",
"error-board-notAMember": "Vous devez être participant de ce tableau pour faire cela",
"error-json-malformed": "Votre texte JSON n'est pas valide",
"error-json-schema": "Vos données JSON ne contiennent pas l'information appropriée dans un format correct",
"error-list-doesNotExist": "Cette liste n'existe pas",
@@ -294,7 +294,7 @@
"filter-cards": "Filtrer les cartes",
"filter-clear": "Supprimer les filtres",
"filter-no-label": "Aucune étiquette",
"filter-no-member": "Aucun membre",
"filter-no-member": "Aucun participant",
"filter-no-custom-fields": "Pas de champs personnalisés",
"filter-on": "Le filtre est actif",
"filter-on-desc": "Vous êtes en train de filtrer les cartes sur ce tableau. Cliquez ici pour modifier les filtres.",
@@ -310,9 +310,9 @@
"link": "Lien",
"import-board": "importer un tableau",
"import-board-c": "Importer un tableau",
"import-board-title-trello": "Importer le tableau depuis Trello",
"import-board-title-wekan": "Importer le tableau depuis l'export précédent",
"import-sandstorm-backup-warning": "Ne supprimez pas les données que vous importez du tableau exporté d'origine ou de Trello avant de vérifier que la graine peut se fermer et s'ouvrir à nouveau, ou qu'une erreur \"Tableau introuvable\" survient, sinon vous perdrez vos données.",
"import-board-title-trello": "Importer un tableau depuis Trello",
"import-board-title-wekan": "Importer un tableau depuis un export précédent",
"import-sandstorm-backup-warning": "Ne supprimez pas les données que vous importez d'un tableau exporté d'origine ou de Trello avant de vérifier que la graine peut se fermer et s'ouvrir à nouveau ou qu'une erreur \"Tableau introuvable\" survient, sinon vous perdrez vos données.",
"import-sandstorm-warning": "Le tableau importé supprimera toutes les données du tableau et les remplacera avec celles du tableau importé.",
"from-trello": "Depuis Trello",
"from-wekan": "Depuis un export précédent",
@@ -320,15 +320,15 @@
"import-board-instruction-wekan": "Dans votre tableau, allez dans 'Menu', puis 'Exporter un tableau', et copier le texte du fichier téléchargé.",
"import-board-instruction-about-errors": "Si une erreur survient en important le tableau, il se peut que l'import ait fonctionné, et que le tableau se trouve sur la page \"Tous les tableaux\".",
"import-json-placeholder": "Collez ici les données JSON valides",
"import-map-members": "Faire correspondre aux membres",
"import-members-map": "Le tableau que vous venez d'importer contient des membres. Veuillez associer les membres que vous souhaitez importer à vos utilisateurs.",
"import-show-user-mapping": "Contrôler l'association des membres",
"import-user-select": "Sélectionnez l'utilisateur existant que vous voulez associer à ce membre",
"importMapMembersAddPopup-title": "Sélectionner le membre",
"import-map-members": "Assigner des participants",
"import-members-map": "Le tableau que vous venez d'importer contient des participants. Veuillez assigner les participants que vous souhaitez importer à vos utilisateurs.",
"import-show-user-mapping": "Contrôler l'assignation des participants",
"import-user-select": "Sélectionnez l'utilisateur existant que vous voulez associer à ce participant",
"importMapMembersAddPopup-title": "Sélectionner le participant",
"info": "Version",
"initials": "Initiales",
"invalid-date": "Date invalide",
"invalid-time": "Temps invalide",
"invalid-time": "Heure invalide",
"invalid-user": "Utilisateur invalide",
"joined": "a rejoint",
"just-invited": "Vous venez d'être invité à ce tableau",
@@ -354,15 +354,15 @@
"listImportCardPopup-title": "Importer une carte Trello",
"listMorePopup-title": "Plus",
"link-list": "Lien vers cette liste",
"list-delete-pop": "Toutes les actions seront supprimées du fil d'activité et il ne sera plus possible de les récupérer. Cette action ne peut pas être annulée.",
"list-delete-pop": "Toutes les actions seront supprimées du fil d'activité et il ne sera plus possible de les récupérer. Cette action est irréversible.",
"list-delete-suggest-archive": "Vous pouvez archiver une liste pour l'enlever du tableau tout en conservant son activité.",
"lists": "Listes",
"swimlanes": "Couloirs",
"log-out": "Déconnexion",
"log-in": "Connexion",
"loginPopup-title": "Connexion",
"memberMenuPopup-title": "Préférence de membre",
"members": "Membres",
"memberMenuPopup-title": "Préférence du participant",
"members": "Participants",
"menu": "Menu",
"move-selection": "Déplacer la sélection",
"moveCardPopup-title": "Déplacer la carte",
@@ -382,7 +382,7 @@
"normal": "Normal",
"normal-desc": "Peut voir et modifier les cartes. Ne peut pas changer les paramètres.",
"not-accepted-yet": "L'invitation n'a pas encore été acceptée",
"notify-participate": "Recevoir les mises à jour de toutes les cartes auxquelles vous participez en tant que créateur ou que membre ",
"notify-participate": "Recevoir les mises à jour de toutes les cartes auxquelles vous participez en tant que créateur ou que participant ",
"notify-watch": "Recevoir les mises à jour de tous les tableaux, listes ou cartes que vous suivez",
"optional": "optionnel",
"or": "ou",
@@ -404,10 +404,10 @@
"remove-from-board": "Retirer du tableau",
"remove-label": "Retirer l'étiquette",
"listDeletePopup-title": "Supprimer la liste ?",
"remove-member": "Supprimer le membre",
"remove-member": "Supprimer le participant",
"remove-member-from-card": "Supprimer de la carte",
"remove-member-pop": "Supprimer __name__ (__username__) de __boardTitle__ ? Ce membre sera supprimé de toutes les cartes du tableau et recevra une notification.",
"removeMemberPopup-title": "Supprimer le membre ?",
"remove-member-pop": "Supprimer __name__ (__username__) de __boardTitle__ ? Ce participant sera supprimé de toutes les cartes du tableau et recevra une notification.",
"removeMemberPopup-title": "Supprimer le participant ?",
"rename": "Renommer",
"rename-board": "Renommer le tableau",
"restore": "Restaurer",
@@ -421,13 +421,13 @@
"setWipLimitPopup-title": "Définir la limite WIP",
"shortcut-assign-self": "Affecter cette carte à vous-même",
"shortcut-autocomplete-emoji": "Auto-complétion des emoji",
"shortcut-autocomplete-members": "Auto-complétion des membres",
"shortcut-autocomplete-members": "Auto-complétion des participants",
"shortcut-clear-filters": "Retirer tous les filtres",
"shortcut-close-dialog": "Fermer la boîte de dialogue",
"shortcut-filter-my-cards": "Filtrer mes cartes",
"shortcut-show-shortcuts": "Afficher cette liste de raccourcis",
"shortcut-toggle-filterbar": "Afficher/Cacher la barre latérale des filtres",
"shortcut-toggle-sidebar": "Afficher/Cacher la barre latérale du tableau",
"shortcut-toggle-filterbar": "Afficher/Masquer la barre latérale des filtres",
"shortcut-toggle-sidebar": "Afficher/Masquer la barre latérale du tableau",
"show-cards-minimum-count": "Afficher le nombre de cartes si la liste en contient plus de ",
"sidebar-open": "Ouvrir le panneau",
"sidebar-close": "Fermer le panneau",
@@ -447,9 +447,9 @@
"time": "Temps",
"title": "Titre",
"tracking": "Suivi",
"tracking-info": "Vous serez notifié de toute modification concernant les cartes pour lesquelles vous êtes impliqué en tant que créateur ou membre.",
"tracking-info": "Vous serez notifié de toute modification concernant les cartes pour lesquelles vous êtes impliqué en tant que créateur ou participant.",
"type": "Type",
"unassign-member": "Retirer le membre",
"unassign-member": "Retirer le participant",
"unsaved-description": "Vous avez une description non sauvegardée",
"unwatch": "Arrêter de suivre",
"upload": "Télécharger",
@@ -480,7 +480,7 @@
"invite": "Inviter",
"invite-people": "Inviter une personne",
"to-boards": "Au(x) tableau(x)",
"email-addresses": "Adresses email",
"email-addresses": "Adresses mail",
"smtp-host-description": "L'adresse du serveur SMTP qui gère vos mails.",
"smtp-port-description": "Le port des mails sortants du serveur SMTP.",
"smtp-tls-description": "Activer la gestion de TLS sur le serveur SMTP",
@@ -494,7 +494,7 @@
"invitation-code": "Code d'invitation",
"email-invite-register-subject": "__inviter__ vous a envoyé une invitation",
"email-invite-register-text": "Cher __user__,\n\n__inviter__ vous invite à le rejoindre sur le tableau kanban pour collaborer.\n\nVeuillez suivre le lien ci-dessous :\n__url__\n\nVotre code d'invitation est : __icode__\n\nMerci.",
"email-smtp-test-subject": "Email de test SMTP",
"email-smtp-test-subject": "E-mail de test SMTP",
"email-smtp-test-text": "Vous avez envoyé un mail avec succès",
"error-invitation-code-not-exist": "Ce code d'invitation n'existe pas.",
"error-notAuthorized": "Vous n'êtes pas autorisé à accéder à cette page.",
@@ -592,8 +592,8 @@
"r-when-a-label-is": "Quand une étiquette est",
"r-when-the-label-is": "Quand l'étiquette est",
"r-list-name": "Nom de la liste",
"r-when-a-member": "Quand un membre est",
"r-when-the-member": "Quand le membre",
"r-when-a-member": "Quand un participant est",
"r-when-the-member": "Quand le participant",
"r-name": "nom",
"r-when-a-attach": "Quand une pièce jointe",
"r-when-a-checklist": "Quand une checklist est",
@@ -614,7 +614,7 @@
"r-add": "Ajouter",
"r-remove": "Supprimer",
"r-label": "étiquette",
"r-member": "membre",
"r-member": "participant",
"r-remove-all": "Supprimer tous les membres de la carte",
"r-set-color": "Définir la couleur à",
"r-checklist": "checklist",
@@ -644,9 +644,9 @@
"r-create-card": "Créer une nouvelle carte",
"r-in-list": "dans la liste",
"r-in-swimlane": "Dans le couloir",
"r-d-add-member": "Ajouter un membre",
"r-d-remove-member": "Supprimer un membre",
"r-d-remove-all-member": "Supprimer tous les membres",
"r-d-add-member": "Ajouter un participant",
"r-d-remove-member": "Supprimer un participant",
"r-d-remove-all-member": "Supprimer tous les participants",
"r-d-check-all": "Cocher tous les éléments d'une liste",
"r-d-uncheck-all": "Décocher tous les éléments d'une liste",
"r-d-check-one": "Cocher l'élément",
+33 -33
View File
@@ -1,37 +1,37 @@
{
"accept": "Akceptuj",
"act-activity-notify": "Powiadomienia aktywności",
"act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createBoard": "created board __board__",
"act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createList": "added list __list__ to board __board__",
"act-addBoardMember": "added member __member__ to board __board__",
"act-archivedBoard": "Board __board__ moved to Archive",
"act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
"act-importBoard": "imported board __board__",
"act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
"act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-moveCard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-removeBoardMember": "removed member __member__ from board __board__",
"act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addAttachment": "Dodano załącznik __attachment__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
"act-deleteAttachment": "Usunięto załącznik __attachment__ na karcie __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
"act-addSubtask": "Dodane podzadanie __subtask__ na karcie __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
"act-addLabel": "Dodano etykietę __label__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
"act-removeLabel": "Usunięto etykietę __label__ z karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
"act-addChecklist": "Dodano listę zadań __checklist__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
"act-addChecklistItem": "Dodano element listy zadań __checklistItem__ do listy zadań __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-removeChecklist": "Usunięto listę zadań __checklist__ z karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-removeChecklistItem": "Usunięto element listy zadań __checklistItem__ z listy zadań __checkList__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-checkedItem": "Zaznaczono __checklistItem__ na liście zadań __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-uncheckedItem": "Odznaczono __checklistItem__ na liście __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-completeChecklist": "Wykonano wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
"act-uncompleteChecklist": "Wycofano ukończenie wykonania listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
"act-addComment": "Dodano komentarz na karcie __card__: __comment__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-createBoard": "Utworzono tablicę __board__",
"act-createCard": "Utworzono kartę __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-createCustomField": "Utworzono niestandardowe pole __customField__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
"act-createList": "Dodano listę __list__ do tablicy __board__",
"act-addBoardMember": "Dodano użytykownika __member__ do tablicy __board__",
"act-archivedBoard": "Tablica __board__ została przeniesiona do Archiwum",
"act-archivedCard": "Karta __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__ została przeniesiona do Archiwum",
"act-archivedList": "Lista __list__ na diagramie czynności __swimlane__ na tablicy __board__ została przeniesiona do Archiwum",
"act-archivedSwimlane": "Diagram czynności __swimlane__ na tablicy __board__ został przeniesiony do Archiwum",
"act-importBoard": "Zaimportowano tablicę __board__",
"act-importCard": "Zaimportowano kartę __card__ do listy __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-importList": "Zaimportowano listę __list__ na diagram czynności __swimlane__ do tablicy __board__",
"act-joinMember": "Dodano użytkownika __member__ do karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-moveCard": "Przeniesiono kartę __card__ z listy __oldList__ na diagramie czynności __oldSwimlane__ na tablicy __oldBoard__ do listy __listy__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-removeBoardMember": "Usunięto użytkownika __member__ z tablicy __board__",
"act-restoredCard": "Przywrócono kartę __card__ na listę __list__ na diagram czynności__ na tablicy __board__",
"act-unjoinMember": "Usunięto użytkownika __member__ z karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Akcje",
@@ -56,14 +56,14 @@
"activity-unchecked-item": "odznaczono %s w liście zadań %s z %s",
"activity-checklist-added": "dodał(a) listę zadań do %s",
"activity-checklist-removed": "usunięto listę zadań z %s",
"activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-completed": "Wykonano wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
"activity-checklist-uncompleted": "nieukończono listy zadań %s z %s",
"activity-checklist-item-added": "dodał(a) zadanie '%s' do %s",
"activity-checklist-item-removed": "usunięto element z listy zadań '%s' w %s",
"add": "Dodaj",
"activity-checked-item-card": "zaznaczono %s w liście zadań %s",
"activity-unchecked-item-card": "odznaczono %s w liście zadań %s",
"activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-completed-card": "Wykonano wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
"activity-checklist-uncompleted-card": "nieukończono listy zadań %s",
"add-attachment": "Dodaj załącznik",
"add-board": "Dodaj tablicę",
+33 -33
View File
@@ -1,37 +1,37 @@
{
"accept": "Aceitar",
"act-activity-notify": "Notificação de atividade",
"act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createBoard": "created board __board__",
"act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createList": "added list __list__ to board __board__",
"act-addBoardMember": "added member __member__ to board __board__",
"act-archivedBoard": "Board __board__ moved to Archive",
"act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
"act-importBoard": "imported board __board__",
"act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
"act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-moveCard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-removeBoardMember": "removed member __member__ from board __board__",
"act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addAttachment": "adicionado anexo __attachment__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-deleteAttachment": "excluido anexo __attachment__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-addSubtask": "adicionada subtarefa __subtask__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-addLabel": "Adicionada etiqueta __label__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-removeLabel": "Removida etiqueta __label__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-addChecklist": "adicionada lista de verificação __checklist__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-addChecklistItem": "adicionado o item __checklistItem__ a lista de verificação__checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-removeChecklist": "emovida a lista de verificação __checklist__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-removeChecklistItem": "removido item __checklistItem__ da lista de verificação __checkList__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-checkedItem": "marcado __checklistItem__ na lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-uncheckedItem": "desmarcado __checklistItem__ na lista __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-completeChecklist": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-uncompleteChecklist": "lista de verificação incompleta __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-addComment": "comentou no cartão __card__: __comment__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-createBoard": "criado quadro__board__",
"act-createCard": "criado cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-createCustomField": "criado campo customizado __customField__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-createList": "adicionada lista __list__ ao quadro __board__",
"act-addBoardMember": "adicionado membro __member__ ao quadro __board__",
"act-archivedBoard": "Quadro __board__ foi Arquivado",
"act-archivedCard": "Cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__ foi Arquivado",
"act-archivedList": "Lista __list__ em raia __swimlane__ no quadro __board__ foi Arquivada",
"act-archivedSwimlane": "Raia __swimlane__ no quadro __board__ foi Arquivada",
"act-importBoard": "importado quadro __board__",
"act-importCard": "importado cartão __card__ para lista __list__ em raia __swimlane__ no quadro __board__",
"act-importList": "importada lista __list__ para raia __swimlane__ no quadro __board__",
"act-joinMember": "adicionado membro __member__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-moveCard": "movido cartão __card__ da lista __oldList__ em raia __oldSwimlane__ no quadro __oldBoard__ para lista __list__ em raia __swimlane__ no quadro __board__",
"act-removeBoardMember": "removido membro __member__ do quadro __board__",
"act-restoredCard": "restaurado cartão __card__ a lista __list__ em raia __swimlane__ no quadro __board__",
"act-unjoinMember": "removido membro __member__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Ações",
@@ -56,14 +56,14 @@
"activity-unchecked-item": "desmarcado %s na lista de verificação %s de %s",
"activity-checklist-added": "Adicionada lista de verificação a %s",
"activity-checklist-removed": "removida a lista de verificação de %s",
"activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-completed": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"activity-checklist-uncompleted": "não-completada a lista de verificação %s de %s",
"activity-checklist-item-added": "adicionado o item de lista de verificação para '%s' em %s",
"activity-checklist-item-removed": "removida o item de lista de verificação de '%s' na %s",
"add": "Novo",
"activity-checked-item-card": "marcaddo %s na lista de verificação %s",
"activity-unchecked-item-card": "desmarcado %s na lista de verificação %s",
"activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-completed-card": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"activity-checklist-uncompleted-card": "não-completada a lista de verificação %s",
"add-attachment": "Adicionar Anexos",
"add-board": "Adicionar Quadro",
+12 -12
View File
@@ -15,22 +15,22 @@
"act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createBoard": "created board __board__",
"act-createBoard": "создал доску __board__",
"act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createList": "added list __list__ to board __board__",
"act-addBoardMember": "added member __member__ to board __board__",
"act-archivedBoard": "Board __board__ moved to Archive",
"act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-createList": "добавил список __list__ на доску __board__",
"act-addBoardMember": "добавил участника __member__ на доску __board__",
"act-archivedBoard": "Доска __board__ перемещена в Архив",
"act-archivedCard": "Карточка __card__ из списка __list__ с дорожки __swimlane__ доски __board__ перемещена в Архив",
"act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
"act-importBoard": "imported board __board__",
"act-archivedSwimlane": "Дорожка __swimlane__ на доске __board__ перемещена в Архив",
"act-importBoard": "импортировал доску __board__",
"act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
"act-importList": "импортировал список __list__ на дорожку __swimlane__ доски __board__",
"act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-moveCard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-removeBoardMember": "removed member __member__ from board __board__",
"act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-moveCard": "переместил карточку __card__ из списка __oldList__ с дорожки __oldSwimlane__ доски __oldBoard__ в список __list__ на дорожку __swimlane__ доски __board__",
"act-removeBoardMember": "удалил участника __member__ с доски __board__",
"act-restoredCard": "восстановил карточку __card__ в список __list__ на дорожку __swimlane__ доски __board__",
"act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
@@ -121,7 +121,7 @@
"boardChangeTitlePopup-title": "Переименовать доску",
"boardChangeVisibilityPopup-title": "Изменить настройки видимости",
"boardChangeWatchPopup-title": "Режимы оповещения",
"boardMenuPopup-title": "Board Settings",
"boardMenuPopup-title": "Настройки доски",
"boards": "Доски",
"board-view": "Вид доски",
"board-view-cal": "Календарь",
+1 -1
View File
@@ -121,7 +121,7 @@
"boardChangeTitlePopup-title": "重命名看板",
"boardChangeVisibilityPopup-title": "更改可视级别",
"boardChangeWatchPopup-title": "更改关注状态",
"boardMenuPopup-title": "Board Settings",
"boardMenuPopup-title": "看板设置",
"boards": "看板",
"board-view": "看板视图",
"board-view-cal": "日历",
+13 -11
View File
@@ -56,23 +56,22 @@ Activities.helpers({
customField() {
return CustomFields.findOne(this.customFieldId);
},
label() {
return Labels.findOne(this.labelId);
},
// Label activity did not work yet, unable to edit labels when tried this.
//label() {
// return Cards.findOne(this.labelId);
//},
});
Activities.before.insert((userId, doc) => {
doc.createdAt = new Date();
});
Activities.after.insert((userId, doc) => {
const activity = Activities._transform(doc);
RulesHelper.executeRules(activity);
});
if (Meteor.isServer) {
// For efficiency create indexes on the date of creation, and on the date of
// creation in conjunction with the card or board id, as corresponding views
@@ -84,7 +83,9 @@ if (Meteor.isServer) {
Activities._collection._ensureIndex({ commentId: 1 }, { partialFilterExpression: { commentId: { $exists: true } } });
Activities._collection._ensureIndex({ attachmentId: 1 }, { partialFilterExpression: { attachmentId: { $exists: true } } });
Activities._collection._ensureIndex({ customFieldId: 1 }, { partialFilterExpression: { customFieldId: { $exists: true } } });
Activities._collection._ensureIndex({ labelId: 1 }, { partialFilterExpression: { labelId: { $exists: true } } });
// Label activity did not work yet, unable to edit labels when tried this.
//Activities._collection._dropIndex({ labelId: 1 }, { "indexKey": -1 });
//Activities._collection._dropIndex({ labelId: 1 }, { partialFilterExpression: { labelId: { $exists: true } } });
});
Activities.after.insert((userId, doc) => {
@@ -173,11 +174,12 @@ if (Meteor.isServer) {
const customField = activity.customField();
params.customField = customField.name;
}
if (activity.labelId) {
const label = activity.label();
params.label = label.name;
params.labelId = activity.labelId;
}
// Label activity did not work yet, unable to edit labels when tried this.
//if (activity.labelId) {
// const label = activity.label();
// params.label = label.name;
// params.labelId = activity.labelId;
//}
if (board) {
const watchingUsers = _.pluck(_.where(board.watchers, {level: 'watching'}), 'userId');
const trackingUsers = _.pluck(_.where(board.watchers, {level: 'tracking'}), 'userId');
+2 -2
View File
@@ -1421,8 +1421,8 @@ function cardRemover(userId, doc) {
Checklists.remove({
cardId: doc._id,
});
Subtasks.remove({
cardId: doc._id,
Cards.remove({
parentId: doc._id,
});
CardComments.remove({
cardId: doc._id,
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v2.36.0",
"version": "v2.40.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
+8 -5
View File
@@ -5,11 +5,14 @@
rm -rf packages
mkdir -p ~/repos/wekan/packages
cd ~/repos/wekan/packages
git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "sed at macOS";
+130
View File
@@ -0,0 +1,130 @@
#!/bin/bash
echo "Note: If you use other locale than en_US.UTF-8 , you need to additionally install en_US.UTF-8"
echo " with 'sudo dpkg-reconfigure locales' , so that MongoDB works correctly."
echo " You can still use any other locale as your main locale."
X64NODE="https://releases.wekan.team/node-v8.11.3-linux-x64.tar.gz"
function pause(){
read -p "$*"
}
echo
PS3='Please enter your choice: '
options=("Install Wekan dependencies" "Build Wekan" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Install Wekan dependencies")
if [[ "$OSTYPE" == "linux-gnu" ]]; then
echo "Linux";
if [ "$(grep -Ei 'buntu|mint' /etc/*release)" ]; then
sudo apt install -y build-essential git curl wget
# sudo apt -y install nodejs npm
# sudo npm -g install n
# sudo n 8.11.3
fi
# if [ "$(grep -Ei 'debian' /etc/*release)" ]; then
# sudo apt install -y build-essential git curl wget
# echo "Debian, or Debian on Windows Subsystem for Linux"
# curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
# sudo apt install -y nodejs
# fi
# TODO: Add Sandstorm for version of Node.js install
#MACHINE_TYPE=`uname -m`
#if [ ${MACHINE_TYPE} == 'x86_64' ]; then
# # 64-bit stuff here
# wget ${X64NODE}
# sudo tar -C /usr/local --strip-components 1 -xzf ${X64NODE}
#elif [ ${MACHINE_TYPE} == '32bit' ]; then
# echo "TODO: 32-bit Linux install here"
# exit
#fi
elif [[ "$OSTYPE" == "darwin"* ]]; then
echo "macOS";
pause '1) Install XCode 2) Install Node 8.x from https://nodejs.org/en/ 3) Press [Enter] key to continue.'
elif [[ "$OSTYPE" == "cygwin" ]]; then
# POSIX compatibility layer and Linux environment emulation for Windows
echo "TODO: Add Cygwin";
exit;
elif [[ "$OSTYPE" == "msys" ]]; then
# Lightweight shell and GNU utilities compiled for Windows (part of MinGW)
echo "TODO: Add msys on Windows";
exit;
elif [[ "$OSTYPE" == "win32" ]]; then
# I'm not sure this can happen.
echo "TODO: Add Windows";
exit;
elif [[ "$OSTYPE" == "freebsd"* ]]; then
echo "TODO: Add FreeBSD";
exit;
else
echo "Unknown"
echo ${OSTYPE}
exit;
fi
## Latest npm with Meteor 1.6
sudo npm -g install npm
sudo npm -g install node-gyp
# Latest fibers for Meteor 1.6
sudo npm -g install fibers@2.0.0
# Install Meteor, if it's not yet installed
curl https://install.meteor.com | bash
# mkdir ~/repos
# cd ~/repos
# git clone https://github.com/wekan/wekan.git
# cd wekan
# git checkout devel
break
;;
"Build Wekan")
echo "Building Wekan."
cd ~/repos/wekan
rm -rf packages
mkdir -p ~/repos/wekan/packages
cd ~/repos/wekan/packages
git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "sed at macOS";
sed -i '' 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
else
echo "sed at ${OSTYPE}"
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
fi
cd ~/repos/wekan
rm -rf node_modules
meteor npm install
rm -rf .build
meteor build .build --directory
cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
#https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
#cd ~/repos/wekan/.build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
#rm -rf node_modules/bcrypt
#meteor npm install bcrypt
cd ~/repos/wekan/.build/bundle/programs/server
rm -rf node_modules
meteor npm install
#meteor npm install bcrypt
cd ~/repos
echo Done.
break
;;
"Quit")
break
;;
*) echo invalid option;;
esac
done
+2 -1
View File
@@ -12,7 +12,8 @@ cd ~/repos
cd ~/repos/wekan
meteor-spk pack wekan-$1.spk
spk publish wekan-$1.spk
scp wekan-$1.spk x2:/var/snap/wekan/common/releases.wekan.team/
#scp wekan-$1.spk x2:/var/snap/wekan/common/releases.wekan.team/
scp wekan-$1.spk x2:/var/www/releases.wekan.team/
mv wekan-$1.spk ..
# Delete old stuff
+2 -1
View File
@@ -22,5 +22,6 @@ cd ~/repos/wekan
sudo snap install --dangerous wekan_$1_amd64.snap
echo "Now you can test local installed snap."
snapcraft push wekan_$1_amd64.snap
scp wekan_$1_amd64.snap x2:/var/snap/wekan/common/releases.wekan.team/
#scp wekan_$1_amd64.snap x2:/var/snap/wekan/common/releases.wekan.team/
scp wekan_$1_amd64.snap x2:/var/www/releases.wekan.team/
mv wekan_$1_amd64.snap ..
+2 -4
View File
@@ -1,9 +1,7 @@
# Usage: ./release.sh 1.36
# Build Sandstorm
cd ~/repos/wekan
./releases/release-sandstorm.sh $1
./release-sandstorm.sh $1
# Build Snap
cd ~/repos/wekan
./releases/release-snap.sh $1
./release-snap.sh $1
+4
View File
@@ -247,6 +247,10 @@
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#export LDAP_DEFAULT_DOMAIN=
# Enable/Disable syncing of admin status based on ldap groups:
#export LDAP_SYNC_ADMIN_STATUS=true
# Comma separated list of admin group names.
#export LDAP_SYNC_ADMIN_GROUPS=group1,group2
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#export LOGOUT_WITH_TIMER=
+2 -2
View File
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
appVersion = 238,
appVersion = 242,
# Increment this for every release.
appMarketingVersion = (defaultText = "2.36.0~2019-03-03"),
appMarketingVersion = (defaultText = "2.40.0~2019-03-06"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
+2 -1
View File
@@ -16,8 +16,9 @@ Meteor.methods({
check(description, String);
check(params, Object);
// label activity did not work yet, see wekan/models/activities.js
const quoteParams = _.clone(params);
['card', 'list', 'oldList', 'board', 'oldBoard', 'comment', 'checklist', 'label', 'swimlane', 'oldSwimlane'].forEach((key) => {
['card', 'list', 'oldList', 'board', 'oldBoard', 'comment', 'checklist', 'swimlane', 'oldSwimlane'].forEach((key) => {
if (quoteParams[key]) quoteParams[key] = `"${params[key]}"`;
});
+10 -2
View File
@@ -3,7 +3,7 @@
# All supported keys are defined here together with descriptions and default values
# list of supported keys
keys="DEBUG MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API EMAIL_NOTIFICATION_TIMEOUT CORS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_EMAIL_MAP LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD"
keys="DEBUG MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API EMAIL_NOTIFICATION_TIMEOUT CORS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_EMAIL_MAP LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD"
# default values
DESCRIPTION_DEBUG="Debug OIDC OAuth2 etc. Example: sudo snap set wekan debug='true'"
@@ -264,7 +264,7 @@ KEY_LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT="ldap-group-filter-member-format"
DESCRIPTION_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-group-name. Default: ''"
DEFAULT_LDAP_GROUP_FILTER_GROUP_NAME=""
KEY_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-member-format"
KEY_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-member-name"
DESCRIPTION_LDAP_UNIQUE_IDENTIFIER_FIELD="This field is sometimes class GUID (Globally Unique Identifier)"
DEFAULT_LDAP_UNIQUE_IDENTIFIER_FIELD=""
@@ -314,6 +314,14 @@ DESCRIPTION_LDAP_SYNC_GROUP_ROLES="ldap-sync-group-roles . Default: '' (empty)."
DEFAULT_LDAP_SYNC_GROUP_ROLES=""
KEY_LDAP_SYNC_GROUP_ROLES="ldap-sync-group-roles"
DESCRIPTION_LDAP_SYNC_ADMIN_STATUS="Enable/Disable syncing of admin status based on LDAP groups. Example: true"
DEFAULT_LDAP_SYNC_ADMIN_STATUS=""
KEY_LDAP_SYNC_ADMIN_STATUS="ldap-sync-admin-status"
DESCRIPTION_LDAP_SYNC_ADMIN_GROUPS="Comma separated list of admin group names to sync. Example: group1, group2"
DEFAULT_LDAP_SYNC_ADMIN_GROUPS=""
KEY_LDAP_SYNC_ADMIN_GROUPS="ldap-sync-admin-groups"
DESCRIPTION_LDAP_DEFAULT_DOMAIN="The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP"
DEFAULT_LDAP_DEFAULT_DOMAIN=""
KEY_LDAP_DEFAULT_DOMAIN="ldap-default-domain"
+22 -16
View File
@@ -297,22 +297,28 @@ echo -e "Ldap Default Domain."
echo -e "The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP:"
echo -e "\t$ snap set $SNAP_NAME ldap-default-domain=''"
echo -e "\n"
# echo -e "Logout with timer."
# echo -e "Enable or not the option that allows to disconnect an user after a given time:"
# echo -e "\t$ snap set $SNAP_NAME logout-with-timer='true'"
# echo -e "\n"
# echo -e "Logout in."
# echo -e "Logout in how many days:"
# echo -e "\t$ snap set $SNAP_NAME logout-in='1'"
# echo -e "\n"
# echo -e "Logout on hours."
# echo -e "Logout in how many hours:"
# echo -e "\t$ snap set $SNAP_NAME logout-on-hours='9'"
# echo -e "\n"
# echo -e "Logout on minutes."
# echo -e "Logout in how many minutes:"
# echo -e "\t$ snap set $SNAP_NAME logout-on-minutes='5'"
# echo -e "\n"
echo -e "Enable/Disable syncing of admin status based on LDAP groups."
echo -e "\t$ snap set $SNAP_NAME ldap-sync-admin-status='true'"
echo -e "\n"
echo -e "Comma separated list of admin group names to sync."
echo -e "\t$ snap set $SNAP_NAME ldap-sync-admin-groups='group1,group2'"
echo -e "\n"
echo -e "Logout with timer."
echo -e "Enable or not the option that allows to disconnect an user after a given time:"
echo -e "\t$ snap set $SNAP_NAME logout-with-timer='true'"
echo -e "\n"
echo -e "Logout in."
echo -e "Logout in how many days:"
echo -e "\t$ snap set $SNAP_NAME logout-in='1'"
echo -e "\n"
echo -e "Logout on hours."
echo -e "Logout in how many hours:"
echo -e "\t$ snap set $SNAP_NAME logout-on-hours='9'"
echo -e "\n"
echo -e "Logout on minutes."
echo -e "Logout in how many minutes:"
echo -e "\t$ snap set $SNAP_NAME logout-on-minutes='5'"
echo -e "\n"
echo -e "Default authentication method."
echo -e "The default authentication method used if a user does not exist to create and authenticate. Method can be password or ldap."
echo -e "\t$ snap set $SNAP_NAME default-authentication-method='ldap'"
+1 -1
View File
@@ -206,7 +206,7 @@ parts:
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
execstack --clear-execstack $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
rm $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
organize:
README: README.wekan
prime:
+1
View File
@@ -92,6 +92,7 @@ sudo -u wekan ${meteor} npm install
sudo -u wekan ${meteor} build --directory /home/wekan/app_build
sudo cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js
sudo chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js
sudo rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
cd /home/wekan/app_build/bundle/programs/server/
sudo npm install
sudo chown -R wekan:wekan ./node_modules
+6
View File
@@ -248,6 +248,12 @@ REM # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create
REM # example :
REM SET LDAP_DEFAULT_DOMAIN=
REM # Enable/Disable syncing of admin status based on ldap groups:
REM SET LDAP_SYNC_ADMIN_STATUS=true
REM # Comma separated list of admin group names to sync.
REM SET LDAP_SYNC_ADMIN_GROUPS=group1,group2
REM ------------------------------------------------
REM # LOGOUT_WITH_TIMER : Enables or not the option logout with timer
+4
View File
@@ -265,6 +265,10 @@ function wekan_repo_check(){
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#export LDAP_DEFAULT_DOMAIN=
# Enable/Disable syncing of admin status based on ldap groups:
#export LDAP_SYNC_ADMIN_STATUS=true
# Comma separated list of admin group names to sync.
#export LDAP_SYNC_ADMIN_GROUPS=group1,group2
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#export LOGOUT_WITH_TIMER=