mirror of
https://github.com/wekan/wekan.git
synced 2026-11-08 21:44:59 -05:00
Compare commits
No files matched your search
@@ -4,3 +4,40 @@ updates:
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
ignore:
|
||||
# Build-time-only (devDependency) Rspack toolchain. These packages compile
|
||||
# the bundle on the developer / CI machine and are NOT shipped in the
|
||||
# deployed WeKan server or client bundle, so their advisories do not affect
|
||||
# a running WeKan instance. (For example webpack-dev-server / @rspack/dev-
|
||||
# server, pulled via @rspack/cli, and the socket.io/ws chain pulled via
|
||||
# @rsdoctor/rspack-plugin, never run in WeKan — it builds with `meteor run`,
|
||||
# not the Rspack CLI or dev-server.)
|
||||
#
|
||||
# They also cannot simply be removed or bumped:
|
||||
# * @meteorjs/rspack re-pins and re-installs @rspack/cli and
|
||||
# @rsdoctor/rspack-plugin into package.json on every build, so deleting
|
||||
# them does not stick.
|
||||
# * The only upgrades Dependabot/npm offer are build-breaking: a
|
||||
# @meteorjs/rspack downgrade, or @rspack/cli 2.0 / Rspack 2.0, which
|
||||
# needs Meteor 3.6 (see https://github.com/meteor/meteor/pull/14360).
|
||||
# WeKan currently runs METEOR@3.5-rc.1.
|
||||
#
|
||||
# So pin them here until Meteor 3.6 + Rspack 2.0 land, then revisit.
|
||||
- dependency-name: "@meteorjs/rspack"
|
||||
- dependency-name: "@rspack/core"
|
||||
- dependency-name: "@rspack/cli"
|
||||
- dependency-name: "@rsdoctor/rspack-plugin"
|
||||
- dependency-name: "css-loader"
|
||||
- dependency-name: "style-loader"
|
||||
# Playwright end-to-end test harness — pure test-only tooling that never ships in
|
||||
# WeKan. It now depends only on @playwright/test and the official `mongodb` driver
|
||||
# (the heavy, CVE-prone `mongosh` CLI was replaced by helpers/mongo-runner.js).
|
||||
# Watch this directory so those two stay patched.
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/tests/playwright"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
@@ -123,11 +123,6 @@ jobs:
|
||||
run: npx playwright install --with-deps ${{ matrix.project }}
|
||||
working-directory: tests/playwright
|
||||
|
||||
# The e2e DB helper (tests/playwright/helpers/db.js) seeds/reads MongoDB by
|
||||
# shelling out to `mongosh`, which is not preinstalled on the runner.
|
||||
- name: Install mongosh
|
||||
run: npm install -g mongosh
|
||||
|
||||
- name: Start WeKan in background
|
||||
run: |
|
||||
MONGO_URL=mongodb://localhost:27017/wekan_test \
|
||||
@@ -232,12 +227,6 @@ jobs:
|
||||
- name: Install Chromium
|
||||
run: sudo apt-get install -y chromium-browser
|
||||
|
||||
# tests/e2e/list-regressions.js seeds/reads MongoDB via `mongosh`, which is
|
||||
# not preinstalled on the runner (the cause of the previous
|
||||
# "spawnSync mongosh ENOENT" failure).
|
||||
- name: Install mongosh
|
||||
run: npm install -g mongosh
|
||||
|
||||
- name: Start WeKan in background
|
||||
run: |
|
||||
MONGO_URL=mongodb://localhost:27017/wekan_regression \
|
||||
|
||||
@@ -7,9 +7,13 @@ name: Release All Platforms
|
||||
# Or use the convenience script (bumps versions, commits, pushes, then triggers):
|
||||
# ./releases/release-all.sh 9.35 9.36
|
||||
#
|
||||
# Builds only the platforms MongoDB ships server binaries for (amd64, arm64,
|
||||
# win64, mac); MongoDB 7.x is the default database. s390x/ppc64le are not built
|
||||
# because MongoDB has no server binaries for them.
|
||||
# The Docker image and snap cover the platforms MongoDB ships server binaries for
|
||||
# (amd64, arm64; win64 + mac bundles too); MongoDB 7.x is the default database.
|
||||
# Additionally, WeKan server bundles are built for every other architecture
|
||||
# Node.js 24.x publishes binaries for — s390x and ppc64le — and attached to the
|
||||
# GitHub Release as extra downloads (run a separate MongoDB for those). These
|
||||
# extra-arch bundles are NOT part of the Docker image or snap. (armv7l/32-bit ARM
|
||||
# is not built: Node.js 24 ships no armv7l binaries.)
|
||||
#
|
||||
# This workflow does EVERYTHING for a release remotely (nothing is built or
|
||||
# pushed on the maintainer's machine), running jobs in parallel where possible:
|
||||
@@ -20,9 +24,14 @@ name: Release All Platforms
|
||||
# - website: updates the wekan/wekan.fi repo (install page + API docs) and pushes
|
||||
# - charts: updates and publishes the wekan/charts Helm chart and pushes
|
||||
# - build-*: builds the amd64 bundle (full Meteor 3 build), then rebuilds native
|
||||
# modules for arm64, win64, mac-arm64 from that amd64 base
|
||||
# modules for arm64 from that amd64 base
|
||||
# - release: creates the GitHub Release with the newest CHANGELOG.md notes and
|
||||
# uploads every wekan-<version>-<platform>.zip bundle
|
||||
# uploads the core wekan-<version>-{amd64,arm64}.zip bundles
|
||||
# - build-win64 / build-mac-arm64 / build-extra-arches: built AFTER release, each
|
||||
# rebuilds the amd64 bundle's native modules for its platform (Windows,
|
||||
# macOS arm64, and QEMU-emulated s390x/ppc64le) and attaches its
|
||||
# .zip to the Release as an extra download. Decoupled from `release` so
|
||||
# a slow/flaky build never blocks it; not in the Docker image or snap
|
||||
# - docker: builds and pushes the multi-arch image to Docker Hub, Quay.io, GHCR
|
||||
# - snap: builds the snap on Launchpad (amd64 + arm64), pushes it to the Snap
|
||||
# Store and attaches the .snap files to the GitHub Release
|
||||
@@ -357,9 +366,43 @@ jobs:
|
||||
path: wekan-${{ needs.prepare.outputs.version }}-arm64.zip
|
||||
retention-days: 1
|
||||
|
||||
# ─── 5. Build win64 bundle (rebuild native modules on Windows) ───────────────
|
||||
# ─── 7. Create GitHub Release and upload all bundles ────────────────────────
|
||||
release:
|
||||
needs:
|
||||
- prepare
|
||||
- build-amd64
|
||||
- build-arm64
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
steps:
|
||||
- name: Download all bundles
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: bundle-*
|
||||
merge-multiple: true
|
||||
|
||||
- name: Create GitHub Release with all bundles
|
||||
uses: softprops/action-gh-release@v3
|
||||
with:
|
||||
tag_name: v${{ needs.prepare.outputs.version }}
|
||||
name: v${{ needs.prepare.outputs.version }}
|
||||
body: ${{ needs.prepare.outputs.changelog }}
|
||||
files: |
|
||||
wekan-${{ needs.prepare.outputs.version }}-amd64.zip
|
||||
wekan-${{ needs.prepare.outputs.version }}-arm64.zip
|
||||
|
||||
# ─── 7b. Extra-platform bundles (win64, mac-arm64, s390x, ppc64le) ───────────
|
||||
# Every bundle below is built AFTER `release` and attaches its own .zip to the
|
||||
# already-created GitHub Release with `gh release upload --clobber`, rather than
|
||||
# being a prerequisite of `release`. This deliberately decouples the slower /
|
||||
# different-OS builds (Windows, macOS, QEMU-emulated arches) from the core
|
||||
# amd64/arm64 release, Docker and snap, so a slow or flaky one never blocks them.
|
||||
# These bundles are NOT part of the Docker image or snap.
|
||||
|
||||
# Build win64 bundle (rebuild native modules on Windows).
|
||||
build-win64:
|
||||
needs: [prepare, build-amd64]
|
||||
needs: [prepare, build-amd64, release]
|
||||
runs-on: windows-latest
|
||||
timeout-minutes: 60
|
||||
env:
|
||||
@@ -455,9 +498,19 @@ jobs:
|
||||
path: wekan-${{ needs.prepare.outputs.version }}-win64.zip
|
||||
retention-days: 1
|
||||
|
||||
# ─── 6. Build mac-arm64 bundle (rebuild native modules on Apple Silicon) ─────
|
||||
- name: Attach win64 bundle to the GitHub Release
|
||||
shell: bash
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# The repo is checked out into src/, so the workspace root is not a git
|
||||
# repository; set GH_REPO so `gh` targets wekan/wekan without relying on
|
||||
# git remote detection (else: "fatal: not a git repository").
|
||||
GH_REPO: ${{ github.repository }}
|
||||
run: gh release upload "v${VERSION}" "wekan-${VERSION}-win64.zip" --clobber
|
||||
|
||||
# Build mac-arm64 bundle (rebuild native modules on Apple Silicon).
|
||||
build-mac-arm64:
|
||||
needs: [prepare, build-amd64]
|
||||
needs: [prepare, build-amd64, release]
|
||||
runs-on: macos-14 # macos-14 runners are Apple Silicon (arm64)
|
||||
timeout-minutes: 60
|
||||
env:
|
||||
@@ -503,35 +556,88 @@ jobs:
|
||||
path: wekan-${{ needs.prepare.outputs.version }}-mac-arm64.zip
|
||||
retention-days: 1
|
||||
|
||||
# ─── 7. Create GitHub Release and upload all bundles ────────────────────────
|
||||
release:
|
||||
needs:
|
||||
- prepare
|
||||
- build-amd64
|
||||
- build-arm64
|
||||
- build-win64
|
||||
- build-mac-arm64
|
||||
runs-on: ubuntu-latest
|
||||
- name: Attach mac-arm64 bundle to the GitHub Release
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# No repo checkout in this job, so set GH_REPO so `gh` knows the target
|
||||
# repository instead of trying (and failing) to detect a git remote.
|
||||
GH_REPO: ${{ github.repository }}
|
||||
run: gh release upload "v${VERSION}" "wekan-${VERSION}-mac-arm64.zip" --clobber
|
||||
|
||||
# Extra-architecture Linux bundles (s390x, ppc64le).
|
||||
# armv7l (32-bit ARM) is intentionally excluded: Node.js 24 ships no armv7l
|
||||
# binaries (official or unofficial), so there is no node:24 linux/arm/v7 image
|
||||
# to rebuild native modules against and no Node 24 runtime to run a bundle on
|
||||
# an armv7 device. See https://nodejs.org/dist/latest-v24.x/ (no -linux-armv7l).
|
||||
build-extra-arches:
|
||||
needs: [prepare, build-amd64, release]
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 300
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- arch: s390x
|
||||
platform: linux/s390x
|
||||
- arch: ppc64le
|
||||
platform: linux/ppc64le
|
||||
env:
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
steps:
|
||||
- name: Download all bundles
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y curl unzip zip
|
||||
|
||||
- name: Set up QEMU for ${{ matrix.arch }} emulation
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Download amd64 bundle
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: bundle-*
|
||||
merge-multiple: true
|
||||
name: bundle-amd64
|
||||
|
||||
- name: Create GitHub Release with all bundles
|
||||
uses: softprops/action-gh-release@v3
|
||||
- name: Rebuild native modules for ${{ matrix.arch }} under emulation
|
||||
run: |
|
||||
unzip -q wekan-${VERSION}-amd64.zip
|
||||
# Same bcrypt fix as the arm64 build: bcrypt 5.0.1 (Meteor
|
||||
# accounts-password) ships node-addon-api@3 which fails to compile on
|
||||
# Node.js 24. Swap in bcrypt 6.0.0 source; the emulated npm install
|
||||
# below compiles it (and any other native module) for the target arch.
|
||||
BCRYPT_DIR="$(pwd)/bundle/programs/server/npm/node_modules/meteor/accounts-password/node_modules/bcrypt"
|
||||
if [ -d "$BCRYPT_DIR" ]; then
|
||||
rm -rf "$BCRYPT_DIR"
|
||||
TMP=$(mktemp -d)
|
||||
pushd "$TMP" > /dev/null
|
||||
npm pack bcrypt@6.0.0
|
||||
mkdir bcrypt && tar xzf bcrypt-*.tgz --strip-components=1 -C bcrypt
|
||||
cd bcrypt && npm install --ignore-scripts && cd ..
|
||||
cp -a bcrypt "$BCRYPT_DIR"
|
||||
popd > /dev/null
|
||||
rm -rf "$TMP"
|
||||
fi
|
||||
docker run --rm --platform ${{ matrix.platform }} \
|
||||
-v "$(pwd)/bundle:/bundle" \
|
||||
-w /bundle/programs/server \
|
||||
node:${NODE_VERSION}-slim \
|
||||
sh -c "apt-get update -qq && apt-get install -y -q build-essential python3 && npm install"
|
||||
|
||||
- name: Create ${{ matrix.arch }} zip
|
||||
run: zip -r wekan-${VERSION}-${{ matrix.arch }}.zip bundle
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
with:
|
||||
tag_name: v${{ needs.prepare.outputs.version }}
|
||||
name: v${{ needs.prepare.outputs.version }}
|
||||
body: ${{ needs.prepare.outputs.changelog }}
|
||||
files: |
|
||||
wekan-${{ needs.prepare.outputs.version }}-amd64.zip
|
||||
wekan-${{ needs.prepare.outputs.version }}-arm64.zip
|
||||
wekan-${{ needs.prepare.outputs.version }}-win64.zip
|
||||
wekan-${{ needs.prepare.outputs.version }}-mac-arm64.zip
|
||||
name: bundle-${{ matrix.arch }}
|
||||
path: wekan-${{ needs.prepare.outputs.version }}-${{ matrix.arch }}.zip
|
||||
retention-days: 1
|
||||
|
||||
- name: Attach ${{ matrix.arch }} bundle to the GitHub Release
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# No repo checkout in this job, so set GH_REPO so `gh` knows the target
|
||||
# repository instead of trying (and failing) to detect a git remote.
|
||||
GH_REPO: ${{ github.repository }}
|
||||
run: gh release upload "v${VERSION}" "wekan-${VERSION}-${{ matrix.arch }}.zip" --clobber
|
||||
|
||||
# ─── 8. Build and push the multi-arch Docker image to all registries ────────
|
||||
# Mirrors releases/docker-build.sh step 3 (multi-arch buildx --push).
|
||||
@@ -572,10 +678,81 @@ jobs:
|
||||
login quay.io "$QUAY_AUTH"
|
||||
login ghcr.io "$GHCR_AUTH"
|
||||
|
||||
- name: Wait for release bundles to be downloadable
|
||||
# The Dockerfile downloads wekan-<version>-<arch>.zip from the GitHub
|
||||
# Release for each built platform. Even though this job needs `release`
|
||||
# (so the assets are uploaded), GitHub's releases/download/<tag>/<asset>
|
||||
# URL can briefly 404 right after upload (CDN/propagation lag), which used
|
||||
# to fail the multi-arch build mid-way. Poll here until both the amd64 and
|
||||
# arm64 bundles return 200, so the (expensive, emulated) buildx run only
|
||||
# starts once the assets are actually fetchable. The Dockerfile also
|
||||
# retries per-arch as a second layer of safety.
|
||||
run: |
|
||||
set -euo pipefail
|
||||
base="https://github.com/wekan/wekan/releases/download/v${VERSION}"
|
||||
for arch in amd64 arm64; do
|
||||
url="${base}/wekan-${VERSION}-${arch}.zip"
|
||||
echo "Waiting for ${url} ..."
|
||||
ok=0
|
||||
for i in $(seq 1 30); do
|
||||
code=$(curl -sSL -o /dev/null -w '%{http_code}' --retry 0 -I "$url" || echo 000)
|
||||
if [ "$code" = "200" ]; then
|
||||
echo " available (HTTP $code) after $((i*10))s"
|
||||
ok=1
|
||||
break
|
||||
fi
|
||||
echo " attempt $i/30: HTTP $code, retrying in 10s..."
|
||||
sleep 10
|
||||
done
|
||||
if [ "$ok" -ne 1 ]; then
|
||||
echo "::error::Release asset not downloadable after retries: $url"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
- name: Verify the release bundle reports the release version
|
||||
# Belt-and-suspenders against the "image tagged vX shows vY in the Admin
|
||||
# Panel" bug: the image is just the unzipped wekan-<version>-<arch>.zip
|
||||
# bundle (Dockerfile moves it to /build), and the Admin Panel shows that
|
||||
# bundle's app package.json version (server/statistics.js reads
|
||||
# require('/package.json').version). Assert the amd64 bundle's WeKan
|
||||
# version equals the release version BEFORE the expensive multi-arch
|
||||
# buildx, so a stale/mismatched bundle fails fast with a clear message
|
||||
# instead of shipping (and pushing to three registries) a mislabeled image.
|
||||
run: |
|
||||
set -euo pipefail
|
||||
url="https://github.com/wekan/wekan/releases/download/v${VERSION}/wekan-${VERSION}-amd64.zip"
|
||||
wget -q "$url" -O bundle.zip
|
||||
tmp="$(mktemp -d)"
|
||||
# Extract only package.json files (not the whole multi-hundred-MB bundle).
|
||||
unzip -o -q bundle.zip '*package.json' -d "$tmp"
|
||||
# The WeKan app package.json is the only one whose "version" carries a
|
||||
# leading 'v' (e.g. "v9.61.0"); every dependency uses plain semver. So a
|
||||
# v-prefixed "version" uniquely identifies the app's own package.json.
|
||||
found="$(grep -rhoE '"version": "v[0-9][^"]*"' "$tmp" \
|
||||
| grep -oE 'v[0-9][^"]*' | sort -u | head -1 || true)"
|
||||
rm -rf "$tmp" bundle.zip
|
||||
if [ -z "$found" ]; then
|
||||
echo "::error::Could not find a v-prefixed WeKan version in the bundle's package.json files."
|
||||
exit 1
|
||||
fi
|
||||
if [ "$found" != "v${VERSION}.0" ] && [ "$found" != "v${VERSION}" ]; then
|
||||
echo "::error::Bundle reports app version $found but the release is v${VERSION}. The bundle baked into the image is stale/mismatched — the Admin Panel would show $found. Aborting before build."
|
||||
exit 1
|
||||
fi
|
||||
echo "Bundle app version $found matches release v${VERSION}."
|
||||
|
||||
- name: Build and push multi-arch image
|
||||
# Pass VERSION explicitly as a build-arg. The Dockerfile's `ARG VERSION`
|
||||
# default is only a fallback for manual builds; the release version is the
|
||||
# authoritative source here. Without this the image would build against the
|
||||
# Dockerfile default (downloading that version's wekan-<v>-<arch>.zip and
|
||||
# baking its package.json), so a v${VERSION}-tagged image could ship — and
|
||||
# report in the Admin Panel — a stale, different version.
|
||||
run: |
|
||||
docker buildx build \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--build-arg VERSION=${VERSION} \
|
||||
-t wekanteam/wekan:v${VERSION} \
|
||||
-t wekanteam/wekan:latest \
|
||||
-t quay.io/wekan/wekan:v${VERSION} \
|
||||
@@ -613,6 +790,24 @@ jobs:
|
||||
printf '%s' "$LP_CREDENTIALS" | base64 -d > ~/.local/share/snapcraft/launchpad-credentials
|
||||
chmod 600 ~/.local/share/snapcraft/launchpad-credentials
|
||||
|
||||
- name: Verify snapcraft.yaml version matches the release
|
||||
# The `bump` job (releases/version.sh) is the single source of truth for
|
||||
# the snap version and updates snapcraft.yaml before the tag is created.
|
||||
# snapcraft.yaml's `version:` names the produced files
|
||||
# (wekan_<version>_<arch>.snap), so if a stale tag carried the wrong
|
||||
# version the build would produce wekan_<old>_*.snap and the upload/attach
|
||||
# globs (wekan_${VERSION}_*.snap) would match nothing — passing the literal
|
||||
# glob to `snapcraft upload` ("is not a valid file", exit 64). Assert it
|
||||
# here so that mismatch fails fast (before a ~20 min Launchpad build) with
|
||||
# a clear pointer, instead of re-bumping the version inside this build job.
|
||||
run: |
|
||||
set -euo pipefail
|
||||
if ! grep -qxF "version: '${VERSION}'" snapcraft.yaml; then
|
||||
echo "::error::snapcraft.yaml is not at version '${VERSION}' ($(grep -m1 '^version:' snapcraft.yaml)). The bump job (releases/version.sh) did not update the tagged commit."
|
||||
exit 1
|
||||
fi
|
||||
echo "snapcraft.yaml is at version '${VERSION}'."
|
||||
|
||||
- name: Build snaps on Launchpad (amd64 + arm64)
|
||||
# `snapcraft remote-build` is experimental and talks to Launchpad over
|
||||
# HTTPS after pushing the whole repo; it intermittently dies with a
|
||||
@@ -621,29 +816,48 @@ jobs:
|
||||
# Retry a few times so one network hiccup doesn't fail the release.
|
||||
run: |
|
||||
set -uo pipefail
|
||||
shopt -s nullglob
|
||||
attempts=3
|
||||
for i in $(seq 1 "$attempts"); do
|
||||
echo "::group::Remote build attempt $i/$attempts"
|
||||
if snapcraft remote-build --launchpad-accept-public-upload; then
|
||||
echo "::endgroup::"
|
||||
echo "Remote build succeeded on attempt $i."
|
||||
snapcraft remote-build --launchpad-accept-public-upload && rc=0 || rc=$?
|
||||
echo "::endgroup::"
|
||||
# snapcraft remote-build can exit 0 even when the Launchpad build
|
||||
# FAILED (it just downloads the build logs and produces no .snap), so
|
||||
# don't trust the exit code alone — require that .snap files exist.
|
||||
snaps=( wekan_${VERSION}_*.snap )
|
||||
if [ "$rc" -eq 0 ] && [ "${#snaps[@]}" -gt 0 ]; then
|
||||
echo "Remote build succeeded on attempt $i: ${snaps[*]}"
|
||||
exit 0
|
||||
fi
|
||||
echo "::endgroup::"
|
||||
echo "Remote build attempt $i failed (likely a transient Launchpad/TLS error)."
|
||||
echo "Attempt $i: snapcraft exit=$rc, .snap files produced=${#snaps[@]}."
|
||||
# Surface the Launchpad build logs so a real build failure is
|
||||
# diagnosable here, instead of as a later cryptic upload error.
|
||||
for log in snapcraft-wekan-*.txt; do
|
||||
echo "::group::Launchpad build log: $log (last 150 lines)"
|
||||
tail -n 150 "$log"
|
||||
echo "::endgroup::"
|
||||
done
|
||||
if [ "$i" -lt "$attempts" ]; then
|
||||
echo "Retrying in 60s..."
|
||||
sleep 60
|
||||
fi
|
||||
done
|
||||
echo "Remote build failed after $attempts attempts." >&2
|
||||
echo "::error::Remote build failed after $attempts attempts (no wekan_${VERSION}_*.snap produced)." >&2
|
||||
exit 1
|
||||
|
||||
- name: Push snaps to the Snap Store (edge + beta channels)
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_AUTH }}
|
||||
run: |
|
||||
for f in wekan_${VERSION}_*.snap; do
|
||||
set -euo pipefail
|
||||
shopt -s nullglob
|
||||
snaps=( wekan_${VERSION}_*.snap )
|
||||
if [ "${#snaps[@]}" -eq 0 ]; then
|
||||
echo "::error::No wekan_${VERSION}_*.snap files to upload."
|
||||
exit 1
|
||||
fi
|
||||
for f in "${snaps[@]}"; do
|
||||
echo "Uploading $f to the Snap Store (edge,beta)..."
|
||||
snapcraft upload --release=edge,beta "$f"
|
||||
done
|
||||
@@ -652,4 +866,11 @@ jobs:
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
gh release upload "v${VERSION}" wekan_${VERSION}_*.snap --clobber
|
||||
set -euo pipefail
|
||||
shopt -s nullglob
|
||||
snaps=( wekan_${VERSION}_*.snap )
|
||||
if [ "${#snaps[@]}" -eq 0 ]; then
|
||||
echo "::error::No wekan_${VERSION}_*.snap files to attach."
|
||||
exit 1
|
||||
fi
|
||||
gh release upload "v${VERSION}" "${snaps[@]}" --clobber
|
||||
+600
@@ -26,6 +26,606 @@ Versions:
|
||||
- WeKan 8.00-8.06 had wrong raw database directory setting /var/snap/wekan/common/wekan and some cards were not visible,
|
||||
it was fixed at WeKan 8.07 where database directory is back to /var/snap/wekan/common and all cards are visible.
|
||||
|
||||
# v9.63 2026-06-19 WeKan ® release
|
||||
|
||||
This release adds the following features:
|
||||
|
||||
- [Fix the wekan.fi install page version never updating from a stale value](https://github.com/wekan/wekan/commit/40c3ee098).
|
||||
The `release-all.yml` website job ran every release but the install page's
|
||||
version stayed frozen at v9.57: `releases/release-website.sh` updated it with a
|
||||
sed anchored on `>v$OLD</span>`, which silently no-op'd once the published
|
||||
page's value no longer matched the `old_version` passed for a release. Anchor
|
||||
on the stable `<span class="version-number">` instead and re-normalize whatever
|
||||
version is there to the new one, with an assert so a miss fails loudly. Same
|
||||
self-healing fix applied to the local-flow copy in `releases/version.sh`. The
|
||||
live wekan.fi install page was also corrected to the current version.
|
||||
Thanks to xet7 and Claude.
|
||||
|
||||
- [Make the remaining release version substitutions self-healing](https://github.com/wekan/wekan/commit/1e5ae8f64).
|
||||
Hardened the last `$OLD_VERSION`-anchored seds in `releases/version.sh` — the
|
||||
same fragile pattern that froze the Docker `ARG VERSION` and the install page.
|
||||
The snapcraft.yaml bundle download was release-critical (same class as the
|
||||
Docker bug: the snap downloads `wekan-<v>-<arch>.zip`, so a stale value ships
|
||||
the wrong bundle under the right name) and was stuck at v9.57; it now anchors
|
||||
on the `wekan-<v>-` / `releases/download/v<v>/` shapes and asserts. The
|
||||
sandstorm `appVersion` rewrite is now global and self-healing (the redundant
|
||||
`$OLD_NO_DOTS`-anchored fixup is dropped), and the Windows Offline.md doc links
|
||||
self-heal with a soft warning (cosmetic, so they must not fail the release).
|
||||
snapcraft.yaml and Offline.md were also corrected from their stale v9.57.
|
||||
Thanks to xet7 and Claude.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.62 2026-06-19 WeKan ® release
|
||||
|
||||
This release adds the following features:
|
||||
|
||||
- [Release All Platforms: Fix Docker image showing a stale Admin Panel version (image tagged vX reported v9.57)](https://github.com/wekan/wekan/commit/b30f4967c).
|
||||
The Admin Panel reads the WeKan version from the bundled `package.json`, which
|
||||
comes verbatim from the `wekan-<version>-<arch>.zip` the Dockerfile downloads
|
||||
and unzips into `/build`. The `docker` job never passed `--build-arg VERSION`,
|
||||
so every image was built against the Dockerfile's hardcoded `ARG VERSION`
|
||||
default — and that default was stuck at `9.57` because `releases/version.sh`
|
||||
rewrote it with a sed anchored on the *old* version number, which silently
|
||||
no-op'd whenever `old_version` did not match (e.g. the skipped 9.58 numbering).
|
||||
The result: images tagged v9.59/v9.60/v9.61 shipped the v9.57 bundle and
|
||||
reported 9.57 in the Admin Panel. Fixed three ways: the `docker` job now passes
|
||||
`--build-arg VERSION=${VERSION}` (the release version is authoritative); the
|
||||
`version.sh` Dockerfile rewrite now anchors on the `^ARG VERSION=` prefix and
|
||||
asserts the result, so the default can never go stale again; and a new
|
||||
pre-build guard downloads the release bundle and fails fast if its app
|
||||
`package.json` version does not match the release tag, before pushing a
|
||||
mislabeled image to the registries. Already-pushed v9.58–v9.61 images need a
|
||||
rebuild to carry their correct contents.
|
||||
Thanks to xet7 and Claude.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.61 2026-06-19 WeKan ® release
|
||||
|
||||
This release adds the following features:
|
||||
|
||||
- [Release All Platforms: Set GH_REPO on the bundle-attach steps so gh finds the repository](https://github.com/wekan/wekan/commit/b6facc2412e37b4c365a8f6c667894794bf2af0c).
|
||||
The win64 / mac-arm64 / s390x / ppc64le bundles each finished building but
|
||||
then failed on `gh release upload` with `failed to run git: fatal: not a git
|
||||
repository`. `gh` tries to detect the target repo from a git remote, but
|
||||
`build-win64` checks the repo out into `src/` (so the workspace root is not a
|
||||
git repository) and `build-mac-arm64` / `build-extra-arches` do not check it
|
||||
out at all. Set `GH_REPO=${{ github.repository }}` on all three attach steps
|
||||
so `gh` targets `wekan/wekan` directly without git remote detection. The snap
|
||||
job is unaffected (it does a full checkout into the workspace root).
|
||||
Thanks to xet7 and Claude.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.60 2026-06-19 WeKan ® release
|
||||
|
||||
This release adds the following features:
|
||||
|
||||
- [Release All Platforms: Drop armv7l from extra-arch bundles, because Node.js 24 ships no armv7l binaries](https://github.com/wekan/wekan/commit/869cc694f58df49022081e7bc82d4c3c4a6b3792).
|
||||
The `build-extra-arches` armv7l matrix entry failed with `no matching
|
||||
manifest for linux/arm/v7` when pulling `node:24-slim`. Root cause: Node.js
|
||||
24 publishes no armv7l (32-bit ARM) binaries at all — neither the official
|
||||
dist nor unofficial builds — so there is no `node:24` arm/v7 image to rebuild
|
||||
native modules against, and no Node 24 runtime to run such a bundle on an
|
||||
armv7 device. The armv7l matrix entry is removed; extra-arch bundles are now
|
||||
s390x + ppc64le. armv7 was already excluded from the Docker image and snap,
|
||||
so those are unaffected.
|
||||
Thanks to xet7 and Claude.
|
||||
|
||||
- [Release All Platforms: Move win64 and mac-arm64 into the post-release extra-platform phase](https://github.com/wekan/wekan/commit/32ddf29142c463e65028ebb81619c142ea37d27b).
|
||||
`build-win64` and `build-mac-arm64` were prerequisites of the `release` job,
|
||||
so a slow or flaky Windows/macOS runner blocked creation of the GitHub
|
||||
Release (and thus the Docker and snap jobs, which depend on it). They now
|
||||
depend on `release` instead — alongside `build-extra-arches` — and each
|
||||
attaches its own `wekan-<version>-<platform>.zip` to the already-created
|
||||
Release via `gh release upload --clobber`. The core release now waits only on
|
||||
the amd64 + arm64 bundles. No build steps changed; only the dependency
|
||||
wiring, upload mechanism, and section grouping.
|
||||
Thanks to xet7 and Claude.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.59 2026-06-19 WeKan ® release
|
||||
|
||||
This release adds the following features:
|
||||
|
||||
- [Release All Platforms: Fix duplicate mapping keys in generated OpenAPI spec that broke API docs rendering](https://github.com/wekan/wekan/commit/69236a90620b792bbe95b9e60caef2ecd172b327).
|
||||
The **Release All Platforms** bump job regenerates `public/api/wekan.yml`
|
||||
via `openapi/generate_openapi.py` and then renders it with `@redocly/cli`,
|
||||
whose strict YAML parser rejects duplicate mapping keys. The 3-level nested
|
||||
SimpleSchema in `models/attachmentStorageSettings.js`
|
||||
(`storageConfig.filesystem.enabled`, `storageConfig.gridfs.enabled`, …)
|
||||
exposed two generator bugs: the sub-schema name was derived from only the
|
||||
first dotted path segment, collapsing `filesystem.*` and `gridfs.*` leaf
|
||||
keys (`enabled`/`read`/`write`) into one mapping; and the linear emitter
|
||||
reopened the parent schema header for each interleaved nested object. The
|
||||
generator now builds sub-schema names from all leading path segments and
|
||||
groups each sub-schema's fields contiguously, so deeply nested objects emit
|
||||
distinct, valid sub-schemas. Output is unchanged for existing 1- and
|
||||
2-level schemas.
|
||||
Thanks to xet7 and Claude.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.58 2026-06-19 WeKan ® release
|
||||
|
||||
This release adds the following features:
|
||||
|
||||
- [Release: bump both WeKan version fields in package-lock.json](https://github.com/wekan/wekan/commit/7c8ef380f54a6f1fe45ea834ee5927996631fe6c).
|
||||
`releases/version.sh` updated only the top-level `version` in
|
||||
`package-lock.json`, leaving the nested `packages.""` version stale
|
||||
(lockfileVersion 3 stores the root version twice). The local `release.sh`
|
||||
flow hid this because `rebuild-release.sh` re-runs `meteor npm install`
|
||||
before committing, but the remote **Release All Platforms** flow
|
||||
(`release-all.yml` bump job) commits `version.sh`'s output directly, so a
|
||||
stale `package-lock.json` was pushed to `main`. The bump now anchors on the
|
||||
`v`-prefixed WeKan version and replaces both root fields, never touching any
|
||||
dependency version (those are plain semver, no `v` prefix). Node.js (24.x)
|
||||
and MongoDB (7.x) bumps are unchanged — the pinned major is intentional and
|
||||
the minor/patch already updates any older 24.x/7.x to the newest. Thanks to
|
||||
xet7.
|
||||
|
||||
- [Don't auto-create an empty Template Container, and make user-created ones functional](https://github.com/wekan/wekan/commit/2a713a60b8620fe2b1d20968f2cd1ed88abf18a9).
|
||||
Opening **All Boards / Templates** no longer auto-creates an empty Template
|
||||
Container board (the board-list autorun that called `ensureTemplatesBoard` on
|
||||
view open is removed); the container is created only on demand via the
|
||||
**Add Template Container** button. To make a user-created container actually
|
||||
usable, `createBoardWithInitialSwimlanes` now wires the user's profile template
|
||||
pointers (`templatesBoardId` and the card/list/board template swimlane ids,
|
||||
keyed by a new per-swimlane `role`) when the board type is `template-container`
|
||||
— without this the container looked right but stayed inert, since
|
||||
`swimlane.isCardTemplatesSwimlane()`/… compare against those pointers to decide
|
||||
that an added card/list/swimlane/board becomes a template. Deleting a Template
|
||||
Container now clears those pointers for any user referencing it, so no
|
||||
save/insert-from-template path is left pointing at a dead board and a fresh
|
||||
container can be created. Adds Playwright e2e coverage
|
||||
([#5850](https://github.com/wekan/wekan/issues/5850),
|
||||
[#2339](https://github.com/wekan/wekan/issues/2339)). Thanks to xet7.
|
||||
|
||||
- [Make the All Boards / Templates redesign and org/team/domain board sharing work end-to-end](https://github.com/wekan/wekan/commit/422e70329).
|
||||
Fixes bugs the new Playwright e2e tests surfaced in the recently added features:
|
||||
the new server method modules are now actually loaded (they use an explicit
|
||||
server mainModule, so unimported files never registered their methods); the
|
||||
per-org/team feature-toggle methods and `setUserOrgsTeamsFromLdap` check their
|
||||
arguments before the admin guard (an unchecked-argument rejection was being
|
||||
turned into a full app crash by SyncedCron's global handler) and authorize from
|
||||
`this.userId`; the `boards` publication now publishes template-container and
|
||||
domain-shared boards (not only `type:'board'`); and the `/templates` and
|
||||
`/remaining` All Boards routes apply the same membership filtering as the home
|
||||
route ([#5850](https://github.com/wekan/wekan/issues/5850),
|
||||
[#4737](https://github.com/wekan/wekan/issues/4737),
|
||||
[#2339](https://github.com/wekan/wekan/issues/2339)). Thanks to xet7.
|
||||
|
||||
- [Enforce the per-org/team "Shared Templates" flag for drag-to-share](https://github.com/wekan/wekan/commit/8af4d7bfd).
|
||||
The All Boards / Templates drag-to-share now offers only the Organizations and
|
||||
Teams whose **Shared Templates** flag is enabled (previously the flag had no
|
||||
effect). A new non-admin `getMyShareableGroups` method returns the
|
||||
user's flagged orgs/teams (plus their email domains), since the org/team
|
||||
publications are admin-only ([#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Enforce the per-org/team "Propagate Members To Boards" flag](https://github.com/wekan/wekan/commit/27c2e4f2ced3515a1aae5c49138963b483763a36).
|
||||
When **Propagate Members To Boards** is enabled for an Organization or Team,
|
||||
its member users are now added as members of the regular boards that list that
|
||||
group (new admin- and server-callable `propagateOrgTeamMembersToBoards` method,
|
||||
also run at the end of the LDAP background sync). It is strictly add-only and
|
||||
skips template boards (which stay group-only)
|
||||
([#5850](https://github.com/wekan/wekan/issues/5850),
|
||||
[#4737](https://github.com/wekan/wekan/issues/4737)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Drag a Template Board onto an Organization, Team or Domain to share it](https://github.com/wekan/wekan/commit/0d0f5c8a5).
|
||||
On the **All Boards / Templates** view, the left menu shows the user's
|
||||
Organizations, Teams and Domains as drop targets (gated by the admin's Shared
|
||||
Templates scopes). Dragging a Template Board onto one shares the board with that
|
||||
org/team/domain (via `setBoardOrgs`/`setBoardTeams`/`setBoardDomains`) — add-only
|
||||
and adding no individual members ([#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [GlobalAdmin REST API for the Admin Panel global settings](https://github.com/wekan/wekan/commit/89481302d).
|
||||
Adds `GET /api/settings` and `PUT /api/settings`, restricted to the global
|
||||
admin, to read and update the Admin Panel global settings (registration,
|
||||
product name, logos, custom head/manifest, accessibility and support pages,
|
||||
etc.). A whitelist of fields is exposed; `mailServer`/SMTP credentials are
|
||||
never returned or writable over REST. Documented with `@operation` JSDoc
|
||||
(OpenAPI) and `api.py` examples (`getsettings`, `editsettings`).
|
||||
Thanks to xet7.
|
||||
|
||||
- [REST API for board domain sharing](https://github.com/wekan/wekan/commit/98a910917f4b37b5c4bec2525d8af0e45315b5b3).
|
||||
`GET` / `POST` / `DELETE /api/boards/:boardId/domains` list, add and remove the
|
||||
email domains a board is shared with, reusing the `setBoardDomains` validation
|
||||
and requiring board-admin (or site-admin) rights for changes. Documented in the
|
||||
generated OpenAPI spec with matching `api.py` examples
|
||||
([#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Admin Panel / People / Domains: list domains with per-domain user counts](https://github.com/wekan/wekan/commit/bdedb23add5160b1fd40ce6d68e3f1b5a89224f0).
|
||||
A new **Domains** tab in Admin Panel > People lists every email-address domain
|
||||
across all users with the count of users in each (each user counted once by
|
||||
their primary email's domain), backed by an admin-only
|
||||
`getDomainsWithUserCounts` method. This is the per-domain piece of the Template
|
||||
Boards sharing feature ([#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Template boards: members tab is group-only and shows only the creator](https://github.com/wekan/wekan/commit/3d7087365).
|
||||
On template boards (template-board / template-container) the board members
|
||||
**People** tab now shows only the original creator and hides the
|
||||
add-individual-member button, so these shared boards are shared only with
|
||||
groups (Organizations, Teams, Domains) — not individual users. Regular boards
|
||||
are unchanged ([#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Share a board with an email domain from the board members sidebar](https://github.com/wekan/wekan/commit/d4136a616076ed61a572e7905a49dc1169aafd0b).
|
||||
A new **Domains** tab in the board members sidebar lets a board admin type a
|
||||
domain (e.g. `example.com`) and add or remove it, backed by a board-admin-gated
|
||||
`setBoardDomains` method that trims, lowercases, validates and de-duplicates
|
||||
domains. Combined with the `board.domains` access wiring, every user whose
|
||||
primary email is in an active domain on the board gets access
|
||||
([#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Domain-based board sharing: board can be shared with an email domain](https://github.com/wekan/wekan/commit/c7c43fe78).
|
||||
Adds a `board.domains` field (mirroring `board.orgs`/`board.teams`) so a board
|
||||
can be shared with an email-address domain — every user whose primary email is
|
||||
in an active domain on the board gets access. Adds a `User.emailDomains()`
|
||||
helper and wires the new dimension into the board visibility selector, the
|
||||
board publications and the All Boards membership query
|
||||
([#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Auth sync marks the orgs/teams it manages as "Sync Members From Auth Provider"](https://github.com/wekan/wekan/commit/4973f68a2).
|
||||
When the LDAP/OIDC group sync creates or assigns an Organization or Team, it now
|
||||
sets that org/team's `orgSyncMembersFromAuth` / `teamSyncMembersFromAuth` flag,
|
||||
so the **Sync Members From Auth Provider** column in Admin Panel > People
|
||||
reflects which orgs/teams are auth-managed
|
||||
([#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [All Boards / Templates: URL routes, link redirect, no auto-created templates board](https://github.com/wekan/wekan/commit/6dd360ad37d0509d3f425a6d04797a3fe3e79b1a).
|
||||
The All Boards page's **Templates** and **Remaining** sub-views are now
|
||||
addressable by their own URLs (`/templates`, `/remaining`), so they can be
|
||||
linked and redirected to and switch the view live. The **Member Settings →
|
||||
Templates** menu link now opens the **All Boards / Templates** page instead of
|
||||
opening or creating a specific board. New users no longer get an auto-created
|
||||
"Templates" board at signup; the templates-container board (with its Card /
|
||||
List / Board Templates swimlanes) is instead created lazily on first use of the
|
||||
Templates view via a new `ensureTemplatesBoard` server method. This works for
|
||||
any authentication method (password, LDAP, OAuth2), existing users keep their
|
||||
templates board and all save-as-template functionality, and any user can still
|
||||
create additional template boards through **Create Board → Add template board**
|
||||
([#2339](https://github.com/wekan/wekan/issues/2339),
|
||||
[#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Optional setting to set admin status from OAuth2/OIDC groups](https://github.com/wekan/wekan/commit/392df15394937806b3c022998535fc78687c6809).
|
||||
Optional and off by default: when `OAUTH2_ADMIN_GROUPS` is set to a comma- or
|
||||
whitespace-separated list of group names, a user logging in via OAuth2/OIDC
|
||||
whose OIDC `groups` claim intersects that list is granted Wekan admin
|
||||
(`isAdmin`), applied both at login and at first-time account creation; the
|
||||
group data is accepted as either plain strings or objects with a display name.
|
||||
This mirrors the existing LDAP `LDAP_SYNC_ADMIN_GROUPS` behaviour. When
|
||||
`OAUTH2_ADMIN_GROUPS` is empty/unset (the default), admin status is left
|
||||
completely unchanged ([#5876](https://github.com/wekan/wekan/issues/5876)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Per-organization and per-team feature toggle columns in Admin Panel > People](https://github.com/wekan/wekan/commit/036bdffb940c906ae50f837d74f7cbaba3e6fb9a).
|
||||
Admin Panel > People > Organizations and Teams each gain three per-record
|
||||
checkbox columns, all disabled by default: **Shared Templates** (allow members
|
||||
to drag personal Template Boards onto this org/team), **Propagate Members To
|
||||
Boards** (add this org/team's members to the boards that list it), and **Sync
|
||||
Members From Auth Provider** (this org/team's membership is maintained by the
|
||||
authentication provider's group/membership sync — LDAP, OAuth2/OIDC, SAML,
|
||||
etc.). Each column header has **select-all / unselect-all**, and the
|
||||
per-tab search box filters the rows. All three flags are enforced: **Shared
|
||||
Templates** gates which orgs/teams are offered as drag-to-share targets,
|
||||
**Propagate Members To Boards** adds a flagged group's members to the regular
|
||||
boards that list it, and **Sync Members From Auth Provider** is set by the
|
||||
LDAP/OIDC group sync for the orgs/teams it manages
|
||||
([#4737](https://github.com/wekan/wekan/issues/4737),
|
||||
[#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Added Admin Panel setting to block avatar uploads](https://github.com/wekan/wekan/commit/d0a8b149ea7f81169dc44761b01b738009bc1126).
|
||||
Admin Panel > Attachments > Transfer limits now has an "Avatars" option that
|
||||
blocks users from uploading new avatars (board setting
|
||||
`limitSettings.avatarsUploadBlocked`, unchecked by default so avatars stay
|
||||
enabled). When blocked, the avatar upload option is hidden in the user's
|
||||
avatar popup and new uploads are rejected server-side — useful when avatars
|
||||
are synced from another source ([#4740](https://github.com/wekan/wekan/issues/4740)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Improvements to Template Boards and sharing them with Organizations, Teams and Domains](https://github.com/wekan/wekan/commit/aeb894feadbe4ae1fe2a6486953d36995646506a).
|
||||
Card and board templates already exist in WeKan; these are improvements to how
|
||||
Template Boards are managed and shared on the **All Boards** page
|
||||
([#5850](https://github.com/wekan/wekan/issues/5850)):
|
||||
- At **All Boards / Templates**, all of the user's own Board Templates are
|
||||
shown, with a dedicated **Add Template Board** button that creates a new
|
||||
Template Board there.
|
||||
- The **+ Add board** button at **All Boards / Remaining** no longer has an
|
||||
"Add template board" checkbox; creating a Template Board is now done only
|
||||
with the **Add Template Board** button under **All Boards / Templates**.
|
||||
- A Template Board can contain **Board, Swimlane, List and Card templates**.
|
||||
- Members of a Template Board can, on any board where they are a member, add
|
||||
those templates to their current board.
|
||||
- If a user belongs to an Organization, Team or Domain, and the Admin Panel
|
||||
has **Shared Templates for Organizations / Teams / Domains** enabled, then
|
||||
everyone in that Organization, Team or Domain can drag a personal Template
|
||||
Board at **All Boards / Templates** onto that Organization, Team or Domain
|
||||
board to share it.
|
||||
- **Domain** means the domain part of a user's email address (for example
|
||||
`example.com`): users that belong to that domain can drag a Template Board
|
||||
to that domain so it is shared with everyone in the domain.
|
||||
- New **Admin Panel / People / Domains** page that lists the domains and the
|
||||
count of users per domain.
|
||||
Thanks to xet7.
|
||||
|
||||
- [Optional setting to refuse unknown OAuth2/OIDC logins](https://github.com/wekan/wekan/commit/a64865f82626eb954028a718cc8e660d2b39065f).
|
||||
Optional and off by default: when `OAUTH2_AUTO_REGISTRATION=false`, a first-time
|
||||
OAuth2/OIDC login that does not already match a Wekan account (by verified
|
||||
email — the same secure key the existing account-merge logic uses) is rejected
|
||||
instead of silently creating a new account. This lets an instance allow only
|
||||
already-provisioned users (for example synced from LDAP) to sign in via OAuth2.
|
||||
The default `true` keeps the previous behaviour, so existing deployments are
|
||||
unaffected ([#4736](https://github.com/wekan/wekan/issues/4736)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Notify the assigned card member/assignee directly](https://github.com/wekan/wekan/commit/761b8fc82bb0c10767d868f7948f6a3bb9fac477).
|
||||
When a user is added as a card member or assignee, that user is now notified
|
||||
directly, so an assignment reaches the assignee themselves — instead of only
|
||||
board watchers, or (with `BIGEVENTS_PATTERN`) every active board member. The
|
||||
user who performed the assignment is still skipped, so self-assignment does
|
||||
not self-notify. Optional: opt out with `NOTIFY_ON_ASSIGN=false`; on by
|
||||
default ([#5833](https://github.com/wekan/wekan/issues/5833)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Export big boards: optional JSON export without attachments](https://github.com/wekan/wekan/commit/0557282c3f567ddf538e58631f4605310dfbd0e6).
|
||||
Very large boards could fail to export as JSON because every attachment is
|
||||
base64-encoded inline into a single object, which overflows the JSON
|
||||
serializer's maximum string length (and loads every attachment into memory at
|
||||
once). A new optional `?attachments=false` query parameter on
|
||||
`GET /api/boards/:boardId/export` exports the board structure and attachment
|
||||
metadata while skipping the base64 file data, so big boards export
|
||||
successfully; a matching **Export / JSON (without attachments)** entry is added
|
||||
to the board export menu. The default export is unchanged
|
||||
([#5870](https://github.com/wekan/wekan/issues/5870)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Fix LDAP sign-in failing when a DN or cn contains parentheses](https://github.com/wekan/wekan/commit/4dc955ed230b0df4d12dcbac5f450ccdf51fb8fb).
|
||||
The user's group-member value (e.g. a member DN or cn) was interpolated into
|
||||
the LDAP group search filter unescaped, so a value containing `(` or `)`
|
||||
produced `illegal unescaped char: (` and broke sign-in when
|
||||
`LDAP_SYNC_ADMIN_STATUS` (or any group sync) was enabled. Adds RFC 4515
|
||||
escaping for `( ) * \` and NUL in the group filter (also prevents filter
|
||||
injection) ([#5236](https://github.com/wekan/wekan/issues/5236)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Fix snap build failing to download Node.js (404)](https://github.com/wekan/wekan/commit/f74467837).
|
||||
The snapcraft Node.js download used the floating `latest-v24.x/` path with a
|
||||
pinned `node-v24.16.0` filename, which 404'd once upstream Node advanced past
|
||||
that release — failing the amd64 and arm64 snap builds. Pinned to the explicit,
|
||||
stable `https://nodejs.org/dist/v24.17.0/` path (matching the Dockerfile).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Keep LDAP admin status updated during background sync](https://github.com/wekan/wekan/commit/08b15929f15ad10c71d39a01da3ed961c727a4e9).
|
||||
`LDAP_SYNC_ADMIN_STATUS` previously only updated a user's admin status at
|
||||
login, so an admin-group change in LDAP was never reflected for existing users
|
||||
who did not log in. The background sync now applies the same admin-status logic
|
||||
to each existing LDAP user it syncs. Gated by the existing
|
||||
`LDAP_SYNC_ADMIN_STATUS` flag (default off), so default behaviour is unchanged
|
||||
([#4739](https://github.com/wekan/wekan/issues/4739)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Optionally make LDAP authoritative for user active status](https://github.com/wekan/wekan/commit/ba37ccb8e63ed9a9719694fb66448fb87037f4fa).
|
||||
New optional `LDAP_BACKGROUND_SYNC_DISABLE_NONEXISTANT_USERS` (default false):
|
||||
when enabled, the background sync disables (`loginDisabled`) LDAP-sourced users
|
||||
that are no longer found in the directory, and
|
||||
[re-enables](https://github.com/wekan/wekan/commit/d74105d43520950b269721747fa2f576504302e2)
|
||||
users that are present in LDAP again — so LDAP is the authoritative source of
|
||||
active status (matching the external `docs/Login/ldap-sync/ldap-sync.py`). Off
|
||||
by default; only LDAP-sourced users are considered. With the flag on, a manual
|
||||
disable of an LDAP user is overridden on the next sync
|
||||
([#4738](https://github.com/wekan/wekan/issues/4738)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Optionally sync LDAP groups as Organizations or Teams](https://github.com/wekan/wekan/commit/5a516b223e57cffd361a836a02e629188494c85e).
|
||||
New optional, default-off settings sync a user's LDAP groups into Wekan
|
||||
Organizations and/or Teams during background sync: `LDAP_SYNC_ORGANIZATIONS`
|
||||
and `LDAP_SYNC_TEAMS`, with optional comma-separated allowlists
|
||||
`LDAP_SYNC_ORGANIZATIONS_GROUPS` / `LDAP_SYNC_TEAMS_GROUPS` restricting which of
|
||||
the user's groups become orgs/teams (empty = all). The user's groups are read
|
||||
with the existing `LDAP_GROUP_FILTER_*` machinery; matching orgs/teams are
|
||||
created (active) if missing and added to the user's membership (add-only — no
|
||||
existing membership is ever removed). The sync runs both during background
|
||||
sync and at login ([commit](https://github.com/wekan/wekan/commit/a8eb12dcdf9a19d97457578c3ce00a65c763299d)).
|
||||
Off by default, so existing deployments are unaffected
|
||||
([#4737](https://github.com/wekan/wekan/issues/4737)).
|
||||
Thanks to xet7.
|
||||
|
||||
and updates the documentation:
|
||||
|
||||
- [Documented the new LDAP/OAuth2 env vars and template-sharing features](https://github.com/wekan/wekan/commit/fb856e3f7).
|
||||
Documents `LDAP_SYNC_ORGANIZATIONS`/`LDAP_SYNC_TEAMS` (+ group allowlists),
|
||||
`LDAP_BACKGROUND_SYNC_DISABLE_NONEXISTANT_USERS`, the LDAP admin-status and
|
||||
group-filter-escaping fixes, `OAUTH2_AUTO_REGISTRATION`, `OAUTH2_ADMIN_GROUPS`,
|
||||
`NOTIFY_ON_ASSIGN`, the Admin Panel Domains tab and org/team toggle columns,
|
||||
sharing a board with a domain, and group-only template boards.
|
||||
Thanks to xet7.
|
||||
|
||||
and adds the following tests:
|
||||
|
||||
- [Added e2e tests for domain-based board sharing](https://github.com/wekan/wekan/commit/2955c45330ff17be4d047441d6e707b00d42335a).
|
||||
Verifies `setBoardDomains` normalizes, validates and de-duplicates board
|
||||
domains (rejecting malformed entries), that the admin-only
|
||||
`getDomainsWithUserCounts` returns correct per-domain counts and denies
|
||||
non-admins, and that a board shared with a user's email domain becomes visible
|
||||
to that user ([#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Added e2e tests for the All Boards / Templates redesign](https://github.com/wekan/wekan/commit/e3f6b44982752a14813582d84881632983f2681a).
|
||||
Verifies the `ensureTemplatesBoard` method creates the templates container and
|
||||
is idempotent, that the `/templates` and `/remaining` routes show the right
|
||||
boards (template-container vs regular), and that the Member Settings → Templates
|
||||
link navigates to `/templates`
|
||||
([#2339](https://github.com/wekan/wekan/issues/2339),
|
||||
[#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Added e2e tests for the per-org/team feature toggle methods](https://github.com/wekan/wekan/commit/0a23f4c6d279ed45f66a6c49d671a3d2d22e8cd8).
|
||||
Verifies the admin-only per-org and per-team toggles (Shared Templates,
|
||||
Propagate Members To Boards, Sync Members From Auth Provider), the select-all /
|
||||
unselect-all bulk methods, and that a non-admin call is a silent no-op
|
||||
([#4737](https://github.com/wekan/wekan/issues/4737),
|
||||
[#5850](https://github.com/wekan/wekan/issues/5850)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Added a unit test for the OAuth2 admin-from-groups logic](https://github.com/wekan/wekan/commit/8110008efd634ea182bcfa3fb09be2d3ecfbada8).
|
||||
A runnable Node unit test for `oauth2AdminStatusFromGroups`: string and object
|
||||
group forms, comma/whitespace parsing, intersection with `OAUTH2_ADMIN_GROUPS`,
|
||||
and the default-off behaviour (no admin change when unset)
|
||||
([#5876](https://github.com/wekan/wekan/issues/5876)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Test harness: `db.insertOne` / `db.insertMany` now return the driver result](https://github.com/wekan/wekan/commit/4d7b0cf2f8d62b4108961f7205d931477f11fd18).
|
||||
The Playwright `mongo-runner` discarded the insert result, so `db.insertOne(...)`
|
||||
returned `null` and specs could not read `insertedId`; it now returns the
|
||||
result (empty `insertMany` yields `insertedCount` 0).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Added e2e test for LDAP group → Organization/Team sync](https://github.com/wekan/wekan/commit/168e541f5b83327f4ed3b0209681321efa78cab9).
|
||||
Verifies a group is created as a Team/Organization (active), added to the user,
|
||||
add-only (existing memberships preserved), idempotent, and that a non-admin
|
||||
call is rejected ([#4737](https://github.com/wekan/wekan/issues/4737)).
|
||||
Thanks to xet7.
|
||||
|
||||
- [Added more tests](https://github.com/wekan/wekan/commit/bbdbff7589bf6fe3a84aa95d701ca5f9dce6d1fd).
|
||||
Playwright e2e tests for the "Mark as complete" Show at Minicard option
|
||||
(`allowsDueCompleteOnMinicard` — hidden by default, shown when enabled) and the
|
||||
Admin Panel avatar-upload block (`isAvatarUploadBlocked` /
|
||||
`limitSettings.avatarsUploadBlocked` — disabled by default).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.57 2026-06-19 WeKan ® release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix Docker builds](https://github.com/wekan/wekan/commit/b46e1e7dcb584a1f5d60297e88aa7ec3b2ddd475).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.56 2026-06-18 WeKan ® release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Updated dependencies](https://github.com/wekan/wekan/pull/6395).
|
||||
Merged Dependabot update: dompurify 3.4.9 → 3.4.11
|
||||
([#6395](https://github.com/wekan/wekan/pull/6395)), a patch update of the
|
||||
HTML sanitizer used for XSS protection.
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.55 2026-06-18 WeKan ® release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fixed "Release All Platforms" snap build failing at upload with exit 64](https://github.com/wekan/wekan/commit/ddfe351968f629b619cd757c410a222381d11f98).
|
||||
The Launchpad snap build produced no `.snap` (only build logs), but
|
||||
`snapcraft remote-build` exited 0 so the workflow reported success; the upload
|
||||
step then globbed `wekan_<version>_*.snap`, matched nothing, and passed the
|
||||
literal pattern to `snapcraft upload` ("is not a valid file", exit 64).
|
||||
Hardened the workflow to verify a `.snap` was actually produced (instead of
|
||||
trusting the exit code alone), print the Launchpad build logs when it was not,
|
||||
and use `nullglob` + existence checks in the upload/attach steps so a no-match
|
||||
fails clearly instead of cryptically. Also made `releases/version.sh` set
|
||||
`snapcraft.yaml`'s `version:` robustly — matching `^version:` rather than a
|
||||
hard-coded line number and tolerating any quoting, then verifying the change
|
||||
applied — so the snap can no longer be built with a stale version that the
|
||||
upload glob cannot match, and the snap job fails fast if the tagged version
|
||||
does not match the release.
|
||||
Thanks to xet7.
|
||||
|
||||
and adds the following features:
|
||||
|
||||
- [Build WeKan server bundles for s390x, ppc64le and armv7l](https://github.com/wekan/wekan/commit/61c8b2fb244dcdfbd097122de6f0250b10a8f151).
|
||||
The "Release All Platforms" workflow now also builds the WeKan server bundle
|
||||
for every other architecture Node.js 24.x publishes binaries for — s390x,
|
||||
ppc64le and armv7l — by rebuilding the bundle's native modules under QEMU
|
||||
emulation, and attaches each `wekan-<version>-<arch>.zip` to the GitHub Release
|
||||
as an extra download. These extra-architecture bundles are not part of the
|
||||
Docker image or snap (run a separate MongoDB on those platforms), and are built
|
||||
independently so a slow or failing emulated build never blocks the main
|
||||
amd64/arm64/win64/mac release, Docker or snap.
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.54 2026-06-18 WeKan ® release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Updated dependencies](https://github.com/wekan/wekan/commit/ebc0f017bf2d0a6183a35cdd2b829a0cfff436ed).
|
||||
Merged Dependabot dependency updates: mongodb 6.21.0 → 7.3.0 in the
|
||||
tests/playwright e2e harness ([#6393](https://github.com/wekan/wekan/pull/6393)),
|
||||
@aws-sdk/client-s3 3.1054.0 → 3.1071.0 ([#6390](https://github.com/wekan/wekan/pull/6390)),
|
||||
@google-cloud/storage 7.19.0 → 7.21.0 ([#6391](https://github.com/wekan/wekan/pull/6391)),
|
||||
@typescript-eslint/eslint-plugin 8.60.1 → 8.61.1 ([#6392](https://github.com/wekan/wekan/pull/6392)),
|
||||
and @tweedegolf/sab-adapter-google-cloud 1.0.10 → 3.0.2 ([#6389](https://github.com/wekan/wekan/pull/6389)).
|
||||
Thanks to xet7.
|
||||
- [Updated docs](https://github.com/wekan/wekan/commit/85909d08cc8cb86299bf69b1c22cbded47f4c8c9).
|
||||
Thanks to xet7.
|
||||
|
||||
and adds the following features:
|
||||
|
||||
- [Added a "Show at Minicard" option for the Card Settings "Mark as complete" toggle](https://github.com/wekan/wekan/commit/d6a8f4386671630468fa61a8e98c4435c2c97803).
|
||||
The "Mark as complete" row in Board Settings → Card Settings now has its own "Show at Minicard"
|
||||
checkbox (new board setting `allowsDueCompleteOnMinicard`), unchecked by
|
||||
default — so the complete toggle is no longer shown on the current board's
|
||||
minicards unless it is explicitly enabled.
|
||||
Thanks to xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Updated tests](https://github.com/wekan/wekan/commit/6d6c26dd9bb2cac2c1660bf885078b1ae396fae6).
|
||||
Thanks to xet7.
|
||||
- [Explain to Dependabot to not complain about rspack](https://github.com/wekan/wekan/commit/d09b72670cf07e358738717093ad138c33c9fd2c).
|
||||
Thanks to xet7.
|
||||
- [Fixed Card Settings toggles (e.g. "Mark as complete") could not be reversed
|
||||
without refreshing the page](https://github.com/wekan/wekan/issues/6385).
|
||||
The Board Settings → Card Settings popup (`boardCardSettingsPopup`) cached the
|
||||
board once in `onCreated` as a non-reactive snapshot, but its toggle handlers
|
||||
computed the new value from that snapshot (`!tpl.currentBoard.allowsX`). So the
|
||||
first toggle worked, but reversing it recomputed `!oldValue` from the stale
|
||||
snapshot and set the same value again — it only "reset" after a page refresh
|
||||
re-took the snapshot. Fixed by re-reading the board reactively in an `autorun`,
|
||||
so every Card Settings toggle works both ways without a refresh. The same fix
|
||||
was applied to the Subtask Settings popup, which had the identical pattern.
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.53 2026-06-18 WeKan ® release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fixed Playwright e2e tests all failing because `Meteor` was not a browser global](https://github.com/wekan/wekan/commit/640d8ddadba64fde43c49a28b0fa39e30fbed105).
|
||||
Every Playwright end-to-end test (all 183, across Chromium, Firefox and WebKit) failed at
|
||||
the `waitForMeteor` step with `TimeoutError: page.waitForFunction`, because
|
||||
`typeof Meteor` was `undefined` in the browser `window` scope. Under the Meteor 3.5 +
|
||||
rspack build, bare `Meteor` references in app code are rewritten by rspack's ProvidePlugin
|
||||
into per-module imports, so `Meteor` is no longer placed on `window` the way the classic
|
||||
Meteor linker did. The tests call `Meteor.loginWithToken` / `Meteor.userId` /
|
||||
`Meteor.subscribe` etc. via `page.evaluate` (which runs in `window` scope), so they could
|
||||
never proceed past login. Fixed by re-exposing `window.Meteor = Meteor` early in
|
||||
`client/00-startup.js`, restoring the long-standing classic-Meteor behaviour where `Meteor`
|
||||
is a global (also handy in the browser console).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v9.52 2026-06-18 WeKan ® release
|
||||
|
||||
This release fixes the following CRITICAL SECURITY ISSUE of [InputBleed](https://wekan.fi/hall-of-fame/inputbleed/):
|
||||
|
||||
+18
-3
@@ -7,14 +7,14 @@ LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
|
||||
# TARGETARCH and TARGETVARIANT are automatically provided by Docker Buildx
|
||||
ARG TARGETARCH
|
||||
ARG TARGETVARIANT
|
||||
ARG VERSION=9.52
|
||||
ARG VERSION=9.63
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV BUILD_DEPS="apt-utils gnupg wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3 unzip"
|
||||
|
||||
ENV \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=v24.16.0 \
|
||||
NODE_VERSION=v24.17.0 \
|
||||
METEOR_RELEASE=METEOR@3.5-beta.12 \
|
||||
USE_EDGE=false \
|
||||
NPM_VERSION=11.11.0 \
|
||||
@@ -42,6 +42,7 @@ ENV \
|
||||
IMAGE_COMPRESS_RATIO="" \
|
||||
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
|
||||
BIGEVENTS_PATTERN=NONE \
|
||||
NOTIFY_ON_ASSIGN="true" \
|
||||
NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
|
||||
NOTIFY_DUE_AT_HOUR_OF_DAY="" \
|
||||
EMAIL_NOTIFICATION_TIMEOUT=30000 \
|
||||
@@ -68,6 +69,8 @@ ENV \
|
||||
OAUTH2_TOKEN_ENDPOINT="" \
|
||||
OAUTH2_ID_MAP="" \
|
||||
OAUTH2_USERNAME_MAP="" \
|
||||
OAUTH2_AUTO_REGISTRATION="true" \
|
||||
OAUTH2_ADMIN_GROUPS="" \
|
||||
OAUTH2_FULLNAME_MAP="" \
|
||||
OAUTH2_ID_TOKEN_WHITELIST_FIELDS="" \
|
||||
OAUTH2_REQUEST_PERMISSIONS='openid profile email' \
|
||||
@@ -93,6 +96,7 @@ ENV \
|
||||
LDAP_BACKGROUND_SYNC_INTERVAL="" \
|
||||
LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false \
|
||||
LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false \
|
||||
LDAP_BACKGROUND_SYNC_DISABLE_NONEXISTANT_USERS=false \
|
||||
LDAP_ENCRYPTION=false \
|
||||
LDAP_CA_CERT="" \
|
||||
LDAP_REJECT_UNAUTHORIZED=false \
|
||||
@@ -122,6 +126,10 @@ ENV \
|
||||
LDAP_DEFAULT_DOMAIN="" \
|
||||
LDAP_SYNC_ADMIN_STATUS="" \
|
||||
LDAP_SYNC_ADMIN_GROUPS="" \
|
||||
LDAP_SYNC_ORGANIZATIONS=false \
|
||||
LDAP_SYNC_ORGANIZATIONS_GROUPS="" \
|
||||
LDAP_SYNC_TEAMS=false \
|
||||
LDAP_SYNC_TEAMS_GROUPS="" \
|
||||
HEADER_LOGIN_ID="" \
|
||||
HEADER_LOGIN_FIRSTNAME="" \
|
||||
HEADER_LOGIN_LASTNAME="" \
|
||||
@@ -207,7 +215,14 @@ ln -sf $(which bsdtar) $(which tar)
|
||||
# WeKan Bundle Installation
|
||||
mkdir -p /home/wekan/app
|
||||
cd /home/wekan/app
|
||||
wget "https://github.com/wekan/wekan/releases/download/v${VERSION}/wekan-${VERSION}-${WEKAN_ARCH}.zip"
|
||||
# Retry the release-asset download: even though the CI `docker` job needs the
|
||||
# `release` job (so the asset is already uploaded), GitHub's
|
||||
# releases/download/<tag>/<asset> URL can briefly return 404 right after upload
|
||||
# (CDN/propagation lag). A plain wget treats 404 as fatal, which failed the
|
||||
# build; retry on transient HTTP errors so propagation lag no longer breaks it.
|
||||
WEKAN_ZIP_URL="https://github.com/wekan/wekan/releases/download/v${VERSION}/wekan-${VERSION}-${WEKAN_ARCH}.zip"
|
||||
wget --tries=20 --waitretry=20 --retry-on-http-error=404,403,500,502,503 "${WEKAN_ZIP_URL}" \
|
||||
|| { echo "Failed to download ${WEKAN_ZIP_URL} after retries"; exit 8; }
|
||||
unzip "wekan-${VERSION}-${WEKAN_ARCH}.zip"
|
||||
rm "wekan-${VERSION}-${WEKAN_ARCH}.zip"
|
||||
npm install --prefix ./bundle/programs/server
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v9.52.0"
|
||||
appVersion: "v9.63.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -83,6 +83,11 @@ If *nix: chmod +x api.py => ./api.py users
|
||||
python3 api.py removeboardmember BOARDID USERID # Remove (deactivate) board member
|
||||
python3 api.py setboardmemberrole BOARDID USERID ROLE # Change permission/role of existing board member
|
||||
|
||||
Board Domain Sharing API (Issue #5850):
|
||||
python3 api.py boarddomains BOARDID # List the email domains a board is shared with
|
||||
python3 api.py addboarddomain BOARDID DOMAIN # Share board with an email domain, e.g. example.com
|
||||
python3 api.py removeboarddomain BOARDID DOMAIN # Stop sharing board with an email domain
|
||||
|
||||
Card Member / Assignee API (board member -> card member/assignee):
|
||||
python3 api.py setcardmembers BOARDID LISTID CARDID MEMBERIDS # Set card members. MEMBERIDS = comma-separated userIds, or '' to clear
|
||||
python3 api.py setcardassignees BOARDID LISTID CARDID ASSIGNEEIDS # Set card assignees. ASSIGNEEIDS = comma-separated userIds, or '' to clear
|
||||
@@ -126,6 +131,19 @@ If *nix: chmod +x api.py => ./api.py users
|
||||
|
||||
Admin API:
|
||||
python3 api.py newuser USERNAME EMAIL PASSWORD
|
||||
|
||||
GlobalAdmin REST API (admin token required):
|
||||
python3 api.py getsettings # Get the global Admin Panel settings
|
||||
python3 api.py editsettings FIELD VALUE # Set one global settings field, e.g. productName "My WeKan", disableRegistration true
|
||||
python3 api.py admindomains # List email domains with user counts (#5850)
|
||||
python3 api.py attachmentsettings # Get attachment storage / upload-block settings (secrets masked)
|
||||
python3 api.py editattachmentsetting DOTTED.FIELD VALUE # Set one attachment setting, e.g. limitSettings.avatarsUploadBlocked true (#4740)
|
||||
python3 api.py adminorgs # List organizations with feature toggles (#4737)
|
||||
python3 api.py editorgfeature ORGID FIELD true|false # Set one org feature: orgSharedTemplates, orgPropagateMembersToBoards, orgSyncMembersFromAuth
|
||||
python3 api.py editallorgfeature FIELD true|false # Set one org feature on ALL orgs
|
||||
python3 api.py adminteams # List teams with feature toggles (#4737)
|
||||
python3 api.py editteamfeature TEAMID FIELD true|false # Set one team feature: teamSharedTemplates, teamPropagateMembersToBoards, teamSyncMembersFromAuth
|
||||
python3 api.py editallteamfeature FIELD true|false # Set one team feature on ALL teams
|
||||
"""
|
||||
|
||||
if arguments == 0:
|
||||
@@ -225,6 +243,7 @@ ats = 'attachments'
|
||||
users = wekanurl + apiusers
|
||||
user = wekanurl + apiuser
|
||||
allusers = wekanurl + apiallusers
|
||||
settings = wekanurl + 'api/settings'
|
||||
|
||||
# ------- API URL GENERATION END -----------
|
||||
|
||||
@@ -797,6 +816,155 @@ if arguments >= 1:
|
||||
print(data2)
|
||||
# ------- LIST OF USERS END -----------
|
||||
|
||||
if arguments == 1 and sys.argv[1] == 'getsettings':
|
||||
# ------- GET GLOBAL ADMIN SETTINGS START -----------
|
||||
# GlobalAdmin REST API: read the Admin Panel global settings.
|
||||
# Requires an admin API token. Mail-server credentials are never returned.
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
print(settings)
|
||||
print("=== GLOBAL ADMIN SETTINGS ===\n")
|
||||
body = requests.get(settings, headers=headers)
|
||||
print(body.text)
|
||||
# ------- GET GLOBAL ADMIN SETTINGS END -----------
|
||||
|
||||
if arguments >= 3 and sys.argv[1] == 'editsettings':
|
||||
# ------- EDIT GLOBAL ADMIN SETTINGS START -----------
|
||||
# GlobalAdmin REST API: set one Admin Panel global settings field.
|
||||
# Usage: python3 api.py editsettings <field> <value>
|
||||
# e.g. python3 api.py editsettings productName "My WeKan"
|
||||
# python3 api.py editsettings disableRegistration true
|
||||
headers = {'Accept': 'application/json', 'Content-type': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
field = sys.argv[2]
|
||||
raw = sys.argv[3]
|
||||
# Convert true/false to booleans; leave everything else as a string.
|
||||
if raw in ('true', 'false'):
|
||||
value = (raw == 'true')
|
||||
else:
|
||||
value = raw
|
||||
body = requests.put(settings, json={field: value}, headers=headers)
|
||||
print(body.text)
|
||||
# ------- EDIT GLOBAL ADMIN SETTINGS END -----------
|
||||
|
||||
if arguments == 1 and sys.argv[1] == 'admindomains':
|
||||
# ------- LIST ADMIN DOMAINS START -----------
|
||||
# GlobalAdmin REST API: email domains with user counts (#5850).
|
||||
admindomainsurl = wekanurl + 'api/admin/domains'
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
print("=== ADMIN DOMAINS ===\n")
|
||||
body = requests.get(admindomainsurl, headers=headers)
|
||||
print(body.text)
|
||||
# ------- LIST ADMIN DOMAINS END -----------
|
||||
|
||||
if arguments == 1 and sys.argv[1] == 'attachmentsettings':
|
||||
# ------- GET ATTACHMENT SETTINGS START -----------
|
||||
# GlobalAdmin REST API: attachment storage / upload-block settings.
|
||||
# Secrets (S3/Azure/GCS) are masked; a <field>Set marker shows existence.
|
||||
attachmentsettingsurl = wekanurl + 'api/admin/attachment-settings'
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
print("=== ATTACHMENT SETTINGS ===\n")
|
||||
body = requests.get(attachmentsettingsurl, headers=headers)
|
||||
print(body.text)
|
||||
# ------- GET ATTACHMENT SETTINGS END -----------
|
||||
|
||||
if arguments >= 3 and sys.argv[1] == 'editattachmentsetting':
|
||||
# ------- EDIT ATTACHMENT SETTING START -----------
|
||||
# GlobalAdmin REST API: set one attachment setting by dotted path.
|
||||
# Usage: python3 api.py editattachmentsetting <dotted.field> <value>
|
||||
# e.g. python3 api.py editattachmentsetting limitSettings.avatarsUploadBlocked true
|
||||
attachmentsettingsurl = wekanurl + 'api/admin/attachment-settings'
|
||||
headers = {'Accept': 'application/json', 'Content-type': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
field = sys.argv[2]
|
||||
raw = sys.argv[3]
|
||||
# Convert true/false to booleans; leave everything else as a string.
|
||||
if raw in ('true', 'false'):
|
||||
value = (raw == 'true')
|
||||
else:
|
||||
value = raw
|
||||
# Expand a dotted path (e.g. limitSettings.avatarsUploadBlocked) into
|
||||
# the nested object the partial-update endpoint expects.
|
||||
body_obj = {}
|
||||
cursor = body_obj
|
||||
parts = field.split('.')
|
||||
for part in parts[:-1]:
|
||||
cursor[part] = {}
|
||||
cursor = cursor[part]
|
||||
cursor[parts[-1]] = value
|
||||
body = requests.put(attachmentsettingsurl, json=body_obj, headers=headers)
|
||||
print(body.text)
|
||||
# ------- EDIT ATTACHMENT SETTING END -----------
|
||||
|
||||
if arguments == 1 and sys.argv[1] == 'adminorgs':
|
||||
# ------- LIST ADMIN ORGS START -----------
|
||||
# GlobalAdmin REST API: orgs with feature toggles (#4737).
|
||||
adminorgsurl = wekanurl + 'api/admin/orgs'
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
print("=== ADMIN ORGS ===\n")
|
||||
body = requests.get(adminorgsurl, headers=headers)
|
||||
print(body.text)
|
||||
# ------- LIST ADMIN ORGS END -----------
|
||||
|
||||
if arguments >= 3 and sys.argv[1] == 'editorgfeature':
|
||||
# ------- EDIT ORG FEATURE START -----------
|
||||
# Usage: python3 api.py editorgfeature <orgId> <field> <true|false>
|
||||
# field: orgSharedTemplates, orgPropagateMembersToBoards, orgSyncMembersFromAuth
|
||||
orgid = sys.argv[2]
|
||||
field = sys.argv[3]
|
||||
raw = sys.argv[4]
|
||||
value = (raw == 'true')
|
||||
editorgfeatureurl = wekanurl + 'api/admin/orgs/' + orgid + '/features'
|
||||
headers = {'Accept': 'application/json', 'Content-type': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
body = requests.put(editorgfeatureurl, json={field: value}, headers=headers)
|
||||
print(body.text)
|
||||
# ------- EDIT ORG FEATURE END -----------
|
||||
|
||||
if arguments >= 2 and sys.argv[1] == 'editallorgfeature':
|
||||
# ------- EDIT ALL ORG FEATURE START -----------
|
||||
# Usage: python3 api.py editallorgfeature <field> <true|false>
|
||||
field = sys.argv[2]
|
||||
raw = sys.argv[3]
|
||||
value = (raw == 'true')
|
||||
editallorgfeatureurl = wekanurl + 'api/admin/orgs/features'
|
||||
headers = {'Accept': 'application/json', 'Content-type': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
body = requests.put(editallorgfeatureurl, json={'field': field, 'value': value}, headers=headers)
|
||||
print(body.text)
|
||||
# ------- EDIT ALL ORG FEATURE END -----------
|
||||
|
||||
if arguments == 1 and sys.argv[1] == 'adminteams':
|
||||
# ------- LIST ADMIN TEAMS START -----------
|
||||
# GlobalAdmin REST API: teams with feature toggles (#4737).
|
||||
adminteamsurl = wekanurl + 'api/admin/teams'
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
print("=== ADMIN TEAMS ===\n")
|
||||
body = requests.get(adminteamsurl, headers=headers)
|
||||
print(body.text)
|
||||
# ------- LIST ADMIN TEAMS END -----------
|
||||
|
||||
if arguments >= 3 and sys.argv[1] == 'editteamfeature':
|
||||
# ------- EDIT TEAM FEATURE START -----------
|
||||
# Usage: python3 api.py editteamfeature <teamId> <field> <true|false>
|
||||
# field: teamSharedTemplates, teamPropagateMembersToBoards, teamSyncMembersFromAuth
|
||||
teamid = sys.argv[2]
|
||||
field = sys.argv[3]
|
||||
raw = sys.argv[4]
|
||||
value = (raw == 'true')
|
||||
editteamfeatureurl = wekanurl + 'api/admin/teams/' + teamid + '/features'
|
||||
headers = {'Accept': 'application/json', 'Content-type': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
body = requests.put(editteamfeatureurl, json={field: value}, headers=headers)
|
||||
print(body.text)
|
||||
# ------- EDIT TEAM FEATURE END -----------
|
||||
|
||||
if arguments >= 2 and sys.argv[1] == 'editallteamfeature':
|
||||
# ------- EDIT ALL TEAM FEATURE START -----------
|
||||
# Usage: python3 api.py editallteamfeature <field> <true|false>
|
||||
field = sys.argv[2]
|
||||
raw = sys.argv[3]
|
||||
value = (raw == 'true')
|
||||
editallteamfeatureurl = wekanurl + 'api/admin/teams/features'
|
||||
headers = {'Accept': 'application/json', 'Content-type': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
body = requests.put(editallteamfeatureurl, json={'field': field, 'value': value}, headers=headers)
|
||||
print(body.text)
|
||||
# ------- EDIT ALL TEAM FEATURE END -----------
|
||||
|
||||
if arguments == 1 and sys.argv[1] == 'user':
|
||||
# ------- LIST OF ALL USERS START -----------
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
@@ -1174,6 +1342,48 @@ if arguments >= 1:
|
||||
print(body.text)
|
||||
# ------- SET BOARD MEMBER ROLE END -----------
|
||||
|
||||
if sys.argv[1] == 'boarddomains':
|
||||
# ------- LIST BOARD DOMAINS START -----------
|
||||
if arguments < 2:
|
||||
print("Usage: python3 api.py boarddomains BOARDID")
|
||||
exit(1)
|
||||
boardid = sys.argv[2]
|
||||
domains_url = wekanurl + apiboards + boardid + s + 'domains'
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
body = requests.get(domains_url, headers=headers)
|
||||
print("=== BOARD DOMAINS ===\n")
|
||||
print(body.text)
|
||||
# ------- LIST BOARD DOMAINS END -----------
|
||||
|
||||
if sys.argv[1] == 'addboarddomain':
|
||||
# ------- ADD BOARD DOMAIN START -----------
|
||||
if arguments < 3:
|
||||
print("Usage: python3 api.py addboarddomain BOARDID DOMAIN")
|
||||
exit(1)
|
||||
boardid = sys.argv[2]
|
||||
domain = sys.argv[3]
|
||||
add_domain_url = wekanurl + apiboards + boardid + s + 'domains'
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
post_data = {'domain': '{}'.format(domain)}
|
||||
body = requests.post(add_domain_url, data=post_data, headers=headers)
|
||||
print("=== ADD BOARD DOMAIN ===\n")
|
||||
print(body.text)
|
||||
# ------- ADD BOARD DOMAIN END -----------
|
||||
|
||||
if sys.argv[1] == 'removeboarddomain':
|
||||
# ------- REMOVE BOARD DOMAIN START -----------
|
||||
if arguments < 3:
|
||||
print("Usage: python3 api.py removeboarddomain BOARDID DOMAIN")
|
||||
exit(1)
|
||||
boardid = sys.argv[2]
|
||||
domain = sys.argv[3]
|
||||
remove_domain_url = wekanurl + apiboards + boardid + s + 'domains' + s + domain
|
||||
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
|
||||
body = requests.delete(remove_domain_url, headers=headers)
|
||||
print("=== REMOVE BOARD DOMAIN ===\n")
|
||||
print(body.text)
|
||||
# ------- REMOVE BOARD DOMAIN END -----------
|
||||
|
||||
if sys.argv[1] in ('setcardmembers', 'setcardassignees'):
|
||||
# ------- SET CARD MEMBERS / ASSIGNEES START -----------
|
||||
if arguments < 4:
|
||||
|
||||
@@ -14,6 +14,17 @@ try {
|
||||
}
|
||||
} catch (_) {}
|
||||
|
||||
// Expose Meteor on window. Under the Meteor 3.5 + rspack build, bare `Meteor`
|
||||
// references in app code are rewritten by rspack's ProvidePlugin into per-module
|
||||
// imports, so `Meteor` is NOT placed on the browser `window` the way the classic
|
||||
// Meteor linker did. Re-expose it so the browser console and the Playwright e2e
|
||||
// tests (which call Meteor.loginWithToken / Meteor.userId / Meteor.subscribe etc.
|
||||
// via page.evaluate in window scope) can reach it. This matches the long-standing
|
||||
// classic-Meteor behaviour where `Meteor` is a global.
|
||||
if (typeof window !== 'undefined') {
|
||||
window.Meteor = Meteor;
|
||||
}
|
||||
|
||||
// Fix bug in jam:offline 0.4.1: s?.message.includes() crashes when s.message is
|
||||
// undefined (e.g. during WebSocket reconnect errors that don't carry a .message).
|
||||
// Wrap _debug so the optional chain is complete: s?.message?.includes().
|
||||
|
||||
@@ -266,9 +266,6 @@ template(name="createBoard")
|
||||
= " "
|
||||
| {{{_ 'board-private-info'}}}
|
||||
a.js-change-visibility {{_ 'change'}}.
|
||||
a.flex.js-toggle-add-template-container
|
||||
.materialCheckBox#add-template-container
|
||||
span {{_ 'add-template-container'}}
|
||||
input.primary.wide(type="submit" value="{{_ 'create'}}")
|
||||
span.quiet
|
||||
| {{_ 'or'}}
|
||||
@@ -295,9 +292,6 @@ template(name="createBoardPopup")
|
||||
= " "
|
||||
| {{{_ 'board-private-info'}}}
|
||||
a.js-change-visibility {{_ 'change'}}.
|
||||
a.flex.js-toggle-add-template-container
|
||||
.materialCheckBox#add-template-container
|
||||
span {{_ 'add-template-container'}}
|
||||
input.primary.wide(type="submit" value="{{_ 'create'}}")
|
||||
span.quiet
|
||||
| {{_ 'or'}}
|
||||
@@ -324,9 +318,6 @@ template(name="headerBarCreateBoardPopup")
|
||||
= " "
|
||||
| {{{_ 'board-private-info'}}}
|
||||
a.js-change-visibility {{_ 'change'}}.
|
||||
a.flex.js-toggle-add-template-container
|
||||
.materialCheckBox#add-template-container
|
||||
span {{_ 'add-template-container'}}
|
||||
input.primary.wide(type="submit" value="{{_ 'create'}}")
|
||||
span.quiet
|
||||
| {{_ 'or'}}
|
||||
@@ -354,9 +345,6 @@ template(name="createTemplateContainerPopup")
|
||||
= " "
|
||||
| {{{_ 'board-private-info'}}}
|
||||
a.js-change-visibility {{_ 'change'}}.
|
||||
a.flex.js-toggle-add-template-container
|
||||
.materialCheckBox#add-template-container
|
||||
span {{_ 'add-template-container'}}
|
||||
input.primary.wide(type="submit" value="{{_ 'create'}}")
|
||||
span.quiet
|
||||
| {{_ 'or'}}
|
||||
|
||||
@@ -231,6 +231,9 @@ function setupCreateBoardState(tpl) {
|
||||
tpl.visibilityMenuIsOpen = new ReactiveVar(false);
|
||||
tpl.visibility = new ReactiveVar('private');
|
||||
tpl.boardId = new ReactiveVar('');
|
||||
// #5850: default to creating a regular board; the dedicated
|
||||
// createTemplateContainerPopup sets this true in its onRendered.
|
||||
Session.set('createBoardAsTemplate', false);
|
||||
Meteor.subscribe('tableVisibilityModeSettings');
|
||||
}
|
||||
|
||||
@@ -256,7 +259,11 @@ async function createBoardSubmit(tpl, event) {
|
||||
const title = tpl.find('.js-new-board-title').value;
|
||||
const slug = getSlug(title) || 'board';
|
||||
|
||||
const addTemplateContainer = $('#add-template-container.is-checked').length > 0;
|
||||
// #5850: template boards are created via the dedicated "Add Template Board"
|
||||
// flow (createTemplateContainerPopup), signalled by this Session flag, rather
|
||||
// than a checkbox on the generic Create Board popup. Consume it immediately.
|
||||
const addTemplateContainer = Session.get('createBoardAsTemplate') === true;
|
||||
Session.set('createBoardAsTemplate', false);
|
||||
if (addTemplateContainer) {
|
||||
tpl.boardId.set(
|
||||
await Meteor.callAsync('createBoardWithInitialSwimlanes', {
|
||||
@@ -266,9 +273,9 @@ async function createBoardSubmit(tpl, event) {
|
||||
type: 'template-container',
|
||||
migrationVersion: 1,
|
||||
swimlanes: [
|
||||
{ title: 'Card Templates', sort: 1, type: 'template-container' },
|
||||
{ title: 'List Templates', sort: 2, type: 'template-container' },
|
||||
{ title: 'Board Templates', sort: 3, type: 'template-container' },
|
||||
{ title: 'Card Templates', sort: 1, type: 'template-container', role: 'card' },
|
||||
{ title: 'List Templates', sort: 2, type: 'template-container', role: 'list' },
|
||||
{ title: 'Board Templates', sort: 3, type: 'template-container', role: 'board' },
|
||||
],
|
||||
}),
|
||||
);
|
||||
@@ -324,9 +331,6 @@ function createBoardEvents() {
|
||||
},
|
||||
'click .js-import-board': Popup.open('chooseBoardSource'),
|
||||
'click .js-board-template': Popup.open('searchElement'),
|
||||
'click .js-toggle-add-template-container'() {
|
||||
$('#add-template-container').toggleClass('is-checked');
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -354,8 +358,8 @@ Template.createTemplateContainerPopup.onCreated(function () {
|
||||
});
|
||||
|
||||
Template.createTemplateContainerPopup.onRendered(function () {
|
||||
// Always pre-check the template container checkbox for this popup
|
||||
$('#add-template-container').addClass('is-checked');
|
||||
// #5850: this dedicated popup always creates a template board.
|
||||
Session.set('createBoardAsTemplate', true);
|
||||
});
|
||||
|
||||
Template.createTemplateContainerPopup.helpers(createBoardHelpers());
|
||||
@@ -384,9 +388,6 @@ Template.headerBarCreateBoardPopup.events({
|
||||
},
|
||||
'click .js-import-board': Popup.open('chooseBoardSource'),
|
||||
'click .js-board-template': Popup.open('searchElement'),
|
||||
'click .js-toggle-add-template-container'() {
|
||||
$('#add-template-container').toggleClass('is-checked');
|
||||
},
|
||||
});
|
||||
|
||||
Template.boardVisibilityList.helpers({
|
||||
|
||||
@@ -27,6 +27,15 @@ template(name="boardList")
|
||||
i.fa.fa-folder
|
||||
| {{_ 'allboards.remaining'}}
|
||||
span.menu-count {{menuItemCount 'remaining'}}
|
||||
if isSelectedMenu 'templates'
|
||||
if shareTargets.length
|
||||
li.menu-section-title {{_ 'share-template-with'}}
|
||||
each shareTargets
|
||||
li.menu-item.js-share-target(data-share-type="{{type}}", data-share-id="{{id}}", data-share-name="{{name}}", title="{{_ 'drag-template-here-to-share'}}")
|
||||
span.menu-label
|
||||
span.emoji-icon
|
||||
i.fa.fa-share-alt
|
||||
| {{name}}
|
||||
.workspaces-header
|
||||
span
|
||||
span.emoji-icon
|
||||
|
||||
@@ -11,6 +11,50 @@ import { Utils } from '/client/lib/utils';
|
||||
|
||||
// SubsManager removed for Meteor 3 migration
|
||||
|
||||
// #5850: which sharing scopes (organizations/teams/domains) the admin enabled
|
||||
// in Admin Panel > People > Shared Templates (stored in localStorage, like the
|
||||
// Shared Templates admin UI). Used to gate the drag-to-share drop targets.
|
||||
function loadSharedTemplatesScopes() {
|
||||
try {
|
||||
const raw = window.localStorage.getItem('sharedTemplatesScopes');
|
||||
const arr = raw ? JSON.parse(raw) : [];
|
||||
return Array.isArray(arr) ? arr : [];
|
||||
} catch (e) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// #5850: share a (template) board with an Organization / Team / Domain by adding
|
||||
// it to the board's groups, add-only (does not remove existing shares and does
|
||||
// not add individual members). Called when a board is dropped on a share target.
|
||||
function shareBoardWith(boardId, shareType, name, id) {
|
||||
const board = ReactiveCache.getBoard(boardId);
|
||||
if (!board || !boardId) {
|
||||
return;
|
||||
}
|
||||
if (shareType === 'org') {
|
||||
const orgs = (board.orgs || []).slice();
|
||||
if (!orgs.some(o => o.orgId === id)) {
|
||||
orgs.push({ orgId: id, orgDisplayName: name, isActive: true });
|
||||
Meteor.call('setBoardOrgs', orgs, boardId);
|
||||
}
|
||||
} else if (shareType === 'team') {
|
||||
const teams = (board.teams || []).slice();
|
||||
if (!teams.some(t => t.teamId === id)) {
|
||||
teams.push({ teamId: id, teamDisplayName: name, isActive: true });
|
||||
// Preserve the board's current members (group-only sharing adds no
|
||||
// individual members); setBoardTeams sets both members and teams.
|
||||
Meteor.call('setBoardTeams', teams, board.members || [], boardId);
|
||||
}
|
||||
} else if (shareType === 'domain') {
|
||||
const domains = (board.domains || []).slice();
|
||||
if (!domains.some(d => d.domain === id)) {
|
||||
domains.push({ domain: id, isActive: true });
|
||||
Meteor.call('setBoardDomains', domains, boardId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const DEFAULT_WORKSPACE_ICON = '📁';
|
||||
|
||||
function getCurrentWorkspacesTree() {
|
||||
@@ -115,9 +159,18 @@ Template.boardListHeaderBar.helpers({
|
||||
Template.boardList.onCreated(function () {
|
||||
Meteor.subscribe('setting');
|
||||
Meteor.subscribe('tableVisibilityModeSettings');
|
||||
this.selectedMenu = new ReactiveVar('starred');
|
||||
// Honor the URL-addressable sub-view (#5850). The route sets
|
||||
// Session 'boardListMenu' to 'starred', 'templates' or 'remaining'.
|
||||
this.selectedMenu = new ReactiveVar(Session.get('boardListMenu') || 'starred');
|
||||
this.selectedWorkspaceIdVar = new ReactiveVar(null);
|
||||
this.workspacesTreeVar = new ReactiveVar([]);
|
||||
// #5850: the user's orgs/teams that have the per-org/team Shared Templates
|
||||
// flag set (plus email domains), fetched via a non-admin server method since
|
||||
// the org/team publications are admin-only. Gates the drag-to-share targets.
|
||||
this.shareableGroups = new ReactiveVar({ orgs: [], teams: [], domains: [] });
|
||||
Meteor.call('getMyShareableGroups', (err, res) => {
|
||||
if (!err && res) this.shareableGroups.set(res);
|
||||
});
|
||||
let currUser = ReactiveCache.getCurrentUser();
|
||||
let userLanguage;
|
||||
if (currUser && currUser.profile) {
|
||||
@@ -196,6 +249,28 @@ Template.boardList.onCreated(function () {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Switch the sub-view live when the route changes (e.g. navigating to
|
||||
// /templates or /remaining while boardList is already rendered). Only the
|
||||
// three recognized menu values are honored so a workspace selection is not
|
||||
// clobbered (#5850).
|
||||
this.autorun(() => {
|
||||
const m = Session.get('boardListMenu');
|
||||
if (m === 'starred' || m === 'templates' || m === 'remaining') {
|
||||
this.selectedMenu.set(m);
|
||||
this.selectedWorkspaceIdVar.set(null);
|
||||
}
|
||||
});
|
||||
|
||||
// The templates-container board is no longer auto-created at signup (#2339,
|
||||
// #5850), and it is no longer auto-created when the user merely opens the
|
||||
// Templates sub-view either: opening the view must not leave behind an empty
|
||||
// Template Container board the user never asked for. The container is created
|
||||
// only on demand -- either when the user explicitly adds one via the
|
||||
// "Add Template Board" flow (createTemplateContainerPopup), or lazily by
|
||||
// ensureTemplatesBoard right before a card/list/swimlane/board is actually
|
||||
// saved as a template. ensureTemplatesBoard remains idempotent (a no-op when
|
||||
// one already exists) so those save paths keep working.
|
||||
});
|
||||
|
||||
Template.boardList.onRendered(function () {
|
||||
@@ -367,7 +442,12 @@ Template.boardList.helpers({
|
||||
'tableVisibilityMode-allowPrivateOnly',
|
||||
);
|
||||
|
||||
if (FlowRouter.getRouteName() === 'home') {
|
||||
// #5850: the All Boards sub-views are also reachable via their own routes
|
||||
// (/templates, /remaining), which must apply the same membership filtering
|
||||
// as the home route, otherwise their board list is empty (or falls into the
|
||||
// public-only branch below).
|
||||
const allBoardsRoutes = ['home', 'allboards-templates', 'allboards-remaining'];
|
||||
if (allBoardsRoutes.includes(FlowRouter.getRouteName())) {
|
||||
membershipOrs.push({ 'members.userId': Meteor.userId() });
|
||||
|
||||
const currUser = ReactiveCache.getCurrentUser();
|
||||
@@ -383,6 +463,12 @@ Template.boardList.helpers({
|
||||
let teamsIds = teamIdsUserBelongs.split(',');
|
||||
membershipOrs.push({ 'teams.teamId': { $in: teamsIds } });
|
||||
}
|
||||
|
||||
// #5850: boards shared with the user's email domain.
|
||||
const emailDomains = currUser?.emailDomains?.() || [];
|
||||
if (emailDomains.length) {
|
||||
membershipOrs.push({ 'domains.domain': { $in: emailDomains } });
|
||||
}
|
||||
if (membershipOrs.length) {
|
||||
query.$and.splice(2, 0, { $or: membershipOrs });
|
||||
}
|
||||
@@ -483,6 +569,24 @@ Template.boardList.helpers({
|
||||
isSelectedMenu(type) {
|
||||
return Template.instance().selectedMenu.get() === type;
|
||||
},
|
||||
// #5850: drag-to-share drop targets — the user's organizations/teams/domains,
|
||||
// gated by the admin's Shared Templates scopes (localStorage). Shown in the
|
||||
// Templates view so a personal Template Board can be dragged onto one to share.
|
||||
shareTargets() {
|
||||
const scopes = loadSharedTemplatesScopes();
|
||||
const groups = Template.instance().shareableGroups.get() || {};
|
||||
const targets = [];
|
||||
if (scopes.includes('organizations')) {
|
||||
(groups.orgs || []).forEach(o => targets.push(o));
|
||||
}
|
||||
if (scopes.includes('teams')) {
|
||||
(groups.teams || []).forEach(t => targets.push(t));
|
||||
}
|
||||
if (scopes.includes('domains')) {
|
||||
(groups.domains || []).forEach(d => targets.push(d));
|
||||
}
|
||||
return targets;
|
||||
},
|
||||
isSpaceSelected(id) {
|
||||
return Template.instance().selectedWorkspaceIdVar.get() === id;
|
||||
},
|
||||
@@ -650,6 +754,43 @@ Template.boardList.events({
|
||||
}
|
||||
},
|
||||
// HTML5 DnD from boards to spaces
|
||||
// #5850: drag a (template) board onto an Org/Team/Domain target to share it.
|
||||
'dragover .js-share-target'(evt) {
|
||||
evt.preventDefault();
|
||||
if (evt.originalEvent.dataTransfer) {
|
||||
evt.originalEvent.dataTransfer.dropEffect = 'copy';
|
||||
}
|
||||
evt.currentTarget.classList.add('board-drag-hint');
|
||||
},
|
||||
'dragleave .js-share-target'(evt) {
|
||||
evt.currentTarget.classList.remove('board-drag-hint');
|
||||
},
|
||||
'drop .js-share-target'(evt) {
|
||||
evt.preventDefault();
|
||||
evt.stopPropagation();
|
||||
const target = evt.currentTarget;
|
||||
target.classList.remove('board-drag-hint');
|
||||
const dt = evt.originalEvent.dataTransfer;
|
||||
const data = dt.getData('text/plain');
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
const isMulti = dt.getData('application/x-board-multi') === 'true';
|
||||
let boardIds;
|
||||
if (isMulti) {
|
||||
try {
|
||||
boardIds = JSON.parse(data);
|
||||
} catch (e) {
|
||||
boardIds = [];
|
||||
}
|
||||
} else {
|
||||
boardIds = [data];
|
||||
}
|
||||
const shareType = target.getAttribute('data-share-type');
|
||||
const name = target.getAttribute('data-share-name');
|
||||
const id = target.getAttribute('data-share-id');
|
||||
boardIds.forEach(boardId => shareBoardWith(boardId, shareType, name, id));
|
||||
},
|
||||
'dragstart .js-board'(evt) {
|
||||
const boardId = this._id;
|
||||
|
||||
|
||||
@@ -62,9 +62,10 @@ template(name="minicard")
|
||||
span {{_ 'upload-completed'}}
|
||||
|
||||
.minicard-title
|
||||
if canModifyCard
|
||||
a.minicard-complete-toggle.js-toggle-card-complete(title="{{#if getDueComplete}}{{_ 'card-mark-incomplete'}}{{else}}{{_ 'card-mark-complete'}}{{/if}}")
|
||||
.materialCheckBox(class="{{#if getDueComplete}}is-checked{{/if}}")
|
||||
if showDueComplete
|
||||
if canModifyCard
|
||||
a.minicard-complete-toggle.js-toggle-card-complete(title="{{#if getDueComplete}}{{_ 'card-mark-incomplete'}}{{else}}{{_ 'card-mark-complete'}}{{/if}}")
|
||||
.materialCheckBox(class="{{#if getDueComplete}}is-checked{{/if}}")
|
||||
if $eq 'prefix-with-full-path' currentBoard.presentParentTask
|
||||
.parent-prefix
|
||||
| {{ parentString ' > ' }}
|
||||
|
||||
@@ -133,6 +133,13 @@ Template.minicard.helpers({
|
||||
const board = this.board();
|
||||
return getMinicardFlag(board, 'allowsCardNumberOnMinicard', 'allowsCardNumber', false);
|
||||
},
|
||||
// "Mark as complete" toggle on the minicard. No legacy fallback to the
|
||||
// card-details setting (allowsDueComplete): hidden by default so it only
|
||||
// appears when explicitly enabled in Card Settings > Show at Minicard.
|
||||
showDueComplete() {
|
||||
const board = this.board();
|
||||
return getMinicardFlag(board, 'allowsDueCompleteOnMinicard', null, false);
|
||||
},
|
||||
showSubtasks() {
|
||||
const board = this.board();
|
||||
return getMinicardFlag(board, 'allowsSubtasksOnMinicard', 'allowsSubtasks', true);
|
||||
|
||||
@@ -125,6 +125,13 @@ template(name="attachments")
|
||||
each attachmentTransferLimitUnitOptions 'apiDownloadMaxBytes'
|
||||
option(value=value selected=selected) {{_ labelKey}}
|
||||
|
||||
li
|
||||
.title {{_ 'avatars-upload-blocked-label'}}
|
||||
.form-group
|
||||
label
|
||||
input.js-avatars-upload-blocked(type="checkbox" checked=avatarsUploadBlocked)
|
||||
| {{_ 'avatars-upload-blocked-description'}}
|
||||
|
||||
li
|
||||
button.js-save-attachment-transfer-limits.primary {{_ 'save'}}
|
||||
else if isFilesystemActive
|
||||
|
||||
@@ -82,6 +82,7 @@ const DEFAULT_LIMIT_SETTINGS = {
|
||||
attachmentsDownloadMaxBytes: 0,
|
||||
apiUploadMaxBytes: 0,
|
||||
apiDownloadMaxBytes: 0,
|
||||
avatarsUploadBlocked: false,
|
||||
};
|
||||
|
||||
function toNonNegativeInteger(value, fallback = 0) {
|
||||
@@ -114,6 +115,7 @@ function normalizeLimitSettings(settingsDoc) {
|
||||
? toNonNegativeInteger(fromDoc.apiDownloadMaxBytes, DEFAULT_LIMIT_SETTINGS.apiDownloadMaxBytes)
|
||||
: DEFAULT_LIMIT_SETTINGS.apiDownloadMaxBytes,
|
||||
attachmentsUploadBlocked: fromDoc.attachmentsUploadBlocked === true,
|
||||
avatarsUploadBlocked: fromDoc.avatarsUploadBlocked === true,
|
||||
attachmentsDownloadBlocked: fromDoc.attachmentsDownloadBlocked === true,
|
||||
apiUploadBlocked: fromDoc.apiUploadBlocked === true,
|
||||
apiDownloadBlocked: fromDoc.apiDownloadBlocked === true,
|
||||
@@ -296,6 +298,10 @@ Template.attachments.helpers({
|
||||
isGcsActive() {
|
||||
return Template.instance().activeSection.get() === 'gcs';
|
||||
},
|
||||
avatarsUploadBlocked() {
|
||||
const settings = Template.instance().attachmentStorageSettings.get();
|
||||
return settings?.limitSettings?.avatarsUploadBlocked === true;
|
||||
},
|
||||
defaultStorageOptions() {
|
||||
const settings = Template.instance().attachmentStorageSettings.get();
|
||||
const selected = settings?.defaultStorage || 'fs';
|
||||
@@ -631,6 +637,10 @@ Template.attachments.events({
|
||||
nextLimitSettings[field.fieldName] = bytesValue;
|
||||
}
|
||||
|
||||
// Avatar uploads are a simple on/off block (no size mode). Default off so
|
||||
// avatars stay enabled unless an admin explicitly blocks them.
|
||||
nextLimitSettings.avatarsUploadBlocked = tpl.$('.js-avatars-upload-blocked').is(':checked');
|
||||
|
||||
const nextSettings = {
|
||||
...currentSettings,
|
||||
uploadSettings: {
|
||||
|
||||
@@ -102,6 +102,10 @@ template(name="people")
|
||||
a.js-templates-menu(data-id="templates-setting")
|
||||
i.fa.fa-clone
|
||||
| {{_ 'shared-templates'}}
|
||||
li
|
||||
a.js-domains-menu(data-id="domains-setting")
|
||||
i.fa.fa-at
|
||||
| {{_ 'domains'}}
|
||||
.main-body
|
||||
if loading.get
|
||||
+spinner
|
||||
@@ -117,6 +121,8 @@ template(name="people")
|
||||
+rolesGeneral
|
||||
else if templatesSetting.get
|
||||
+templatesGeneral
|
||||
else if domainSetting.get
|
||||
+domainGeneral(domainList=domainList)
|
||||
|
||||
|
||||
template(name="orgGeneral")
|
||||
@@ -137,6 +143,24 @@ template(name="orgGeneral")
|
||||
th {{_ 'website'}}
|
||||
th {{_ 'createdAt'}}
|
||||
th {{_ 'active-org'}}
|
||||
th
|
||||
| {{_ 'org-shared-templates'}}
|
||||
br
|
||||
a.js-org-feature-all(href="#", data-feature="orgSharedTemplates", data-value="true") {{_ 'select-all'}}
|
||||
| /
|
||||
a.js-org-feature-all(href="#", data-feature="orgSharedTemplates", data-value="false") {{_ 'unselect-all'}}
|
||||
th
|
||||
| {{_ 'org-propagate-members-to-boards'}}
|
||||
br
|
||||
a.js-org-feature-all(href="#", data-feature="orgPropagateMembersToBoards", data-value="true") {{_ 'select-all'}}
|
||||
| /
|
||||
a.js-org-feature-all(href="#", data-feature="orgPropagateMembersToBoards", data-value="false") {{_ 'unselect-all'}}
|
||||
th
|
||||
| {{_ 'org-sync-members-from-auth'}}
|
||||
br
|
||||
a.js-org-feature-all(href="#", data-feature="orgSyncMembersFromAuth", data-value="true") {{_ 'select-all'}}
|
||||
| /
|
||||
a.js-org-feature-all(href="#", data-feature="orgSyncMembersFromAuth", data-value="false") {{_ 'unselect-all'}}
|
||||
tbody
|
||||
tr
|
||||
each org in orgList
|
||||
@@ -160,6 +184,24 @@ template(name="teamGeneral")
|
||||
th {{_ 'website'}}
|
||||
th {{_ 'createdAt'}}
|
||||
th {{_ 'active-team'}}
|
||||
th
|
||||
| {{_ 'team-shared-templates'}}
|
||||
br
|
||||
a.js-team-feature-all(href="#", data-feature="teamSharedTemplates", data-value="true") {{_ 'select-all'}}
|
||||
| /
|
||||
a.js-team-feature-all(href="#", data-feature="teamSharedTemplates", data-value="false") {{_ 'unselect-all'}}
|
||||
th
|
||||
| {{_ 'team-propagate-members-to-boards'}}
|
||||
br
|
||||
a.js-team-feature-all(href="#", data-feature="teamPropagateMembersToBoards", data-value="true") {{_ 'select-all'}}
|
||||
| /
|
||||
a.js-team-feature-all(href="#", data-feature="teamPropagateMembersToBoards", data-value="false") {{_ 'unselect-all'}}
|
||||
th
|
||||
| {{_ 'team-sync-members-from-auth'}}
|
||||
br
|
||||
a.js-team-feature-all(href="#", data-feature="teamSyncMembersFromAuth", data-value="true") {{_ 'select-all'}}
|
||||
| /
|
||||
a.js-team-feature-all(href="#", data-feature="teamSyncMembersFromAuth", data-value="false") {{_ 'unselect-all'}}
|
||||
tbody
|
||||
tr
|
||||
each team in teamList
|
||||
@@ -196,6 +238,22 @@ template(name="selectAllUser")
|
||||
| {{_ 'dueCardsViewChange-choice-all'}}
|
||||
input.allUserChkBox(type="checkbox", id="chkSelectAll")
|
||||
|
||||
template(name="domainGeneral")
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th {{_ 'domain'}}
|
||||
th {{_ 'domain-user-count'}}
|
||||
tbody
|
||||
if domainList.length
|
||||
each domainList
|
||||
tr
|
||||
td {{ domain }}
|
||||
td {{ count }}
|
||||
else
|
||||
tr
|
||||
td(colspan="2") {{_ 'no-items-message'}}
|
||||
|
||||
template(name="newOrgRow")
|
||||
a.new-org
|
||||
i.fa.fa-plus
|
||||
@@ -244,6 +302,12 @@ template(name="orgRow")
|
||||
| {{_ 'yes'}}
|
||||
else
|
||||
| {{_ 'no'}}
|
||||
td.text-center
|
||||
input.js-toggle-org-feature(type="checkbox", data-feature="orgSharedTemplates", checked=orgData.orgSharedTemplates)
|
||||
td.text-center
|
||||
input.js-toggle-org-feature(type="checkbox", data-feature="orgPropagateMembersToBoards", checked=orgData.orgPropagateMembersToBoards)
|
||||
td.text-center
|
||||
input.js-toggle-org-feature(type="checkbox", data-feature="orgSyncMembersFromAuth", checked=orgData.orgSyncMembersFromAuth)
|
||||
|
||||
template(name="teamRow")
|
||||
tr
|
||||
@@ -278,6 +342,12 @@ template(name="teamRow")
|
||||
| {{_ 'yes'}}
|
||||
else
|
||||
| {{_ 'no'}}
|
||||
td.text-center
|
||||
input.js-toggle-team-feature(type="checkbox", data-feature="teamSharedTemplates", checked=teamData.teamSharedTemplates)
|
||||
td.text-center
|
||||
input.js-toggle-team-feature(type="checkbox", data-feature="teamPropagateMembersToBoards", checked=teamData.teamPropagateMembersToBoards)
|
||||
td.text-center
|
||||
input.js-toggle-team-feature(type="checkbox", data-feature="teamSyncMembersFromAuth", checked=teamData.teamSyncMembersFromAuth)
|
||||
|
||||
template(name="peopleRow")
|
||||
tr
|
||||
|
||||
@@ -28,6 +28,9 @@ Template.people.onCreated(function () {
|
||||
this.lockedUsersSetting = new ReactiveVar(false);
|
||||
this.rolesSetting = new ReactiveVar(false);
|
||||
this.templatesSetting = new ReactiveVar(false);
|
||||
// #5850: Admin Panel > People > Domains tab.
|
||||
this.domainSetting = new ReactiveVar(false);
|
||||
this.domains = new ReactiveVar([]);
|
||||
this.subscribe('inviteToBoardRolesSettings');
|
||||
this.findOrgsOptions = new ReactiveVar({});
|
||||
this.findTeamsOptions = new ReactiveVar({});
|
||||
@@ -200,6 +203,14 @@ Template.people.onCreated(function () {
|
||||
this.lockedUsersSetting.set('locked-users-setting' === targetID);
|
||||
this.rolesSetting.set('roles-setting' === targetID);
|
||||
this.templatesSetting.set('templates-setting' === targetID);
|
||||
this.domainSetting.set('domains-setting' === targetID);
|
||||
|
||||
// #5850: load the domains + per-domain user counts when the tab opens.
|
||||
if ('domains-setting' === targetID) {
|
||||
Meteor.call('getDomainsWithUserCounts', (err, res) => {
|
||||
if (!err) this.domains.set(res || []);
|
||||
});
|
||||
}
|
||||
|
||||
// When switching to locked users tab, refresh the locked users list
|
||||
if ('locked-users-setting' === targetID) {
|
||||
@@ -278,6 +289,12 @@ Template.people.helpers({
|
||||
templatesSetting() {
|
||||
return Template.instance().templatesSetting;
|
||||
},
|
||||
domainSetting() {
|
||||
return Template.instance().domainSetting;
|
||||
},
|
||||
domainList() {
|
||||
return Template.instance().domains.get();
|
||||
},
|
||||
orgList() {
|
||||
const tpl = Template.instance();
|
||||
// The 'org' publication already returns only the current page (server-side
|
||||
@@ -294,6 +311,9 @@ Template.people.helpers({
|
||||
orgWebsite: 1,
|
||||
createdAt: 1,
|
||||
orgIsActive: 1,
|
||||
orgSharedTemplates: 1,
|
||||
orgPropagateMembersToBoards: 1,
|
||||
orgSyncMembersFromAuth: 1,
|
||||
},
|
||||
}).fetch();
|
||||
return orgs;
|
||||
@@ -314,6 +334,9 @@ Template.people.helpers({
|
||||
teamWebsite: 1,
|
||||
createdAt: 1,
|
||||
teamIsActive: 1,
|
||||
teamSharedTemplates: 1,
|
||||
teamPropagateMembersToBoards: 1,
|
||||
teamSyncMembersFromAuth: 1,
|
||||
},
|
||||
}).fetch();
|
||||
return teams;
|
||||
@@ -458,6 +481,20 @@ Template.people.events({
|
||||
tpl.peoplePage.set(current + 1);
|
||||
}
|
||||
},
|
||||
// #4737/#5850: select-all / unselect-all for an org feature column.
|
||||
'click .js-org-feature-all'(event) {
|
||||
event.preventDefault();
|
||||
const field = event.currentTarget.getAttribute('data-feature');
|
||||
const value = event.currentTarget.getAttribute('data-value') === 'true';
|
||||
Meteor.call('setAllOrgsFeature', field, value);
|
||||
},
|
||||
// #4737/#5850: select-all / unselect-all for a team feature column.
|
||||
'click .js-team-feature-all'(event) {
|
||||
event.preventDefault();
|
||||
const field = event.currentTarget.getAttribute('data-feature');
|
||||
const value = event.currentTarget.getAttribute('data-value') === 'true';
|
||||
Meteor.call('setAllTeamsFeature', field, value);
|
||||
},
|
||||
'click .js-org-prev-page'(event, tpl) {
|
||||
event.preventDefault();
|
||||
const current = tpl.orgPage.get();
|
||||
@@ -546,6 +583,9 @@ Template.people.events({
|
||||
'click a.js-templates-menu'(event, tpl) {
|
||||
tpl.switchMenu(event);
|
||||
},
|
||||
'click a.js-domains-menu'(event, tpl) {
|
||||
tpl.switchMenu(event);
|
||||
},
|
||||
});
|
||||
|
||||
Template.rolesGeneral.onCreated(function () {
|
||||
@@ -967,14 +1007,44 @@ Template.newUserPopup.helpers({
|
||||
},
|
||||
});
|
||||
|
||||
const ORG_FEATURE_METHODS = {
|
||||
orgSharedTemplates: 'setOrgSharedTemplates',
|
||||
orgPropagateMembersToBoards: 'setOrgPropagateMembersToBoards',
|
||||
orgSyncMembersFromAuth: 'setOrgSyncMembersFromAuth',
|
||||
};
|
||||
|
||||
const TEAM_FEATURE_METHODS = {
|
||||
teamSharedTemplates: 'setTeamSharedTemplates',
|
||||
teamPropagateMembersToBoards: 'setTeamPropagateMembersToBoards',
|
||||
teamSyncMembersFromAuth: 'setTeamSyncMembersFromAuth',
|
||||
};
|
||||
|
||||
Template.orgRow.events({
|
||||
'click a.edit-org': Popup.open('editOrg'),
|
||||
'click a.more-settings-org': Popup.open('settingsOrg'),
|
||||
// #4737/#5850: per-org feature checkbox columns.
|
||||
'change .js-toggle-org-feature'(event) {
|
||||
const org = this.org || ReactiveCache.getOrg(this.orgId);
|
||||
const field = event.currentTarget.getAttribute('data-feature');
|
||||
const method = ORG_FEATURE_METHODS[field];
|
||||
if (org && method) {
|
||||
Meteor.call(method, { _id: org._id }, event.currentTarget.checked);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Template.teamRow.events({
|
||||
'click a.edit-team': Popup.open('editTeam'),
|
||||
'click a.more-settings-team': Popup.open('settingsTeam'),
|
||||
// #4737/#5850: per-team feature checkbox columns.
|
||||
'change .js-toggle-team-feature'(event) {
|
||||
const team = this.team || ReactiveCache.getTeam(this.teamId);
|
||||
const field = event.currentTarget.getAttribute('data-feature');
|
||||
const method = TEAM_FEATURE_METHODS[field];
|
||||
if (team && method) {
|
||||
Meteor.call(method, { _id: team._id }, event.currentTarget.checked);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Template.peopleRow.events({
|
||||
|
||||
@@ -76,23 +76,27 @@ template(name="membersWidget")
|
||||
unless currentUser.isWorker
|
||||
p.quiet
|
||||
.board-widget-content
|
||||
each currentBoard.activeMembers
|
||||
+userAvatar(userId=this.userId showStatus=true)
|
||||
if isSandstorm
|
||||
if currentUser.isBoardMember
|
||||
a.member.add-member.sandstorm-powerbox-request-identity(title="{{_ 'add-members'}}")
|
||||
if currentBoard.isAnyTemplateBoard
|
||||
+userAvatar(userId=currentBoard.userId showStatus=true)
|
||||
.clearfix
|
||||
else
|
||||
each currentBoard.activeMembers
|
||||
+userAvatar(userId=this.userId showStatus=true)
|
||||
if isSandstorm
|
||||
if currentUser.isBoardMember
|
||||
a.member.add-member.sandstorm-powerbox-request-identity(title="{{_ 'add-members'}}")
|
||||
i.fa.fa-plus
|
||||
else if currentUser.canInviteToBoard
|
||||
a.member.add-member.js-manage-board-members(title="{{_ 'add-members'}}")
|
||||
i.fa.fa-plus
|
||||
else if currentUser.canInviteToBoard
|
||||
a.member.add-member.js-manage-board-members(title="{{_ 'add-members'}}")
|
||||
i.fa.fa-plus
|
||||
.clearfix
|
||||
if isInvited
|
||||
hr
|
||||
p
|
||||
i.fa.fa-exclamation-triangle
|
||||
| {{_ 'just-invited'}}
|
||||
button.js-member-invite-accept.primary {{_ 'accept'}}
|
||||
button.js-member-invite-decline {{_ 'decline'}}
|
||||
.clearfix
|
||||
if isInvited
|
||||
hr
|
||||
p
|
||||
i.fa.fa-exclamation-triangle
|
||||
| {{_ 'just-invited'}}
|
||||
button.js-member-invite-accept.primary {{_ 'accept'}}
|
||||
button.js-member-invite-decline {{_ 'decline'}}
|
||||
+tabContent(slug='organizations')
|
||||
unless currentUser.isWorker
|
||||
p.quiet
|
||||
@@ -105,6 +109,12 @@ template(name="membersWidget")
|
||||
.board-widget-content
|
||||
+boardTeamGeneral
|
||||
.clearfix
|
||||
+tabContent(slug="domains")
|
||||
unless currentUser.isWorker
|
||||
p.quiet
|
||||
.board-widget-content
|
||||
+boardDomainGeneral
|
||||
.clearfix
|
||||
|
||||
template(name="boardOrgGeneral")
|
||||
each org in currentBoard.activeOrgs
|
||||
@@ -120,6 +130,18 @@ template(name="boardTeamGeneral")
|
||||
a.member.orgOrTeamMember.add-member.js-manage-board-addTeam(title="{{_ 'add-members'}}")
|
||||
i.fa.fa-plus
|
||||
|
||||
template(name="boardDomainGeneral")
|
||||
each currentBoard.activeDomains
|
||||
+boardDomainRow(domain=this.domain)
|
||||
if currentUser.isBoardAdmin
|
||||
a.member.orgOrTeamMember.add-member.js-manage-board-addDomain(title="{{_ 'add-domain'}}")
|
||||
i.fa.fa-plus
|
||||
|
||||
template(name="boardDomainRow")
|
||||
a.member.orgOrTeamMember.js-manage-board-removeDomain(title="{{domain}}" data-domain="{{domain}}")
|
||||
svg.avatar.avatar-initials(viewBox="0 0 {{domainViewPortWidth}} 15")
|
||||
text(x="50%" y="11" text-anchor="middle" dominant-baseline="middle" font-size="16")= domain
|
||||
|
||||
template(name="boardChangeColorPopup")
|
||||
.board-backgrounds-list.clearfix
|
||||
each backgroundColors
|
||||
@@ -265,6 +287,8 @@ template(name="boardCardSettingsPopup")
|
||||
a.flex.js-field-has-duecomplete(title="{{_ 'card-mark-complete'}}" class="{{#if allowsDueComplete}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDueComplete}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
a.flex.js-field-has-duecomplete-on-minicard(title="{{_ 'card-mark-complete'}}" class="{{#if allowsDueCompleteOnMinicard}}is-checked{{/if}}")
|
||||
i.fa(class="{{#if allowsDueCompleteOnMinicard}}fa-check{{else}}fa-square-o{{/if}}")
|
||||
.card-settings-column
|
||||
span
|
||||
i.fa.fa-check-square-o
|
||||
@@ -719,6 +743,10 @@ template(name="exportBoardPopup")
|
||||
a.download-json-link(href="{{exportUrl}}", download="{{exportJsonFilename}}")
|
||||
i.fa.fa-upload
|
||||
| {{_ 'export'}} / JSON
|
||||
li
|
||||
a.download-json-link(href="{{exportUrlNoAttachments}}", download="{{exportJsonFilename}}")
|
||||
i.fa.fa-upload
|
||||
| {{_ 'export'}} / JSON ({{_ 'export-board-without-attachments'}})
|
||||
li
|
||||
a(href="{{exportUrlExcel}}", download="{{exportFilenameExcel}}")
|
||||
i.fa.fa-upload
|
||||
@@ -882,6 +910,27 @@ template(name="removeBoardTeamPopup")
|
||||
input.primary.wide.leaveBoardBtn#leaveBoardTeamBtn(type="submit" value="{{_ 'confirm-btn'}}")
|
||||
input.primary.wide.cancelLeaveBoardBtn#cancelLeaveBoardTeamBtn(type="submit" value="{{_ 'cancel'}}")
|
||||
|
||||
template(name="addBoardDomainPopup")
|
||||
form.js-add-board-domain
|
||||
label
|
||||
| {{_ 'domain'}}
|
||||
input.js-board-domain-input#jsBoardDomainInput(type="text" autofocus placeholder="example.com")
|
||||
if error.get
|
||||
.warning {{_ error.get}}
|
||||
div.buttonsContainer
|
||||
input.primary.wide#jsAddBoardDomainBtn(type="submit" value="{{_ 'add-domain'}}")
|
||||
|
||||
template(name="removeBoardDomainPopup")
|
||||
form
|
||||
input.hide#hideDomain(type="text" value=domain)
|
||||
label
|
||||
| {{_ 'remove-domain-from-board'}}
|
||||
br
|
||||
hr
|
||||
div.buttonsContainer
|
||||
input.primary.wide.leaveBoardBtn#leaveBoardDomainBtn(type="submit" value="{{_ 'confirm-btn'}}")
|
||||
input.primary.wide.cancelLeaveBoardBtn#cancelLeaveBoardDomainBtn(type="submit" value="{{_ 'cancel'}}")
|
||||
|
||||
template(name="addMemberPopup")
|
||||
.js-search-member
|
||||
input.js-search-member-input(type="text" placeholder="{{_ 'email-address'}}")
|
||||
|
||||
@@ -569,6 +569,7 @@ Template.membersWidget.helpers({
|
||||
{ name: TAPi18n.__('people'), slug: 'people' },
|
||||
{ name: TAPi18n.__('organizations'), slug: 'organizations' },
|
||||
{ name: TAPi18n.__('teams'), slug: 'teams' },
|
||||
{ name: TAPi18n.__('domains'), slug: 'domains' },
|
||||
];
|
||||
},
|
||||
});
|
||||
@@ -579,6 +580,7 @@ Template.membersWidget.events({
|
||||
'click .js-manage-board-members': Popup.open('addMember'),
|
||||
'click .js-manage-board-addOrg': Popup.open('addBoardOrg'),
|
||||
'click .js-manage-board-addTeam': Popup.open('addBoardTeam'),
|
||||
'click .js-manage-board-addDomain': Popup.open('addBoardDomain'),
|
||||
'click .js-import-board': Popup.open('chooseBoardSource'),
|
||||
'click .js-open-archived-board'() {
|
||||
Modal.open('archivedBoards');
|
||||
@@ -702,6 +704,19 @@ Template.exportBoardPopup.helpers({
|
||||
};
|
||||
return FlowRouter.path('/api/boards/:boardId/export', params, queryParams);
|
||||
},
|
||||
// #5870: JSON export omitting base64 attachment data, so very large boards
|
||||
// (whose inlined attachments would otherwise overflow the JSON serializer)
|
||||
// can still be exported.
|
||||
exportUrlNoAttachments() {
|
||||
const params = {
|
||||
boardId: Session.get('currentBoard'),
|
||||
};
|
||||
const queryParams = {
|
||||
authToken: Accounts._storedLoginToken(),
|
||||
attachments: 'false',
|
||||
};
|
||||
return FlowRouter.path('/api/boards/:boardId/export', params, queryParams);
|
||||
},
|
||||
exportUrlExcel() {
|
||||
const params = {
|
||||
boardId: Session.get('currentBoard'),
|
||||
@@ -1162,7 +1177,12 @@ Template.boardInfoOnMyBoardsPopup.events({
|
||||
});
|
||||
|
||||
Template.boardSubtaskSettingsPopup.onCreated(function() {
|
||||
this.currentBoard = Utils.getCurrentBoard();
|
||||
// Same reactive-snapshot fix as boardCardSettingsPopup (#6385): the
|
||||
// allowsSubtasks toggle reads tpl.currentBoard, so keep it current in an
|
||||
// autorun so the setting can be reversed without a page refresh.
|
||||
this.autorun(() => {
|
||||
this.currentBoard = Utils.getCurrentBoard();
|
||||
});
|
||||
});
|
||||
|
||||
Template.boardSubtaskSettingsPopup.helpers({
|
||||
@@ -1277,7 +1297,15 @@ Template.boardSubtaskSettingsPopup.events({
|
||||
});
|
||||
|
||||
Template.boardCardSettingsPopup.onCreated(function() {
|
||||
this.currentBoard = Utils.getCurrentBoard();
|
||||
// Keep currentBoard reactive. The toggle handlers compute the new value from
|
||||
// tpl.currentBoard.allowsX, so a one-time snapshot went stale after the first
|
||||
// toggle: reversing a setting (e.g. "Mark as complete") recomputed !oldValue
|
||||
// and never switched back until the page was refreshed (#6385). Re-reading the
|
||||
// board in an autorun keeps it current, so every Card Settings toggle works
|
||||
// both ways without a refresh.
|
||||
this.autorun(() => {
|
||||
this.currentBoard = Utils.getCurrentBoard();
|
||||
});
|
||||
});
|
||||
|
||||
Template.boardCardSettingsPopup.helpers({
|
||||
@@ -1291,6 +1319,11 @@ Template.boardCardSettingsPopup.helpers({
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsDueComplete : false;
|
||||
},
|
||||
allowsDueCompleteOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
return currentBoard ? currentBoard.allowsDueCompleteOnMinicard : false;
|
||||
},
|
||||
allowsReceivedDateOnMinicard() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
const currentBoard = ReactiveCache.getBoard(boardId);
|
||||
@@ -1550,6 +1583,11 @@ Template.boardCardSettingsPopup.events({
|
||||
const newValue = !tpl.currentBoard.allowsDueComplete;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsDueComplete: newValue } });
|
||||
},
|
||||
'click .js-field-has-duecomplete-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsDueCompleteOnMinicard;
|
||||
Boards.update(tpl.currentBoard._id, { $set: { allowsDueCompleteOnMinicard: newValue } });
|
||||
},
|
||||
'click .js-field-has-receiveddate-on-minicard'(evt, tpl) {
|
||||
evt.preventDefault();
|
||||
const newValue = !tpl.currentBoard.allowsReceivedDateOnMinicard;
|
||||
@@ -2025,6 +2063,88 @@ Template.removeBoardOrgPopup.events({
|
||||
},
|
||||
});
|
||||
|
||||
// #5850: free-form "share board with an email domain" popups. Unlike orgs/teams
|
||||
// (which are a managed collection shown in a <select>), the owner simply types a
|
||||
// domain such as example.com.
|
||||
Template.addBoardDomainPopup.onCreated(function() {
|
||||
this.error = new ReactiveVar('');
|
||||
|
||||
this.setError = function(error) {
|
||||
this.error.set(error);
|
||||
};
|
||||
});
|
||||
|
||||
Template.addBoardDomainPopup.helpers({
|
||||
error() {
|
||||
return { get: () => Template.instance().error.get() };
|
||||
},
|
||||
});
|
||||
|
||||
Template.addBoardDomainPopup.events({
|
||||
'keyup input'(event, tpl) {
|
||||
tpl.setError('');
|
||||
},
|
||||
'submit .js-add-board-domain'(event, tpl) {
|
||||
event.preventDefault();
|
||||
const input = document.getElementById('jsBoardDomainInput');
|
||||
const domain = (input ? input.value : '').trim().toLowerCase();
|
||||
|
||||
// Basic validation: must contain a '.', and no '@' or whitespace.
|
||||
if (
|
||||
domain.length === 0 ||
|
||||
domain.indexOf('.') < 0 ||
|
||||
domain.indexOf('@') >= 0 ||
|
||||
/\s/.test(domain)
|
||||
) {
|
||||
tpl.setError('invalid-domain');
|
||||
return;
|
||||
}
|
||||
|
||||
const currentBoard = Utils.getCurrentBoard();
|
||||
const boardDomains = [];
|
||||
if (currentBoard.domains !== undefined) {
|
||||
for (let i = 0; i < currentBoard.domains.length; i++) {
|
||||
boardDomains.push(currentBoard.domains[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!boardDomains.some(d => d.domain === domain)) {
|
||||
boardDomains.push({
|
||||
domain,
|
||||
isActive: true,
|
||||
});
|
||||
Meteor.call('setBoardDomains', boardDomains, currentBoard._id);
|
||||
}
|
||||
|
||||
Popup.back();
|
||||
},
|
||||
});
|
||||
|
||||
Template.removeBoardDomainPopup.events({
|
||||
'keyup input'(event, tpl) {
|
||||
// no-op, kept for parity with the org/team remove popups
|
||||
},
|
||||
'click #leaveBoardDomainBtn'(){
|
||||
const stringDomain = document.getElementById('hideDomain').value;
|
||||
const currentBoard = Utils.getCurrentBoard();
|
||||
const boardDomains = [];
|
||||
if (currentBoard.domains !== undefined) {
|
||||
for (let i = 0; i < currentBoard.domains.length; i++) {
|
||||
if (currentBoard.domains[i].domain != stringDomain) {
|
||||
boardDomains.push(currentBoard.domains[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Meteor.call('setBoardDomains', boardDomains, currentBoard._id);
|
||||
|
||||
Popup.back();
|
||||
},
|
||||
'click #cancelLeaveBoardDomainBtn'(){
|
||||
Popup.back();
|
||||
},
|
||||
});
|
||||
|
||||
Template.addBoardTeamPopup.onCreated(function() {
|
||||
this.error = new ReactiveVar('');
|
||||
this.loading = new ReactiveVar(false);
|
||||
|
||||
@@ -84,17 +84,18 @@ template(name="changeAvatarPopup")
|
||||
if noAvatarUrl
|
||||
i.fa.fa-check
|
||||
p.sub-name {{_ 'default-avatar'}}
|
||||
input.hide.js-upload-avatar-input(accept="image/*;capture=camera" type="file")
|
||||
if Meteor.settings.public.avatarsUploadMaxSize
|
||||
| {{_ 'max-avatar-filesize'}} {{Meteor.settings.public.avatarsUploadMaxSize}}
|
||||
br
|
||||
if Meteor.settings.public.avatarsUploadMimeTypes
|
||||
| {{_ 'allowed-avatar-filetypes'}} {{Meteor.settings.public.avatarsUploadMimeTypes}}
|
||||
br
|
||||
| {{_ 'invalid-file'}}
|
||||
button.full.js-upload-avatar
|
||||
i.fa.fa-upload
|
||||
| {{_ 'upload-avatar' }}
|
||||
unless avatarUploadBlocked
|
||||
input.hide.js-upload-avatar-input(accept="image/*;capture=camera" type="file")
|
||||
if Meteor.settings.public.avatarsUploadMaxSize
|
||||
| {{_ 'max-avatar-filesize'}} {{Meteor.settings.public.avatarsUploadMaxSize}}
|
||||
br
|
||||
if Meteor.settings.public.avatarsUploadMimeTypes
|
||||
| {{_ 'allowed-avatar-filetypes'}} {{Meteor.settings.public.avatarsUploadMimeTypes}}
|
||||
br
|
||||
| {{_ 'invalid-file'}}
|
||||
button.full.js-upload-avatar
|
||||
i.fa.fa-upload
|
||||
| {{_ 'upload-avatar' }}
|
||||
|
||||
template(name="deleteAvatarPopup")
|
||||
p {{_ 'delete-avatar-confirm'}}
|
||||
|
||||
@@ -164,9 +164,29 @@ Template.boardTeamName.helpers({
|
||||
},
|
||||
});
|
||||
|
||||
// #5850: row showing a single board email-domain share, with a remove affordance.
|
||||
Template.boardDomainRow.helpers({
|
||||
domainViewPortWidth() {
|
||||
return ((this.domain && this.domain.length) || 1) * 12;
|
||||
},
|
||||
});
|
||||
|
||||
Template.boardDomainRow.events({
|
||||
// The row's data context is `{ domain }`, which becomes removeBoardDomainPopup's
|
||||
// data context, so the popup can read `this.domain` directly.
|
||||
'click .js-manage-board-removeDomain': Popup.open('removeBoardDomain'),
|
||||
});
|
||||
|
||||
Template.changeAvatarPopup.onCreated(function () {
|
||||
this.error = new ReactiveVar('');
|
||||
this.avatarUpdateCounter = new ReactiveVar(0); // Trigger to force helper re-evaluation
|
||||
// Whether an admin has blocked avatar uploads (Admin Panel > Attachments >
|
||||
// Transfer limits). Default false (avatars enabled); when true the upload
|
||||
// option is hidden and the upload is also rejected server-side.
|
||||
this.avatarUploadBlocked = new ReactiveVar(false);
|
||||
Meteor.call('isAvatarUploadBlocked', (err, blocked) => {
|
||||
if (!err) this.avatarUploadBlocked.set(blocked === true);
|
||||
});
|
||||
Meteor.subscribe('my-avatars');
|
||||
});
|
||||
|
||||
@@ -174,6 +194,9 @@ Template.changeAvatarPopup.helpers({
|
||||
error() {
|
||||
return Template.instance().error;
|
||||
},
|
||||
avatarUploadBlocked() {
|
||||
return Template.instance().avatarUploadBlocked.get();
|
||||
},
|
||||
uploadedAvatars() {
|
||||
Template.instance().avatarUpdateCounter.get(); // Create dependency on update counter
|
||||
const ret = ReactiveCache.getAvatars({ userId: Meteor.userId() }, {}, true);
|
||||
|
||||
@@ -56,7 +56,7 @@ template(name="memberMenuPopup")
|
||||
unless currentUser.isWorker
|
||||
ul.pop-over-list
|
||||
li
|
||||
a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
|
||||
a(href="{{pathFor 'allboards-templates'}}")
|
||||
i.fa.fa-list
|
||||
| {{_ 'templates'}}
|
||||
if currentUser.isAdmin
|
||||
|
||||
@@ -15,24 +15,6 @@ Template.memberMenuPopup.onCreated(function () {
|
||||
});
|
||||
|
||||
Template.memberMenuPopup.helpers({
|
||||
templatesBoardId() {
|
||||
const currentUser = ReactiveCache.getCurrentUser();
|
||||
if (currentUser) {
|
||||
return currentUser.getTemplatesBoardId();
|
||||
} else {
|
||||
// No need to getTemplatesBoardId on public board
|
||||
return false;
|
||||
}
|
||||
},
|
||||
templatesBoardSlug() {
|
||||
const currentUser = ReactiveCache.getCurrentUser();
|
||||
if (currentUser) {
|
||||
return currentUser.getTemplatesBoardSlug();
|
||||
} else {
|
||||
// No need to getTemplatesBoardSlug() on public board
|
||||
return false;
|
||||
}
|
||||
},
|
||||
isSupportPageEnabled() {
|
||||
const setting = ReactiveCache.getCurrentSetting();
|
||||
return setting && setting.supportPageEnabled;
|
||||
|
||||
+45
-20
@@ -16,32 +16,57 @@ FlowRouter.triggers.exit([
|
||||
},
|
||||
]);
|
||||
|
||||
// All Boards page. The left-menu sub-views (Templates, Remaining, Starred) are
|
||||
// addressable via their own URL suffixes (#5850) so they can be linked and
|
||||
// redirected to; the chosen view is passed to boardList through the
|
||||
// `boardListMenu` Session value.
|
||||
function renderBoardList(ctx, menu) {
|
||||
// Redirect to sign-in immediately if user is not logged in
|
||||
if (!Meteor.userId()) {
|
||||
FlowRouter.go('atSignIn');
|
||||
return;
|
||||
}
|
||||
|
||||
Session.set('currentBoard', null);
|
||||
Session.set('currentList', null);
|
||||
Session.set('currentCard', null);
|
||||
Session.set('popupCardId', null);
|
||||
Session.set('popupCardBoardId', null);
|
||||
Session.set('boardListMenu', menu);
|
||||
Filter.reset();
|
||||
Session.set('sortBy', '');
|
||||
EscapeActions.executeAll();
|
||||
|
||||
Utils.manageCustomUI();
|
||||
Utils.manageMatomo();
|
||||
|
||||
ctx.render('defaultLayout', {
|
||||
headerBar: 'boardListHeaderBar',
|
||||
content: 'boardList',
|
||||
});
|
||||
}
|
||||
|
||||
FlowRouter.route('/', {
|
||||
name: 'home',
|
||||
triggersEnter: [AccountsTemplates.ensureSignedIn],
|
||||
action() {
|
||||
// Redirect to sign-in immediately if user is not logged in
|
||||
if (!Meteor.userId()) {
|
||||
FlowRouter.go('atSignIn');
|
||||
return;
|
||||
}
|
||||
renderBoardList(this, 'starred');
|
||||
},
|
||||
});
|
||||
|
||||
Session.set('currentBoard', null);
|
||||
Session.set('currentList', null);
|
||||
Session.set('currentCard', null);
|
||||
Session.set('popupCardId', null);
|
||||
Session.set('popupCardBoardId', null);
|
||||
Filter.reset();
|
||||
Session.set('sortBy', '');
|
||||
EscapeActions.executeAll();
|
||||
FlowRouter.route('/templates', {
|
||||
name: 'allboards-templates',
|
||||
triggersEnter: [AccountsTemplates.ensureSignedIn],
|
||||
action() {
|
||||
renderBoardList(this, 'templates');
|
||||
},
|
||||
});
|
||||
|
||||
Utils.manageCustomUI();
|
||||
Utils.manageMatomo();
|
||||
|
||||
this.render('defaultLayout', {
|
||||
headerBar: 'boardListHeaderBar',
|
||||
content: 'boardList',
|
||||
});
|
||||
FlowRouter.route('/remaining', {
|
||||
name: 'allboards-remaining',
|
||||
triggersEnter: [AccountsTemplates.ensureSignedIn],
|
||||
action() {
|
||||
renderBoardList(this, 'remaining');
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -494,6 +494,11 @@ services:
|
||||
# c) Disabled
|
||||
- BIGEVENTS_PATTERN=NONE
|
||||
#---------------------------------------------------------------
|
||||
# ==== NOTIFY ON ASSIGN =====
|
||||
# Notify the user directly when they are added as a card member or
|
||||
# assignee. Set false to disable.
|
||||
#- NOTIFY_ON_ASSIGN=true
|
||||
#---------------------------------------------------------------
|
||||
# ==== EMAIL DUE DATE NOTIFICATION =====
|
||||
# https://github.com/wekan/wekan/pull/2536
|
||||
# System timelines will be showing any user modification for
|
||||
@@ -576,6 +581,12 @@ services:
|
||||
# enable if you fully trust your OIDC provider's email claims, and even
|
||||
# then the provider must send email_verified=true for the merge to happen.
|
||||
#- OAUTH2_MERGE_EXISTING_USERS=false
|
||||
# When false, OAuth2/OIDC login is refused for users that do not already
|
||||
# have a Wekan account (matched by verified email).
|
||||
#- OAUTH2_AUTO_REGISTRATION=true
|
||||
# Comma/space separated OAuth2/OIDC group names whose members become Wekan
|
||||
# admins. Empty = off.
|
||||
#- OAUTH2_ADMIN_GROUPS=
|
||||
# OAuth2 login style: popup or redirect.
|
||||
#- OAUTH2_LOGIN_STYLE=redirect
|
||||
# Application GUID captured during app registration:
|
||||
@@ -780,6 +791,11 @@ services:
|
||||
#
|
||||
#- LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false
|
||||
#
|
||||
# LDAP_BACKGROUND_SYNC_DISABLE_NONEXISTANT_USERS : When true, the LDAP
|
||||
# background sync disables users no longer present in LDAP (and re-enables
|
||||
# them when they reappear).
|
||||
#- LDAP_BACKGROUND_SYNC_DISABLE_NONEXISTANT_USERS=false
|
||||
#
|
||||
# If using LDAPS: LDAP_ENCRYPTION=ssl
|
||||
#- LDAP_ENCRYPTION=false
|
||||
#
|
||||
@@ -876,6 +892,18 @@ services:
|
||||
#
|
||||
# Comma separated list of admin group names to sync.
|
||||
#- LDAP_SYNC_ADMIN_GROUPS=group1,group2
|
||||
#
|
||||
# When true, sync a user's LDAP groups as Wekan Organizations.
|
||||
#- LDAP_SYNC_ORGANIZATIONS=false
|
||||
#
|
||||
# Comma separated allowlist of LDAP group names to sync as Organizations. Empty = all of the user's groups.
|
||||
#- LDAP_SYNC_ORGANIZATIONS_GROUPS=
|
||||
#
|
||||
# When true, sync a user's LDAP groups as Wekan Teams.
|
||||
#- LDAP_SYNC_TEAMS=false
|
||||
#
|
||||
# Comma separated allowlist of LDAP group names to sync as Teams. Empty = all of the user's groups.
|
||||
#- LDAP_SYNC_TEAMS_GROUPS=
|
||||
#---------------------------------------------------------------------
|
||||
# Login to LDAP automatically with HTTP header.
|
||||
# In below example for siteminder, at right side of = is header name.
|
||||
|
||||
@@ -46,6 +46,17 @@ When calling a production Wekan server, ensure it is running via HTTPS and has a
|
||||
| `POST` | `/api/boards/:boardId/lists/:listId/cards` | [Add a card to a list, board, and swimlane.](REST-API-Cards#add-card-to-list-board-swimlane) |
|
||||
| `PUT` | `/api/boards/:boardId/lists/:fromListId/cards/:cardId` | [Update a card.](REST-API-Cards#update-a-card) |
|
||||
| `DELETE` | `/api/boards/:boardId/lists/:listId/cards/:cardId` | [Delete a card.](REST-API-Cards#update-a-card) |
|
||||
### Board Domain Sharing
|
||||
| HTTP Method | Url | Short Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `GET` | `/api/boards/:boardId/domains` | [List the email domains a board is shared with.](#list-board-domains) |
|
||||
| `POST` | `/api/boards/:boardId/domains` | [Share a board with an email domain.](#add-a-board-domain) |
|
||||
| `DELETE` | `/api/boards/:boardId/domains/:domain` | [Stop sharing a board with an email domain.](#remove-a-board-domain) |
|
||||
### GlobalAdmin Settings
|
||||
| HTTP Method | Url | Short Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `GET` | `/api/settings` | [Read the Admin Panel global settings.](#get-settings) |
|
||||
| `PUT` | `/api/settings` | [Update the Admin Panel global settings.](#update-settings) |
|
||||
|
||||
|
||||
---
|
||||
@@ -124,3 +135,89 @@ curl -H "Content-type:application/json" \
|
||||
"tokenExpires": "2017-12-15T00:47:26.303Z"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Board Domain Sharing
|
||||
|
||||
Boards can be shared with every user on an email **domain** (for example everyone
|
||||
with an `@example.com` address). These endpoints list, add and remove the domains a
|
||||
board is shared with.
|
||||
|
||||
A board admin (or a site admin) is required to add or remove domains. Domains are
|
||||
validated: they are stored lowercase, must contain a `.`, and must not contain `@`
|
||||
or whitespace.
|
||||
|
||||
The matching `api.py` commands are `boarddomains`, `addboarddomain` and
|
||||
`removeboarddomain`.
|
||||
|
||||
## List board domains
|
||||
| URL | Requires Auth | HTTP Method |
|
||||
| :--- | :--- | :--- |
|
||||
| `/api/boards/:boardId/domains` | `yes` | `GET` |
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
|
||||
http://localhost:3000/api/boards/abcd1234/domains
|
||||
```
|
||||
|
||||
## Add a board domain
|
||||
| URL | Requires Auth (board admin) | HTTP Method |
|
||||
| :--- | :--- | :--- |
|
||||
| `/api/boards/:boardId/domains` | `yes` | `POST` |
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
|
||||
-H "Content-type:application/json" \
|
||||
-X POST \
|
||||
http://localhost:3000/api/boards/abcd1234/domains \
|
||||
-d '{ "domain": "example.com" }'
|
||||
```
|
||||
|
||||
## Remove a board domain
|
||||
| URL | Requires Auth (board admin) | HTTP Method |
|
||||
| :--- | :--- | :--- |
|
||||
| `/api/boards/:boardId/domains/:domain` | `yes` | `DELETE` |
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
|
||||
-X DELETE \
|
||||
http://localhost:3000/api/boards/abcd1234/domains/example.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# GlobalAdmin Settings
|
||||
|
||||
These endpoints read and update the **Admin Panel** global settings (registration,
|
||||
product name, logos, custom head / manifest, accessibility and support pages, and
|
||||
so on). They are **global-admin only**.
|
||||
|
||||
Updates are applied through a field **whitelist**, so only the supported settings
|
||||
fields can be changed. For security, `mailServer` / SMTP credentials are **never
|
||||
returned** by `GET` and are **never writable** by `PUT`.
|
||||
|
||||
The matching `api.py` commands are `getsettings` and `editsettings <field> <value>`.
|
||||
|
||||
## Get settings
|
||||
| URL | Requires Auth (global admin) | HTTP Method |
|
||||
| :--- | :--- | :--- |
|
||||
| `/api/settings` | `yes` | `GET` |
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
|
||||
http://localhost:3000/api/settings
|
||||
```
|
||||
|
||||
## Update settings
|
||||
| URL | Requires Auth (global admin) | HTTP Method |
|
||||
| :--- | :--- | :--- |
|
||||
| `/api/settings` | `yes` | `PUT` |
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
|
||||
-H "Content-type:application/json" \
|
||||
-X PUT \
|
||||
http://localhost:3000/api/settings \
|
||||
-d '{ "productName": "My WeKan", "disableRegistration": true }'
|
||||
```
|
||||
@@ -1,36 +1,18 @@
|
||||
## About markdown changes
|
||||
# Build WeKan and Create Pull Request
|
||||
|
||||
Wekan v4.29 changes markdown rendering from [marked](https://github.com/markedjs/marked) to [markdown-it](https://github.com/markdown-it/markdown-it).
|
||||
|
||||
## About emoji
|
||||
|
||||
With markdown-it, also [markdown-it-emoji](https://github.com/markdown-it/markdown-it-emoji) plugin has been added, supporting [full list of GitHub emojis](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/full.json).
|
||||
|
||||
Example emoji code, that you can add for example to card name, card description etc:
|
||||
```
|
||||
:rainbow: :thumbsup: :100:
|
||||
```
|
||||
That shows emojis :rainbow: :thumbsup: :100:
|
||||
|
||||
## About other markdown-it plugins
|
||||
|
||||
For markdown-it, there are also other [syntax extensions](https://github.com/markdown-it/markdown-it#syntax-extensions) where some are listed at that markdown-it page, and [others at npmjs.com](https://www.npmjs.org/browse/keyword/markdown-it-plugin).
|
||||
|
||||
For example, how to get some [mermaid plugin](https://www.npmjs.com/search?q=markdown-it-mermaid) working so that some syntax works for https://mermaid-js.github.io/mermaid/ ?
|
||||
|
||||
## How you could add another plugin
|
||||
WeKan currently uses Meteor 3.
|
||||
|
||||
Using newest Ubuntu amd64:
|
||||
|
||||
# Meteor 2
|
||||
# Meteor 3
|
||||
|
||||
### 1. Install git and configure it
|
||||
```
|
||||
sudo apt -y install git
|
||||
|
||||
git config --global user.name "Yourfirstname Yourlastname"
|
||||
git config --global user.name "YOUR-FIRSTNAME YOUR-LASTNAME"
|
||||
|
||||
git config --global user.email email-address-you-use-at-github@example.com
|
||||
git config --global user.email YOUR-EMAIL-ADDRESS@gmail.com
|
||||
|
||||
git config --global push.default simple
|
||||
|
||||
@@ -44,47 +26,34 @@ Host *
|
||||
|
||||
Host github.com
|
||||
Hostname github.com
|
||||
User xet7
|
||||
IdentityFile ~/.ssh/id_xet7ed
|
||||
User YOUR-GITHUB-USERNAME
|
||||
IdentityFile ~/.ssh/id_github
|
||||
```
|
||||
Save and Exit with Ctrl-o Enter Ctrl-x Enter
|
||||
|
||||
If you do not have ssh key, create it:
|
||||
```
|
||||
ssh-keygen
|
||||
ssh-keygen -t ed25519 -f ~/.ssh/id_github
|
||||
```
|
||||
And press Enter about 3 times, until you have private key at `~/.ssh/id_rsa` and public key at `~/.ssh/id_rsa.pub`
|
||||
And press Enter about 3 times, until you have private key at `~/.ssh/id_github` and public key at `~/.ssh/id_github.pub`
|
||||
|
||||
Add public key `.pub` to your github account web interface.
|
||||
Add public key `.pub` to your GitHub SSH Keys at https://github.com/settings/keys
|
||||
|
||||
Add path to Meteor:
|
||||
```
|
||||
nano .bashrc
|
||||
```
|
||||
There at bottom add:
|
||||
```
|
||||
export PATH=~/.meteor:$PATH
|
||||
```
|
||||
Save and Exit with Ctrl-o Enter Ctrl-x Enter
|
||||
|
||||
### 2. Create fork of `https://github.com/wekan/wekan` at GitHub web page
|
||||
### 2. Click Create fork at https://github.com/wekan/wekan webpage
|
||||
|
||||
```
|
||||
mkdir repos
|
||||
|
||||
cd repos
|
||||
|
||||
git clone git@github.com:YourGithubUsername/wekan.git
|
||||
git clone git@github.com:YOUR-GITHUB-USERNAME/wekan.git
|
||||
|
||||
cd wekan
|
||||
```
|
||||
|
||||
### IMPORTANT: Do NOT `npm audit fix --force`
|
||||
|
||||
IMPORTANT: Do NOT `npm audit fix --force`, it downgrades @meteorjs/rspack and breaks builds.
|
||||
`npm audit` shows false info, it does not recognize that elliptic is already updated
|
||||
to 6.6.1 with override at package.json like you can see with `npm list elliptic`.
|
||||
https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v850-2026-04-03-wekan--release
|
||||
Because it downgrades @meteorjs/rspack and breaks builds.
|
||||
|
||||
### 3. Select option 1 to install dependencies, and then Enter.
|
||||
|
||||
@@ -102,47 +71,25 @@ https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v850-2026-04-03-wekan--rel
|
||||
|
||||
3
|
||||
```
|
||||
That does: 1 install dependencies, 2 builds wekan, 3 starts wekan in development mode with command `meteor`, so it can detect if some file changes and try to rebuild automatically and reload webbroser. But, still sometimes, it may need stopping with Ctrl-c and full build with option 2.
|
||||
That does:
|
||||
- 1 install dependencies,
|
||||
- 2 builds wekan
|
||||
- 3 starts wekan in development mode with command `meteor`, so it can detect if some file changes and try to rebuild automatically.
|
||||
|
||||
And then [register and login](Adding-users) at http://localhost:4000
|
||||
And then [register and login](Adding-users) with webbrowser at http://localhost:4000
|
||||
|
||||
### OPTIONAL, NOT NEEDED: 5. Add new plugin package
|
||||
```
|
||||
meteor npm install markdown-it-something --save
|
||||
```
|
||||
### 4. Make and test your changes
|
||||
|
||||
Edit file `wekan/packages/markdown/src-integration.js` and add using that new package, using code example from that new plugin page, or similar like emoji plugin was added.
|
||||
Use `rebuild-wekan.sh` to run all tests.
|
||||
|
||||
### 7. Test
|
||||
### 5. If it works, create pull request
|
||||
|
||||
Test does that new plugin syntax work, for example in card title, card description etc on other input fields.
|
||||
|
||||
### 8. If it works, create pull request
|
||||
|
||||
If normal markdown, emoji, and your new added plugin syntax all work, commit your changes:
|
||||
When your changes work, commit them:
|
||||
```
|
||||
git add --all
|
||||
|
||||
git commit -m "Added plugin markdown-it-something."
|
||||
git commit -m "Describe your change here."
|
||||
|
||||
git push
|
||||
```
|
||||
And then at your GitHub for `https://github.com/YOUR-GITHUB-USERNAME/wekan` click `Create pull request`.
|
||||
|
||||
## Updating
|
||||
|
||||
Updating to next Meteor release:
|
||||
```
|
||||
meteor update
|
||||
|
||||
meteor npm update
|
||||
```
|
||||
Updating to specific Meteor release:
|
||||
```
|
||||
meteor update --release METEOR@3.4
|
||||
```
|
||||
If you are changing Meteor and Node.js versions, you may need to reset Meteor:
|
||||
```
|
||||
meteor reset
|
||||
```
|
||||
Or alternatively, delete wekan repo (if you did not need any changes you made), and clone wekan repo again, and then build etc.
|
||||
@@ -21,6 +21,27 @@ lets you:
|
||||
|
||||

|
||||
|
||||
### People: Domains tab
|
||||
|
||||
**Admin Panel → People** has a **Domains** tab that lists the email domains in use
|
||||
across the instance together with the number of users on each domain.
|
||||
|
||||
### People: Organizations / Teams toggle columns
|
||||
|
||||
The **Organizations** and **Teams** tabs under **Admin Panel → People** have
|
||||
per-organization / per-team toggle columns:
|
||||
|
||||
- **Shared Templates** — whether template boards shared with this organization/team
|
||||
are available to its members.
|
||||
- **Propagate Members To Boards** — whether members of this organization/team are
|
||||
automatically added to the relevant boards. Enabling it adds the group's member
|
||||
users to the regular boards that list the group (add-only; template boards are
|
||||
skipped). It runs during the LDAP background sync and can also be triggered by an
|
||||
admin.
|
||||
- **Sync Members From Auth Provider** — whether the membership is kept in sync from
|
||||
the authentication provider (for example LDAP groups, see
|
||||
`LDAP_SYNC_ORGANIZATIONS` / `LDAP_SYNC_TEAMS`).
|
||||
|
||||
## Sandstorm platform
|
||||
|
||||
On Sandstorm, authentication (LDAP, passwordless email, SAML, GitHub and Google
|
||||
|
||||
@@ -38,6 +38,22 @@ Click a member's initials or avatar to set their role on the board:
|
||||
|
||||

|
||||
|
||||
## Share a board with an email Domain
|
||||
|
||||
In the board members sidebar there is a **Domains** tab. From it you can share a
|
||||
board with a whole email **domain** (for example `example.com`), so every user with
|
||||
a verified email address on that domain becomes a member of the board. This is in
|
||||
addition to sharing with individual members, Organizations and Teams.
|
||||
|
||||
## Notify on assign
|
||||
|
||||
When a user is added as a card **member** or **assignee**, they can be notified
|
||||
directly. This is controlled by the environment variable:
|
||||
|
||||
- `NOTIFY_ON_ASSIGN` (default `true`) — when `true`, the user added as a card
|
||||
member/assignee gets a direct notification. Set to `false` to disable these
|
||||
notifications instance-wide. On Snap use `notify-on-assign`.
|
||||
|
||||
## Related
|
||||
|
||||
- [Adding Users](../../Login/Adding-users.md)
|
||||
|
||||
@@ -28,6 +28,27 @@ At Roadmap of some other Wekan Contributors:
|
||||
|
||||
***
|
||||
|
||||
# Template boards are group-only
|
||||
|
||||
Template boards are shared with **groups** — Organizations, Teams or email
|
||||
**Domains** — rather than with individual users. The only individual shown on a
|
||||
template board is its **creator**; everyone else gains access through the
|
||||
organization, team or domain the template is shared with. Sharing a board with an
|
||||
email domain is done from the **Domains** tab in the board members sidebar (see
|
||||
[Members and Permissions](Members/Members.md)).
|
||||
|
||||
## Drag a template board to share it
|
||||
|
||||
From **All Boards / Templates** you can **drag a Template Board onto an
|
||||
Organization, Team or Domain** to share it with that group (drag-to-share). The
|
||||
Organizations and Teams offered as drop targets are only those whose per-org /
|
||||
per-team **Shared Templates** flag is enabled in
|
||||
**Admin Panel → People → Organizations / Teams** (see
|
||||
[Admin Panel](Admin-Panel/Admin-Panel.md)); organizations and teams without that
|
||||
flag are not offered as drop targets.
|
||||
|
||||
***
|
||||
|
||||
# If you get "Board not Found" after archieving Template Board
|
||||
|
||||
From: https://github.com/wekan/wekan/issues/4632
|
||||
|
||||
@@ -13,6 +13,19 @@ cat board.json | xclip -se c
|
||||
|
||||
4. Click Import.
|
||||
|
||||
## Exporting very large boards (without attachments)
|
||||
|
||||
By default a board's JSON export includes its attachments as base64 data. For very
|
||||
large boards this can overflow the JSON serializer, so there is an option to export
|
||||
the board's **structure without the base64 attachment data**:
|
||||
|
||||
```
|
||||
GET /api/boards/:boardId/export?attachments=false
|
||||
```
|
||||
|
||||
The board export menu has a matching **Export / JSON (without attachments)** entry.
|
||||
The default export (no `attachments=false`) still includes the attachments.
|
||||
|
||||
## JSON to SQLite3
|
||||
|
||||
```
|
||||
|
||||
@@ -165,6 +165,34 @@ sudo snap set wekan ldap-user-search-scope='sub'
|
||||
sudo snap set wekan ldap-username-field='uid'
|
||||
```
|
||||
|
||||
## LDAP background sync, Organizations and Teams sync
|
||||
|
||||
These settings extend LDAP background sync and let LDAP groups be mirrored into
|
||||
Wekan Organizations and Teams. They are read as environment variables (Docker /
|
||||
Source). On Snap use the lower-case dash-separated equivalent (for example
|
||||
`ldap-sync-organizations`).
|
||||
|
||||
- `LDAP_BACKGROUND_SYNC_DISABLE_NONEXISTANT_USERS` (default `false`) — when
|
||||
`true`, background sync disables Wekan users that are no longer found in the LDAP
|
||||
directory, and re-enables them if they reappear. This makes LDAP authoritative
|
||||
for the active/inactive status of users.
|
||||
- `LDAP_SYNC_ORGANIZATIONS` (default `false`) — when `true`, a user's LDAP groups
|
||||
are synced into that user's Wekan **Organizations**.
|
||||
- `LDAP_SYNC_ORGANIZATIONS_GROUPS` (default empty) — comma-separated list of LDAP
|
||||
group names to sync as Organizations. Leave empty to sync all of the user's
|
||||
groups.
|
||||
- `LDAP_SYNC_TEAMS` (default `false`) — when `true`, a user's LDAP groups are
|
||||
synced into that user's Wekan **Teams**.
|
||||
- `LDAP_SYNC_TEAMS_GROUPS` (default empty) — comma-separated list of LDAP group
|
||||
names to sync as Teams. Leave empty to sync all of the user's groups.
|
||||
|
||||
Notes:
|
||||
|
||||
- LDAP admin status (`LDAP_SYNC_ADMIN_STATUS` / `LDAP_SYNC_ADMIN_GROUPS`) is now
|
||||
also kept up to date during background sync, not only at sign-in.
|
||||
- LDAP group-filter values are now escaped, so a DN or `cn` that contains
|
||||
parentheses no longer breaks sign-in.
|
||||
|
||||
## Docker
|
||||
|
||||
LDAP login works now by using this docker-compose.yml file:
|
||||
|
||||
@@ -12,6 +12,19 @@ You can use some OAuth2 providers for logging into Wekan, for example:
|
||||
|
||||
You can ask your identity provider (LDAP, SAML etc) do they support adding OAuth2 application like Wekan.
|
||||
|
||||
## OAuth2/OIDC auto-registration and admin groups
|
||||
|
||||
These settings control who is allowed to log in via OAuth2/OIDC and who becomes a
|
||||
Wekan admin. They are read as environment variables (Docker / Source). On Snap use
|
||||
the lower-case dash-separated equivalent (for example `oauth2-admin-groups`).
|
||||
|
||||
- `OAUTH2_AUTO_REGISTRATION` (default `true`) — when `false`, OAuth2/OIDC login is
|
||||
refused for users that do not already have a Wekan account (matched by verified
|
||||
email address). Use this when accounts must be provisioned in Wekan first.
|
||||
- `OAUTH2_ADMIN_GROUPS` (default empty) — comma/space-separated list of OIDC group
|
||||
names whose members become Wekan admins. This mirrors `LDAP_SYNC_ADMIN_GROUPS`
|
||||
for OAuth2/OIDC.
|
||||
|
||||
## GitLab providing OAuth2 login to Wekan
|
||||
|
||||
[Thanks to derhelge who figured out GitLab login](https://github.com/wekan/wekan/issues/3156).
|
||||
|
||||
@@ -1,5 +1,31 @@
|
||||
# Meteor 3 WeKan: Hosting many WeKan kanban, websites, etc
|
||||
|
||||
## 1) Install WeKan exactly like this
|
||||
|
||||
Use all settings and config files at this page and subdirectories.
|
||||
|
||||
## 2) Backup your previous WeKan server
|
||||
|
||||
See backup scripts etc, mongodump and files directory
|
||||
|
||||
## 3) Restore to your new WeKan install
|
||||
|
||||
Use restore scripts to mongorestore and restore files (attachments and avatars)
|
||||
|
||||
## 4) Move all files from MongoDB to filesystem
|
||||
|
||||
This will speed up loading attachments a lot.
|
||||
|
||||
1. Admin Panel / Attachments
|
||||
2. Default Storage: Filesystem
|
||||
3. Move Files: From MongoDB CollectionFS to Filesystem
|
||||
4. Move Files: From MongoDB Meteor-Files to Filesystem
|
||||
5. MongoDB GridFS Storage: Compact Database (this will make MongoDB disk usage smaller)
|
||||
|
||||
----
|
||||
|
||||
# Migrating from Snap to Docker
|
||||
|
||||
Note: Only `Oplog sockjs` works with multitenancy, see [multitenancy.md](multitenancy).
|
||||
|
||||
Migrating from Parallel Snap setup, because `snap set wekan root-url=...`
|
||||
@@ -90,5 +116,5 @@ docker compose start
|
||||
```
|
||||
6) Upgrade WeKan from old version to new version, for example:
|
||||
```
|
||||
./update-wekan-version.sh 9.10 9.11"
|
||||
./update-wekan-version.sh 9.10 9.11
|
||||
```
|
||||
@@ -10,7 +10,7 @@ This is without container (without Docker or Snap).
|
||||
|
||||
Right click and download files 1-4:
|
||||
|
||||
1. [wekan-9.52-win64.zip](https://github.com/wekan/wekan/releases/download/v9.52/wekan-9.52-win64.zip) or newest available at https://github.com/wekan/wekan/releases/
|
||||
1. [wekan-9.63-win64.zip](https://github.com/wekan/wekan/releases/download/v9.63/wekan-9.63-win64.zip) or newest available at https://github.com/wekan/wekan/releases/
|
||||
|
||||
2. [node.exe](https://nodejs.org/dist/latest-v24.x/win-x64/node.exe)
|
||||
|
||||
@@ -22,7 +22,7 @@ Right click and download files 1-4:
|
||||
|
||||
6. Double click `mongodb-windows-x86_64-7.0.34-signed.msi` . In installer, uncheck downloading MongoDB compass.
|
||||
|
||||
7. Unzip `wekan-9.52-win64.zip` , inside it is directory `bundle`, to it copy other files:
|
||||
7. Unzip `wekan-9.63-win64.zip` , inside it is directory `bundle`, to it copy other files:
|
||||
|
||||
```
|
||||
bundle (directory)
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Nama kumpulan itu sudah wujud",
|
||||
"error-email-taken": "Emel sudah wujud",
|
||||
"export-board": "Exspor Panel",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Pengguna tidak boleh eksport Exce",
|
||||
"export-card": "Eksport Kad",
|
||||
"export-card-pdf": "Eksport kad kepada PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktif",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Diterima",
|
||||
"card-received-on": "Diterima pada",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Hierdie spannaam is reeds geneem",
|
||||
"error-email-taken": "E-pos is reeds geneem",
|
||||
"export-board": "Uitvoerbord",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Gebruiker kan nie Excel uitvoer nie",
|
||||
"export-card": "Voer kaart uit",
|
||||
"export-card-pdf": "Voer kaart uit na PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktief",
|
||||
"active-team": "Aktiewe span",
|
||||
"active-org": "Aktiewe organisasie",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Aktiewe persoon",
|
||||
"card-received": "Ontvang",
|
||||
"card-received-on": "Ontvang op",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisasies",
|
||||
"teams": "Spanne",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Hierdie spannaam is reeds geneem",
|
||||
"error-email-taken": "E-pos is reeds geneem",
|
||||
"export-board": "Uitvoerbord",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Gebruiker kan nie Excel uitvoer nie",
|
||||
"export-card": "Voer kaart uit",
|
||||
"export-card-pdf": "Voer kaart uit na PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktief",
|
||||
"active-team": "Aktiewe span",
|
||||
"active-org": "Aktiewe organisasie",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Aktiewe persoon",
|
||||
"card-received": "Ontvang",
|
||||
"card-received-on": "Ontvang op",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisasies",
|
||||
"teams": "Spanne",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "نام تیم پیشتر ثبت شده است",
|
||||
"error-email-taken": "البريد الإلكتروني مأخوذ بالفعل",
|
||||
"export-board": "انتقال به بیرون برد",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "کاربر قادر به گرفتن خروجی اکسلب نیست",
|
||||
"export-card": "Exporter la carte",
|
||||
"export-card-pdf": "Exporter la carte en PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "نشط",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "رسیده",
|
||||
"card-received-on": "رسیده در",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "سازمان ها",
|
||||
"teams": "تیم ها",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "نام تیم پیشتر ثبت شده است",
|
||||
"error-email-taken": "البريد الإلكتروني مأخوذ بالفعل",
|
||||
"export-board": "انتقال به بیرون برد",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "کاربر قادر به گرفتن خروجی اکسلب نیست",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "نشط",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "رسیده",
|
||||
"card-received-on": "رسیده در",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "سازمان ها",
|
||||
"teams": "تیم ها",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "نام تیم پیشتر ثبت شده است",
|
||||
"error-email-taken": "البريد الإلكتروني مأخوذ بالفعل",
|
||||
"export-board": "انتقال به بیرون برد",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "کاربر قادر به گرفتن خروجی اکسلب نیست",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "نشط",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "رسیده",
|
||||
"card-received-on": "رسیده در",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "سازمان ها",
|
||||
"teams": "تیم ها",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "نام تیم پیشتر ثبت شده است",
|
||||
"error-email-taken": "البريد الإلكتروني مأخوذ بالفعل",
|
||||
"export-board": "انتقال به بیرون برد",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "کاربر قادر به گرفتن خروجی اکسلب نیست",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "نشط",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "رسیده",
|
||||
"card-received-on": "رسیده در",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "سازمان ها",
|
||||
"teams": "تیم ها",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nombre de equipo ya está en uso",
|
||||
"error-email-taken": "Esta dirección de correo ya está en uso",
|
||||
"export-board": "Exportar el tablero",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "El usuario no puede exportar Excel",
|
||||
"export-card": "Exportar la tarjeta",
|
||||
"export-card-pdf": "Exportar la tarjeta a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Bu komandanın adı artıq götürülüb",
|
||||
"error-email-taken": "E-poçt artıq götürülüb",
|
||||
"export-board": "İxrac lövhəsi",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "İstifadəçi Excel-i ixrac edə bilməz",
|
||||
"export-card": "İxrac kartı",
|
||||
"export-card-pdf": "Kartı PDF-ə ixrac edin",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktiv",
|
||||
"active-team": "Aktiv Komanda",
|
||||
"active-org": "Aktiv təşkilat",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Aktiv İnsan",
|
||||
"card-received": "Qəbul edildi",
|
||||
"card-received-on": "Qəbul edilib",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Təşkilatlar",
|
||||
"teams": "Komandalar",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Bu komandanın adı artıq götürülüb",
|
||||
"error-email-taken": "E-poçt artıq götürülüb",
|
||||
"export-board": "İxrac lövhəsi",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "İstifadəçi Excel-i ixrac edə bilməz",
|
||||
"export-card": "İxrac kartı",
|
||||
"export-card-pdf": "Kartı PDF-ə ixrac edin",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktiv",
|
||||
"active-team": "Aktiv Komanda",
|
||||
"active-org": "Aktiv təşkilat",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Aktiv İnsan",
|
||||
"card-received": "Qəbul edildi",
|
||||
"card-received-on": "Qəbul edilib",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Təşkilatlar",
|
||||
"teams": "Komandalar",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Bu komandanın adı artıq götürülüb",
|
||||
"error-email-taken": "E-poçt artıq götürülüb",
|
||||
"export-board": "İxrac lövhəsi",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "İstifadəçi Excel-i ixrac edə bilməz",
|
||||
"export-card": "İxrac kartı",
|
||||
"export-card-pdf": "Kartı PDF-ə ixrac edin",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktiv",
|
||||
"active-team": "Aktiv Komanda",
|
||||
"active-org": "Aktiv təşkilat",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Aktiv İnsan",
|
||||
"card-received": "Qəbul edildi",
|
||||
"card-received-on": "Qəbul edilib",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Təşkilatlar",
|
||||
"teams": "Komandalar",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Ово име правног тима је већ у употреби",
|
||||
"error-email-taken": "Имейлът е вече зает",
|
||||
"export-board": "Експортиране на Табло",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Корисник не може да претвори списе у Excel облик",
|
||||
"export-card": "Претвори предмет",
|
||||
"export-card-pdf": "Претвори предмет у PDF облик",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Активен",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Получена",
|
||||
"card-received-on": "Получена на",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Организации",
|
||||
"teams": "Екипи",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Ce nom d'équipe est déjà utilisé",
|
||||
"error-email-taken": "Cette adresse mail est déjà utilisée",
|
||||
"export-board": "Exporter le tableau",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "L'utilisateur ne peut pas exporter vers Excel",
|
||||
"export-card": "Exporter la carte",
|
||||
"export-card-pdf": "Exporter la carte en PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Actif",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Reçue",
|
||||
"card-received-on": "Reçue le",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisations",
|
||||
"teams": "Équipes",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "El nom d'aquest equip ja està pres",
|
||||
"error-email-taken": "L'adreça de correu electrònic ja és en ús",
|
||||
"export-board": "Exporta tauler",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "L'usuari no pot exportar Excel",
|
||||
"export-card": "Exporta la fitxa",
|
||||
"export-card-pdf": "Exporta la fitxa a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Actiu",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Rebut",
|
||||
"card-received-on": "Rebut el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organitzacions",
|
||||
"teams": "Equips",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "El nom d'aquest equip ja està pres",
|
||||
"error-email-taken": "L'adreça de correu electrònic ja és en ús",
|
||||
"export-board": "Exporta tauler",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "L'usuari no pot exportar Excel",
|
||||
"export-card": "Exporta la fitxa",
|
||||
"export-card-pdf": "Exporta la fitxa a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Actiu",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Rebut",
|
||||
"card-received-on": "Rebut el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organitzacions",
|
||||
"teams": "Equips",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "El nom d'aquest equip ja està pres",
|
||||
"error-email-taken": "L'adreça de correu electrònic ja és en ús",
|
||||
"export-board": "Exporta tauler",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "L'usuari no pot exportar Excel",
|
||||
"export-card": "Exporta la fitxa",
|
||||
"export-card-pdf": "Exporta la fitxa a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Actiu",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Rebut",
|
||||
"card-received-on": "Rebut el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organitzacions",
|
||||
"teams": "Equips",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "该队名已被占用",
|
||||
"error-email-taken": "电子邮件已被占用",
|
||||
"export-board": "出口板",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "用户无法导出 Excel",
|
||||
"export-card": "出口卡",
|
||||
"export-card-pdf": "将卡片导出为 PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "积极的",
|
||||
"active-team": "活跃团队",
|
||||
"active-org": "积极的组织",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "积极的人",
|
||||
"card-received": "已收到",
|
||||
"card-received-on": "收到于",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "组织机构",
|
||||
"teams": "团队",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Jméno týmu již existuje",
|
||||
"error-email-taken": "Tento email byl již použit",
|
||||
"export-board": "Exportovat tablo",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Uživatel nemůže exportovat do Excelu",
|
||||
"export-card": "Exportovat kartu",
|
||||
"export-card-pdf": "Exportovat kartu do PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktivní",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Přijato",
|
||||
"card-received-on": "Přijaté v",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizace",
|
||||
"teams": "Týmy",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Jméno týmu již existuje",
|
||||
"error-email-taken": "Tento email byl již použit",
|
||||
"export-board": "Exportovat tablo",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Uživatel nemůže exportovat do Excelu",
|
||||
"export-card": "Exportovat kartu",
|
||||
"export-card-pdf": "Exportovat kartu do PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktivní",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Přijato",
|
||||
"card-received-on": "Přijaté v",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizace",
|
||||
"teams": "Týmy",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Cymerwyd yr enw tîm hwn eisoes",
|
||||
"error-email-taken": "Mae e-bost eisoes wedi'i gymryd",
|
||||
"export-board": "Bwrdd allforio",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Ni all y defnyddiwr allforio Excel",
|
||||
"export-card": "Allforio cerdyn",
|
||||
"export-card-pdf": "Allforio cerdyn i PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Actif",
|
||||
"active-team": "Tîm Actif",
|
||||
"active-org": "Sefydliad Gweithredol",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Person Gweithgar",
|
||||
"card-received": "Derbyniwyd",
|
||||
"card-received-on": "Derbyniwyd ar",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Sefydliadau",
|
||||
"teams": "Timau",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Cymerwyd yr enw tîm hwn eisoes",
|
||||
"error-email-taken": "Mae e-bost eisoes wedi'i gymryd",
|
||||
"export-board": "Bwrdd allforio",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Ni all y defnyddiwr allforio Excel",
|
||||
"export-card": "Allforio cerdyn",
|
||||
"export-card-pdf": "Allforio cerdyn i PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Actif",
|
||||
"active-team": "Tîm Actif",
|
||||
"active-org": "Sefydliad Gweithredol",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Person Gweithgar",
|
||||
"card-received": "Derbyniwyd",
|
||||
"card-received-on": "Derbyniwyd ar",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Sefydliadau",
|
||||
"teams": "Timau",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Holdnavnet er allerede i brug",
|
||||
"error-email-taken": "Email adressen er allerede i brug",
|
||||
"export-board": "Eksporter tavle",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Brugeren kan ikke eksportere til Excel",
|
||||
"export-card": "Eksporter kort",
|
||||
"export-card-pdf": "Eksporter kort til PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Kunne ikke gemme grænser for overførsel af vedhæftede filer",
|
||||
"attachment-transfer-limits-invalid-value": "Angiv venligst en gyldig positiv grænseværdi",
|
||||
"attachment-upload-limit-label": "Maks. filstørrelse for upload af vedhæftede filer",
|
||||
"avatars-upload-blocked-label": "Avatarer",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Maks. filstørrelse for download af vedhæftede filer",
|
||||
"api-upload-limit-label": "Maks. filstørrelse for API-upload",
|
||||
"api-download-limit-label": "Maks. filstørrelse for API-download",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktiv",
|
||||
"active-team": "Aktivt team",
|
||||
"active-org": "Aktiv organisation",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Aktiv person",
|
||||
"card-received": "Modtaget",
|
||||
"card-received-on": "Modtaget per",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisationer",
|
||||
"teams": "Grupper",
|
||||
"domains": "Domæner",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Delte skabeloner",
|
||||
"shared-templates-info": "Gennemse brugernes delbare skabelontavler, grupperet efter organisation, team eller e-maildomæne. Vælg et eller flere områder nedenfor for at vise de matchende delte skabeloner. Kun brugere, hvis skabelontavle ikke er tom, vises.",
|
||||
"shared-templates-select-scope": "Vælg et område ovenfor (organisationer, teams eller domæner) for at vise delte skabeloner.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Dieser Teamname ist schon vergeben",
|
||||
"error-email-taken": "E-Mail wird schon verwendet",
|
||||
"export-board": "Board exportieren",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Benutzer kann nicht nach Excel exportieren",
|
||||
"export-card": "Karte exportieren",
|
||||
"export-card-pdf": "Karte in ein PDF exportieren",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktiv",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Empfangen",
|
||||
"card-received-on": "Empfangen am",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisationen",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Dieser Teamname ist schon vergeben",
|
||||
"error-email-taken": "E-Mail wird schon verwendet",
|
||||
"export-board": "Board exportieren",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Benutzer kann nicht nach Excel exportieren",
|
||||
"export-card": "Karte exportieren",
|
||||
"export-card-pdf": "Karte als PDF exportieren",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktiv",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Empfangen",
|
||||
"card-received-on": "Empfangen am",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisationen",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Dieser Teamname ist schon vergeben",
|
||||
"error-email-taken": "E-Mail wird schon verwendet",
|
||||
"export-board": "Board exportieren",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Benutzer kann nicht nach Excel exportieren",
|
||||
"export-card": "Karte exportieren",
|
||||
"export-card-pdf": "Karte in ein PDF exportieren",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktiv",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Empfangen",
|
||||
"card-received-on": "Empfangen am",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisationen",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Dieser Teamname ist schon vergeben",
|
||||
"error-email-taken": "E-Mail wird schon verwendet",
|
||||
"export-board": "Board exportieren",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Benutzer kann nicht nach Excel exportieren",
|
||||
"export-card": "Karte exportieren",
|
||||
"export-card-pdf": "Karte in ein PDF exportieren",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktiv",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Empfangen",
|
||||
"card-received-on": "Empfangen am",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisationen",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Il nome di questo team è già stato preso",
|
||||
"error-email-taken": "Το email είναι ήδη κατειλημμένο",
|
||||
"export-board": "Εξαγωγή πίνακα",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Ο χρήστης δε μπορεί να εξάγει σε Excel",
|
||||
"export-card": "Esporta scheda",
|
||||
"export-card-pdf": "Esporta scheda in PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Ενεργό",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Ελήφθη",
|
||||
"card-received-on": "Ελήφθη στις",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizzazioni",
|
||||
"teams": "Team",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Il nome di questo team è già stato preso",
|
||||
"error-email-taken": "Το email είναι ήδη κατειλημμένο",
|
||||
"export-board": "Εξαγωγή πίνακα",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Ο χρήστης δε μπορεί να εξάγει σε Excel",
|
||||
"export-card": "Esporta scheda",
|
||||
"export-card-pdf": "Esporta scheda in PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Ενεργό",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Ελήφθη",
|
||||
"card-received-on": "Ελήφθη στις",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizzazioni",
|
||||
"teams": "Team",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "This team name is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "User can not export Excel",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Active",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Received",
|
||||
"card-received-on": "Received on",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizations",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nombre de equipo ya está en uso",
|
||||
"error-email-taken": "Esta dirección de correo ya está en uso",
|
||||
"export-board": "Exportar el tablero",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "El usuario no puede exportar Excel",
|
||||
"export-card": "Exportar la tarjeta",
|
||||
"export-card-pdf": "Exportar la tarjeta a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nombre de equipo ya está en uso",
|
||||
"error-email-taken": "El email ya existe",
|
||||
"export-board": "Exportar tablero",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "El usuario no puede exportar Excel",
|
||||
"export-card": "Exportar la tarjeta",
|
||||
"export-card-pdf": "Exportar la tarjeta a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido en",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nombre de equipo ya está en uso",
|
||||
"error-email-taken": "Esta dirección de correo ya está en uso",
|
||||
"export-board": "Exportar el tablero",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "El usuario no puede exportar Excel",
|
||||
"export-card": "Exportar la tarjeta",
|
||||
"export-card-pdf": "Exportar la tarjeta a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nombre de equipo ya está en uso",
|
||||
"error-email-taken": "Esta dirección de correo ya está en uso",
|
||||
"export-board": "Exportar el tablero",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "El usuario no puede exportar Excel",
|
||||
"export-card": "Exportar la tarjeta",
|
||||
"export-card-pdf": "Exportar la tarjeta a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nombre de equipo ya está en uso",
|
||||
"error-email-taken": "Esta dirección de correo ya está en uso",
|
||||
"export-board": "Exportar el tablero",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "El usuario no puede exportar Excel",
|
||||
"export-card": "Exportar la tarjeta",
|
||||
"export-card-pdf": "Exportar la tarjeta a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nombre de equipo ya está en uso",
|
||||
"error-email-taken": "Esta dirección de correo ya está en uso",
|
||||
"export-board": "Exportar tablero",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "El usuario no puede exportar Excel",
|
||||
"export-card": "Exportar la tarjeta",
|
||||
"export-card-pdf": "Exportar la tarjeta a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nombre de equipo ya está en uso",
|
||||
"error-email-taken": "Esta dirección de correo ya está en uso",
|
||||
"export-board": "Exportar el tablero",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "El usuario no puede exportar Excel",
|
||||
"export-card": "Exportar la tarjeta",
|
||||
"export-card-pdf": "Exportar la tarjeta a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nombre de equipo ya está en uso",
|
||||
"error-email-taken": "Esta dirección de correo ya está en uso",
|
||||
"export-board": "Exportar el tablero",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "El usuario no puede exportar Excel",
|
||||
"export-card": "Exportar la tarjeta",
|
||||
"export-card-pdf": "Exportar la tarjeta a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nombre de equipo ya está en uso",
|
||||
"error-email-taken": "Esta dirección de correo ya está en uso",
|
||||
"export-board": "Exportar el tablero",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "El usuario no puede exportar Excel",
|
||||
"export-card": "Exportar la tarjeta",
|
||||
"export-card-pdf": "Exportar la tarjeta a PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Recibido",
|
||||
"card-received-on": "Recibido el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "See meeskonna nimi on juba võetud",
|
||||
"error-email-taken": "E-post on juba võetud",
|
||||
"export-board": "Ekspordilaudtee",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Kasutaja ei saa eksportida Exceli",
|
||||
"export-card": "Ekspordikaart",
|
||||
"export-card-pdf": "Kaardi eksportimine PDF-i",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktiivne",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Saabunud",
|
||||
"card-received-on": "Saabunud",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisatsioonid",
|
||||
"teams": "Meeskonnad",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Talde izen hori dagoeneko erabiltzen ari da",
|
||||
"error-email-taken": "E-mail hori hartuta dago",
|
||||
"export-board": "Esportatu arbela",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Erabiltzaileak ezin du esportatu Excel gisa",
|
||||
"export-card": "Esportatu txartela",
|
||||
"export-card-pdf": "Esportatu txartela PDF gisa",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Gaituta",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Jasota",
|
||||
"card-received-on": "Recibido el",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizaciones",
|
||||
"teams": "Equipos",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "نام تیم پیشتر ثبت شده است",
|
||||
"error-email-taken": "رایانامه توسط گیرنده دریافت شده است",
|
||||
"export-board": "انتقال به بیرون برد",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "کاربر قادر به گرفتن خروجی اکسلب نیست",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "فعال",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "رسیده",
|
||||
"card-received-on": "رسیده در",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "سازمان ها",
|
||||
"teams": "تیم ها",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "نام تیم پیشتر ثبت شده است",
|
||||
"error-email-taken": "رایانامه توسط گیرنده دریافت شده است",
|
||||
"export-board": "انتقال به بیرون برد",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "کاربر قادر به گرفتن خروجی اکسلب نیست",
|
||||
"export-card": "Export card",
|
||||
"export-card-pdf": "Export card to PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "فعال",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "رسیده",
|
||||
"card-received-on": "رسیده در",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "سازمان ها",
|
||||
"teams": "تیم ها",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Tämä tiimin nimi on jo käytössä",
|
||||
"error-email-taken": "Sähköpostiosoite on jo käytössä",
|
||||
"export-board": "Vie taulu",
|
||||
"export-board-without-attachments": "ilman liitetiedostoja",
|
||||
"user-can-not-export-excel": "Käyttäjä ei voi viedä Excel tiedostoon",
|
||||
"export-card": "Vie kortti",
|
||||
"export-card-pdf": "Vie kortti PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Liitteiden siirtorajoitusten tallentaminen epäonnistui",
|
||||
"attachment-transfer-limits-invalid-value": "Anna kelvollinen positiivinen raja-arvo",
|
||||
"attachment-upload-limit-label": "Liitteiden lähetyksen enimmäiskoko",
|
||||
"avatars-upload-blocked-label": "Profiilikuvat",
|
||||
"avatars-upload-blocked-description": "Estä käyttäjiä lähettämästä uusia profiilikuvia (hyödyllistä kun profiilikuvat synkronoidaan toisesta lähteestä). Profiilikuvat ovat oletuksena käytössä.",
|
||||
"attachment-download-limit-label": "Liitteiden latauksen enimmäiskoko",
|
||||
"api-upload-limit-label": "API-lähetyksen enimmäistiedostokoko",
|
||||
"api-download-limit-label": "API-latauksen enimmäistiedostokoko",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktiivinen",
|
||||
"active-team": "Aktiivinen tiimi",
|
||||
"active-org": "Aktiivinen organisaatio",
|
||||
"org-shared-templates": "Jaetut mallit",
|
||||
"org-propagate-members-to-boards": "Levitä jäsenet tauluihin",
|
||||
"org-sync-members-from-auth": "Synkronoi jäsenet tunnistautumispalvelusta",
|
||||
"team-shared-templates": "Jaetut mallit",
|
||||
"team-propagate-members-to-boards": "Levitä jäsenet tauluihin",
|
||||
"team-sync-members-from-auth": "Synkronoi jäsenet tunnistautumispalvelusta",
|
||||
"active-person": "Aktiivinen henkilö",
|
||||
"card-received": "Vastaanotettu",
|
||||
"card-received-on": "Vastaanotettu",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisaatiot",
|
||||
"teams": "Tiimit",
|
||||
"domains": "Verkkotunnukset",
|
||||
"domain": "Verkkotunnus",
|
||||
"add-domain": "Lisää verkkotunnus",
|
||||
"share-template-with": "Jaa malli kohteelle",
|
||||
"drag-template-here-to-share": "Vedä mallitaulu tähän jakaaksesi sen",
|
||||
"remove-domain-from-board": "Haluatko varmasti poistaa tämän verkkotunnuksen tältä taululta ?",
|
||||
"invalid-domain": "Virheellinen verkkotunnus. Käytä muotoa esimerkki.fi (ei @-merkkiä eikä välilyöntejä).",
|
||||
"domain-user-count": "Käyttäjät",
|
||||
"no-items-message": "Ei kohteita.",
|
||||
"shared-templates": "Jaetut mallit",
|
||||
"shared-templates-info": "Selaa käyttäjien jaettavia mallitauluja ryhmiteltynä organisaation, tiimin tai sähköpostin verkkotunnuksen mukaan. Valitse alta yksi tai useampi laajuus näyttääksesi vastaavat jaetut mallit. Vain käyttäjät, joiden Mallit-taulu ei ole tyhjä, näytetään.",
|
||||
"shared-templates-select-scope": "Valitse yllä laajuus (Organisaatiot, Tiimit tai Verkkotunnukset) näyttääksesi jaetut mallit.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Ce nom d'équipe est déjà utilisé",
|
||||
"error-email-taken": "Cette adresse de courriel est déjà utilisée",
|
||||
"export-board": "Exporter le tableau",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "L'utilisateur ne peut pas exporter vers Excel",
|
||||
"export-card": "Exporter la carte",
|
||||
"export-card-pdf": "Exporter la carte en PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Actif",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Reçue",
|
||||
"card-received-on": "Reçue le",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisations",
|
||||
"teams": "Équipes",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Ce nom d'équipe est déjà utilisé",
|
||||
"error-email-taken": "Cette adresse mail est déjà utilisée",
|
||||
"export-board": "Exporter le tableau",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "L'utilisateur ne peut pas exporter vers Excel",
|
||||
"export-card": "Exporter la carte",
|
||||
"export-card-pdf": "Exporter la carte en PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Actif",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Reçue",
|
||||
"card-received-on": "Reçue le",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisations",
|
||||
"teams": "Équipes",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Ce nom d'équipe est déjà utilisé",
|
||||
"error-email-taken": "Cette adresse de courriel est déjà utilisée",
|
||||
"export-board": "Exporter le tableau",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "L'utilisateur ne peut pas exporter vers Excel",
|
||||
"export-card": "Exporter la carte",
|
||||
"export-card-pdf": "Exporter la carte en PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Actif",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "Reçue",
|
||||
"card-received-on": "Reçue le",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisations",
|
||||
"teams": "Équipes",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Dizze teamnamme is al nommen",
|
||||
"error-email-taken": "E-post is al nommen",
|
||||
"export-board": "Eksportearje board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Brûker kin Excel net eksportearje",
|
||||
"export-card": "Eksportearje card",
|
||||
"export-card-pdf": "Eksportearje kaart nei PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktyf",
|
||||
"active-team": "Aktive team",
|
||||
"active-org": "Aktive organisaasje",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Aktive persoan",
|
||||
"card-received": "Untfongen",
|
||||
"card-received-on": "Untfongen op",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisaasjes",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Dizze teamnamme is al nommen",
|
||||
"error-email-taken": "E-post is al nommen",
|
||||
"export-board": "Eksportearje board",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Brûker kin Excel net eksportearje",
|
||||
"export-card": "Eksportearje card",
|
||||
"export-card-pdf": "Eksportearje kaart nei PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Aktyf",
|
||||
"active-team": "Aktive team",
|
||||
"active-org": "Aktive organisaasje",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Aktive persoan",
|
||||
"card-received": "Untfongen",
|
||||
"card-received-on": "Untfongen op",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organisaasjes",
|
||||
"teams": "Teams",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nome de equipa já está em uso.",
|
||||
"error-email-taken": "Endereço de e-mail já está em uso",
|
||||
"export-board": "Exportar taboleiro",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Utilizador não pode exportar Excel",
|
||||
"export-card": "Exportar cartão",
|
||||
"export-card-pdf": "Exportar cartão para PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Time ativo",
|
||||
"active-org": "Organização ativa",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Pessoa ativa",
|
||||
"card-received": "Recebido",
|
||||
"card-received-on": "Recebido em",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizações",
|
||||
"teams": "Equipas",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "Este nome de equipa já está em uso.",
|
||||
"error-email-taken": "Endereço de e-mail já está em uso",
|
||||
"export-board": "Exportar taboleiro",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "Utilizador não pode exportar Excel",
|
||||
"export-card": "Exportar cartão",
|
||||
"export-card-pdf": "Exportar cartão para PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "Activo",
|
||||
"active-team": "Time ativo",
|
||||
"active-org": "Organização ativa",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Pessoa ativa",
|
||||
"card-received": "Recebido",
|
||||
"card-received-on": "Recebido em",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "Organizações",
|
||||
"teams": "Equipas",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "આ ટીમનું નામ પહેલેથી જ લેવામાં આવ્યું છે",
|
||||
"error-email-taken": "ઈમેલ પહેલેથી જ લેવામાં આવ્યો છે",
|
||||
"export-board": "નિકાસ બોર્ડ",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "વપરાશકર્તા Excel નિકાસ કરી શકતા નથી",
|
||||
"export-card": "નિકાસ કાર્ડ",
|
||||
"export-card-pdf": "પીડીએફમાં કાર્ડ નિકાસ કરો",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "સક્રિય",
|
||||
"active-team": "સક્રિય ટીમ",
|
||||
"active-org": "સક્રિય સંસ્થા",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "સક્રિય વ્યક્તિ",
|
||||
"card-received": "પ્રાપ્ત",
|
||||
"card-received-on": "પર પ્રાપ્ત થયો",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "સંસ્થાઓ",
|
||||
"teams": "ટીમો",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
@@ -496,6 +496,7 @@
|
||||
"error-teamname-taken": "שם הצוות הזה כבר תפוס",
|
||||
"error-email-taken": "כתובת הדוא״ל כבר נמצאת בשימוש",
|
||||
"export-board": "ייצוא לוח",
|
||||
"export-board-without-attachments": "without attachments",
|
||||
"user-can-not-export-excel": "המשתמש לא יכול לייצא ל־Excel",
|
||||
"export-card": "ייצוא כרטיס",
|
||||
"export-card-pdf": "ייצוא כרטיס ל־PDF",
|
||||
@@ -823,6 +824,8 @@
|
||||
"attachment-transfer-limits-save-failed": "Failed to save attachment transfer limits",
|
||||
"attachment-transfer-limits-invalid-value": "Please enter a valid positive limit value",
|
||||
"attachment-upload-limit-label": "Attachments upload max file size",
|
||||
"avatars-upload-blocked-label": "Avatars",
|
||||
"avatars-upload-blocked-description": "Block users from uploading new avatars (useful when avatars are synced from another source). Avatars are enabled by default.",
|
||||
"attachment-download-limit-label": "Attachments download max file size",
|
||||
"api-upload-limit-label": "API upload max file size",
|
||||
"api-download-limit-label": "API download max file size",
|
||||
@@ -903,6 +906,12 @@
|
||||
"active": "פעיל",
|
||||
"active-team": "Active Team",
|
||||
"active-org": "Active Organization",
|
||||
"org-shared-templates": "Shared Templates",
|
||||
"org-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"org-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"team-shared-templates": "Shared Templates",
|
||||
"team-propagate-members-to-boards": "Propagate Members To Boards",
|
||||
"team-sync-members-from-auth": "Sync Members From Auth Provider",
|
||||
"active-person": "Active Person",
|
||||
"card-received": "התקבל",
|
||||
"card-received-on": "התקבל במועד",
|
||||
@@ -1249,6 +1258,14 @@
|
||||
"organizations": "ארגונים",
|
||||
"teams": "צוותים",
|
||||
"domains": "Domains",
|
||||
"domain": "Domain",
|
||||
"add-domain": "Add Domain",
|
||||
"share-template-with": "Share template with",
|
||||
"drag-template-here-to-share": "Drag a Template Board here to share it",
|
||||
"remove-domain-from-board": "Are you sure you want to remove this domain from this board ?",
|
||||
"invalid-domain": "Invalid domain. Use a domain like example.com (no @ or spaces).",
|
||||
"domain-user-count": "Users",
|
||||
"no-items-message": "No items.",
|
||||
"shared-templates": "Shared templates",
|
||||
"shared-templates-info": "Browse users' shareable template boards, grouped by Organization, Team or email Domain. Select one or more scopes below to show the matching shared templates. Only users whose Templates board is not empty are listed.",
|
||||
"shared-templates-select-scope": "Select a scope above (Organizations, Teams or Domains) to show shared templates.",
|
||||
|
||||
Loaded 100 of 253 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user