Compare commits

...
141 Commits
Author SHA1 Message Date
github-actions[bot] b988efae19 Bump versions for v9.63 2026-06-19 19:19:34 +00:00
Lauri Ojansivu 8a8f036947 Prepare v9.63 release 2026-06-19 22:09:32 +03:00
Lauri OjansivuandClaude Opus 4.8 1e5ae8f649 Make remaining release version substitutions self-healing
Harden the last old-version-anchored seds in releases/version.sh, the
same fragile pattern that froze the Docker ARG VERSION and the wekan.fi
install page:

- snapcraft.yaml bundle download (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). Anchor on 'wekan-<v>-'
  and 'releases/download/v<v>/' and assert; was stuck at 9.57.
- sandstorm appVersion: global self-healing rewrite; dropped the
  redundant $OLD_NO_DOTS-anchored fixup.
- Offline.md doc links: self-healing with a soft warning (cosmetic, so
  it must not fail the release); was stuck at 9.57.

Also corrected snapcraft.yaml and Offline.md from their stale 9.57 to
the current 9.62 (package.json is now v9.62.0).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:59:27 +03:00
Lauri OjansivuandClaude Opus 4.8 40c3ee098e Fix wekan.fi install page version never updating from a stale value
release-website.sh (and version.sh's local-flow copy) updated the
install page version with a sed anchored on >v$OLD</span>. Once the
published page's value did not match the $OLD passed for a release, the
substitution silently no-op'd, so the page stuck at an old version
(v9.53) while every later release passed a newer $OLD that no longer
matched. Same fragile-old-version-anchor failure mode as the Dockerfile
ARG VERSION bug.

Anchor on the stable <span class="version-number"> instead and
re-normalize whatever version is there to v$NEW, with an assert so a
miss fails loudly instead of silently. Self-healing from any stale value.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:02:55 +03:00
github-actions[bot] 7441937f67 Bump versions for v9.62 2026-06-19 16:47:32 +00:00
Lauri Ojansivu 0ea935e5d9 Prepare v9.62 release 2026-06-19 19:37:24 +03:00
Lauri OjansivuandClaude Opus 4.8 8dbabc145f Updated ChangeLog for v9.62.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 19:37:01 +03:00
Lauri OjansivuandClaude Opus 4.8 e057e9454e Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 19:35:40 +03:00
Lauri OjansivuandClaude Opus 4.8 b30f4967cb Fix Docker image reporting a stale Admin Panel version
The Admin Panel reads the WeKan version from the bundled package.json,
which comes verbatim from the wekan-<version>-<arch>.zip the Dockerfile
unzips into /build. The release-all.yml docker job never passed
--build-arg VERSION, so every image built against the Dockerfile's
hardcoded ARG VERSION default, which was stuck at 9.57 because
releases/version.sh rewrote it with a sed anchored on the old version
number (silently no-op when old_version did not match). Images tagged
v9.59/v9.60/v9.61 thus shipped the v9.57 bundle and reported 9.57.

- docker job now passes --build-arg VERSION=${VERSION}
- version.sh anchors the Dockerfile ARG VERSION rewrite on the
  ^ARG VERSION= prefix and asserts the result
- new pre-build guard fails fast if the release bundle's app
  package.json version does not match the release tag
- corrected the stale Dockerfile default to 9.60

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 19:35:40 +03:00
github-actions[bot] ff82e89cd8 Bump versions for v9.61 2026-06-19 14:26:58 +00:00
Lauri Ojansivu 0b46b4d12e Updated ChangeLog. 2026-06-19 17:15:35 +03:00
Lauri OjansivuandClaude Opus 4.8 862f20d9d7 Updated ChangeLog.
Add upcoming section for the GH_REPO bundle-attach fix.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 17:13:57 +03:00
Lauri OjansivuandClaude Opus 4.8 c41ad5fd68 release-all: set GH_REPO on bundle-attach steps so gh finds the repo
The win64 attach step failed with "failed to run git: fatal: not a git
repository" — gh release upload tries to detect the target repo from a git
remote, but build-win64 checks the repo out into src/ (workspace root is not a
repo) 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).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 17:13:05 +03:00
github-actions[bot] ed59721453 Bump versions for v9.60 2026-06-19 13:51:09 +00:00
Lauri Ojansivu 6cd0a4fbce Updated ChangeLog. 2026-06-19 16:47:21 +03:00
Lauri OjansivuandClaude Opus 4.8 11d3c2dd66 Updated ChangeLog.
Add upcoming section documenting the win64/mac-arm64 post-release move and
the armv7l removal.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:47:21 +03:00
Lauri OjansivuandClaude Opus 4.8 863883a7f7 release-all: drop armv7l from extra-arch bundles (no Node.js 24 armv7l exists)
The build-extra-arches armv7l matrix entry failed with "no matching manifest
for linux/arm/v7" 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.

Remove the armv7l matrix entry; the extra-arch bundles are now s390x + ppc64le.
armv7 was already excluded from the Docker image and snap, so those are
unaffected. Comments document why armv7l is not built.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:47:21 +03:00
Lauri OjansivuandClaude Opus 4.8 227d7877c8 release-all: move win64 + mac-arm64 into the post-release extra-platform phase
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 Docker and snap, which depend on it).

Move them alongside build-extra-arches: they now depend on `release` instead,
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/comments.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:47:21 +03:00
github-actions[bot] c51d180acc Bump versions for v9.59 2026-06-19 13:21:21 +00:00
Lauri Ojansivu 8010f5bd14 Updated ChangeLog. 2026-06-19 16:17:32 +03:00
Lauri Ojansivu 2ba84e35bd Updated translations. 2026-06-19 16:15:01 +03:00
Lauri OjansivuandClaude Opus 4.8 69236a9062 Fix duplicate mapping keys in generated OpenAPI spec breaking API docs
The Release All Platforms bump job regenerates public/api/wekan.yml via
openapi/generate_openapi.py and 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 a
  single mapping.
- The linear emitter reopened the parent schema header once per interleaved
  nested object.

Build sub-schema names from all leading path segments, and stable-sort dotted
properties so each sub-schema's fields stay contiguous and its header is
emitted once. Output is unchanged for existing 1- and 2-level schemas;
@redocly/cli now renders the spec successfully.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:09:16 +03:00
Lauri Ojansivu 534591afa8 Updated ChangeLog. 2026-06-19 12:29:04 +03:00
Lauri Ojansivu 3d663dcac3 Update version. 2026-06-19 12:21:36 +03:00
Lauri OjansivuandClaude Opus 4.8 61045e5681 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 12:17:54 +03:00
Lauri OjansivuandClaude Opus 4.8 7c8ef380f5 releases/version.sh: bump BOTH root version fields in package-lock.json.
package-lock.json (lockfileVersion 3) stores the WeKan root version twice:
the top-level "version" and the nested packages."".version. The old
0,/regex/ sed replaced only the first one, so packages."".version stayed
stale. The manual flow (release.sh) accidentally masked this because
rebuild-release.sh later runs `meteor npm install`, which re-syncs the lock
before commit; but the remote flow (release-all.yml bump job) commits
version.sh's output directly with no intervening npm install, pushing a
package-lock.json whose packages."".version is stale.

Anchor the replacement on the 'v'-prefixed WeKan version ("version": "v...")
and make it a global replace, so both root fields update. The 'v' prefix is
unique to the WeKan version (dependency versions are plain semver like
"5.2.0"), so this never touches any dependency version number.

Node.js (24.x) and MongoDB (7.x) bumps are left as-is: the pinned major is
intentional and the [0-9]+.[0-9]+ minor/patch already bumps any older
24.x/7.x to the newest 24.x/7.x without rewriting other version numbers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 12:17:37 +03:00
Lauri OjansivuandClaude Opus 4.8 a0be74eb33 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 12:07:02 +03:00
Lauri OjansivuandClaude Opus 4.8 2a713a60b8 #2339 #5850: don't auto-create an empty Template Container; make user-created ones functional.
Opening All Boards / Templates no longer auto-creates an empty Template
Container board (the boardList autorun that called ensureTemplatesBoard on
view open is removed). The container is now 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
type is 'template-container'. Without this the container looked right but stayed
inert, because swimlane.isCardTemplatesSwimlane()/... compare against those
pointers to decide that an added card/list/swimlane/board becomes a template.

Deleting a Template Container (boardRemover) now clears those profile 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: opening /templates does not auto-create a
container, the create flow wires the profile pointers, and delete clears them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 12:06:43 +03:00
Lauri Ojansivu ef5c1b503d Updated ChangeLog. 2026-06-19 11:38:13 +03:00
Lauri OjansivuandClaude Opus 4.8 422e70329f #5850 #4737 #2339: make All Boards / org-team-domain sharing work end-to-end (fix bugs found by Playwright e2e).
Fixes the bugs the new Playwright specs (30/31/32/33) surfaced in the recently
added All Boards / Templates redesign and per-org/team/domain board sharing:

- server/imports.js: import the new server method modules (ldapGroupSync,
  sharedTemplateTargets, propagateOrgTeamMembers). This app uses an explicit
  server mainModule, so files not imported here are never loaded and their
  Meteor methods are not registered ("method not found").

- server/ldapGroupSync.js (setUserOrgsTeamsFromLdap): call check() on ALL
  arguments FIRST, before the admin guard. When the guard threw before the
  checks ran, audit-argument-checks raised "Did not check() all arguments" as an
  unhandled rejection, which SyncedCron's global unhandledRejection handler
  turned into a full app crash. Also read the caller with an explicit
  {_id}-selector + isAdmin projection.

- server/models/org.js, server/models/team.js: the per-org/team feature-toggle
  methods (setOrg/Team SharedTemplates, PropagateMembersToBoards,
  SyncMembersFromAuth, setAll*Feature) now check() arguments unconditionally and
  authorize via a callerIsAdmin(this.userId) helper instead of
  Meteor.user()/getCurrentUser(), which can return null inside an async method
  after an await.

- server/publications/boards.js (publishComposite 'boards'): publish
  template-container boards and domain-shared boards too (was hardcoded
  type:'board'), so the Templates sub-view and domain-based sharing actually
  show their boards.

- client/components/boards/boardsList.js: the /templates and /remaining routes
  now apply the same membership filtering as the home route (previously only
  'home' did, so those views were empty).

- tests/playwright/specs/33-board-domains.e2e.js: assert the domain-shared board
  via the Remaining sub-view; the default All Boards view is Starred, which only
  lists starred boards.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:45 +03:00
Lauri OjansivuandClaude Opus 4.8 fef5a9313b rebuild-wekan.sh/.bat: run tests sequentially, not in parallel.
Running the Playwright browser suites (and, in "Run ALL tests", also Mocha +
import + Node E2E) all at once against a single dev server uses too much RAM and
swap on lower-memory machines and can crash them. Run the test jobs one at a
time instead:

- rebuild-wekan.sh: "Run ALL tests" (launch_job) now runs each job to completion
  sequentially instead of backgrounding them; "Test Playwright ALL browsers" runs
  Chromium, Firefox and WebKit one after another rather than as three concurrent
  background processes.
- rebuild-wekan.bat: "Run ALL tests" runs each job with `call` one at a time
  (no more `start` windows + .done polling); the all-browsers options use
  Playwright `--workers=1` so the three browser projects run one at a time.

Menu labels and messages updated to say "sequentially".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:45 +03:00
Lauri Ojansivu 72422401a5 Updated translations. 2026-06-19 11:37:44 +03:00
Lauri Ojansivu 5bbe2181ec Updated tests. 2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 7a94086b3c Translate remaining English strings in fi.i18n.json to Finnish.
Added Finnish translations for 17 previously-missing/untranslated UI strings
(domains, shared templates, member propagation/sync, avatar upload blocking).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 dbaa27dd67 Add GlobalAdmin REST API + OpenAPI + api.py for Domains, attachment/avatar settings and org/team feature toggles (#5850, #4740, #4737).
Adds admin-only REST endpoints modelled on the existing /api/settings ones
(WebApp.handlers + Authentication.checkUserId gate + @operation JSDoc that
feeds the OpenAPI generator): GET /api/admin/domains; GET/PUT
/api/admin/attachment-settings (cloud secrets stay masked, update reuses the
updateAttachmentStorageSettings method path); and GET + per-id/all feature
toggles under /api/admin/orgs and /api/admin/teams. api.py gains matching
admindomains/attachmentsettings/editattachmentsetting/adminorgs/adminteams
and the org/team feature commands. Human REST-API.md docs left to the docs agent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 84678d3492 Docs: document board-domains & GlobalAdmin REST APIs, big-board export, and template drag-to-share / propagate-members (#5850).
Add REST endpoints for board domain sharing and global-admin settings, document
exporting large boards without base64 attachments, and document template
drag-to-share drop-target gating plus Propagate Members To Boards behavior.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 b3827f9596 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 a633a782db Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 f5cca8cea1 Implement Propagate Members To Boards for flagged orgs/teams (#5850, #4737).
For each org/team with orgPropagateMembersToBoards / teamPropagateMembersToBoards
enabled, add that org/team's member users as members of the regular boards that
list it. Add-only (existing members untouched) and template boards are skipped.
New method propagateOrgTeamMembersToBoards, triggered at the end of LDAP sync().

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 ddb88af15b Gate drag-to-share targets on the per-org/team Shared Templates flag (#5850).
The Templates view drop targets now come from a new non-admin getMyShareableGroups
server method, which returns only the user's orgs/teams that have orgSharedTemplates /
teamSharedTemplates set (plus email domains), instead of every org/team the user is in.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 eec97fc5e3 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 54ce112835 Drop the dead latest-v24.x Node.js rewrite from version.sh.
The snap build broke because the Node.js download used the floating
nodejs.org/dist/latest-v24.x/ path with a pinned filename, which 404s once
upstream advances past that release. snapcraft.yaml/Dockerfile now use the
explicit version path (fixed in f74467837), so version.sh no longer needs to
rewrite the latest-v24.x pattern; removing it ensures the bump script can never
re-introduce the bad floating path. The WeKan version itself is already bumped
correctly in snapcraft.yaml by version.sh (version field, download URL and zip
name) and guarded by release-all.yml.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 88e332cfa0 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 4aa8c5eedf Drag a Template Board onto an Org/Team/Domain to share it (#5850).
On the All Boards / Templates view, the left menu now 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,
preserving existing shares and adding no individual members. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 9ddf288450 Fix snap build: Node.js download 404 from latest-v24.x path pinned to removed v24.16.0.
wget https://nodejs.org/dist/latest-v24.x/node-v24.16.0-linux-{x64,arm64}.tar.xz
returned 404 once upstream advanced past 24.16.0, since latest-v24.x only holds the
current v24. Use explicit dist path v24.17.0 (matching Dockerfile NODE_VERSION).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:37:44 +03:00
Lauri OjansivuandClaude Opus 4.8 d9c1bf7280 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 2725b67eef Add GlobalAdmin REST API for Admin Panel global settings.
Adds GET /api/settings and PUT /api/settings, restricted to the global admin
(Authentication.checkUserId), 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 deliberately never returned or writable over REST. Documented
with @operation JSDoc (OpenAPI) and api.py examples (getsettings, editsettings).
Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 46982a3efd Add REST API + OpenAPI for board domain sharing (#5850).
Adds GET/POST/DELETE /api/boards/:boardId/domains REST handlers in
server/models/boards.js with @operation JSDoc (so OpenAPI is generated),
mirroring the board-member endpoints' auth and error handling, plus
boarddomains/addboarddomain/removeboarddomain examples in api.py.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 62bd6f2b20 Add e2e tests for domain-based board sharing (#5850).
Covers setBoardDomains normalisation/validation/de-dup, the admin-only
getDomainsWithUserCounts counts (and non-admin rejection), and that a board
shared via a user's email domain shows up in that user's All Boards.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 6b093bd137 Docs: document new LDAP/OAuth2 env vars and template-sharing features (#4737, #4738, #4739, #4736, #5876, #5850).
Document LDAP background-sync user disabling and Organizations/Teams group sync,
OAuth2/OIDC auto-registration and admin groups, NOTIFY_ON_ASSIGN, and the Admin
Panel People Domains tab plus per-org/team toggles and domain board sharing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 8e2b04a0bc Remove "Add template board" checkbox; use the dedicated Add Template Board flow (#5850).
The generic Create Board popups no longer show an "Add template board" checkbox.
Template boards are created only via the dedicated "Add Template Board" tile on
the All Boards / Templates view (createTemplateContainerPopup), which now signals
template creation through a Session flag instead of pre-checking a hidden
checkbox. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 fb16aadf1d Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 cf4494721d Template boards: members tab is group-only, shows only the creator (#5850).
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. Adds a Board.isAnyTemplateBoard() helper.
Regular boards are unchanged. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 da291a5c6e Add domain-to-board sharing UI and setBoardDomains method (#5850).
Mirrors the existing add-organization-to-board feature for free-form email
domains. Adds a board-admin-gated setBoardDomains method (plus add/remove
single-domain helpers) with trim/lowercase validation, a Domains tab in the
members sidebar listing board.domains with add/remove popups, and the i18n keys.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 edb2672ca5 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 50c5d07382 Domain-based board sharing: add board.domains membership + access (#5850).
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. UI to add domains to a board
and the groups-only restriction follow separately. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 d7a47b9095 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 04b26f4702 Auth sync marks the orgs/teams it manages as Sync Members From Auth Provider (#5850).
When the LDAP/OIDC group sync (setUserOrgsTeamsFromLdap) creates or assigns an
Organization or Team, it now sets that org/team's orgSyncMembersFromAuth /
teamSyncMembersFromAuth flag to true, so the "Sync Members From Auth Provider"
column in Admin Panel > People reflects which orgs/teams are auth-managed.
Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 2a61b462e4 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 8849b015dd Admin Panel / People / Domains: list domains with per-domain user counts (#5850).
Adds a Domains tab to Admin Panel > People that 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, sorted by count). Backed by a new admin-only
getDomainsWithUserCounts method. This is the per-domain piece of the Template
Boards sharing feature. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 2a6adec845 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 9370ddfb34 Test harness: return insertOne/insertMany result so insertedId is available.
helpers/mongo-runner.js discarded the driver result for insertOne/insertMany, so
db.insertOne(...) returned null and callers could not read insertedId. Capture
and return the result (empty insertMany yields insertedCount 0). Lets specs use
the returned id instead of pre-generating _ids.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 4919e9ef6e Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 f7c63ec620 Add e2e tests for per-org/team feature toggle methods (#4737, #5850).
Spec 32 exercises setOrg*/setTeam* per-record toggles (passed a Mongo
selector {_id}) plus the bulk setAllOrgsFeature/setAllTeamsFeature, and
asserts non-admin calls are silent no-ops that leave flags unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 b41dc111f9 Add e2e tests for All Boards / Templates redesign (#2339, #5850).
Covers ensureTemplatesBoard lazy creation/idempotency, the /templates and
/remaining All Boards sub-views filtering by board type, and the member-menu
Templates link navigation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 79847e9450 Add unit test for OAUTH2_ADMIN_GROUPS admin-from-groups logic (#5876).
Self-contained Node + assert test for oauth2AdminStatusFromGroups in
packages/wekan-oidc/loginHandler.js, covering unset/empty env, matching and
non-matching groups, comma+space parsing, object groups, and non-array input.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 8e44965a04 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 57cc7040d2 Add this session's new env vars to start-wekan.sh/.bat, docker-compose.yml and snap config.
OAUTH2_AUTO_REGISTRATION
OAUTH2_ADMIN_GROUPS
NOTIFY_ON_ASSIGN
LDAP_BACKGROUND_SYNC_DISABLE_NONEXISTANT_USERS
LDAP_SYNC_ORGANIZATIONS
LDAP_SYNC_ORGANIZATIONS_GROUPS
LDAP_SYNC_TEAMS
LDAP_SYNC_TEAMS_GROUPS

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 1ee73a0cfb All Boards / Templates: URL routes, link redirect, no auto-created templates board (#2339, #5850).
- /templates and /remaining routes (plus the home / Starred view) now address
  the All Boards left-menu sub-views via the boardListMenu Session value.
- boardList honors the route: selectedMenu initializes from boardListMenu and an
  autorun switches the view live for the three recognized menus, without
  clobbering a workspace selection.
- The Member Settings -> Templates link now opens the All Boards / Templates page
  (pathFor allboards-templates) instead of opening/creating a specific board;
  unused templatesBoardId/Slug helpers removed from userHeader.js.
- New users no longer get an auto-created Templates board at signup. The
  templates-container board (Templates + Card/List/Board Templates swimlanes) is
  now created lazily via the new ensureTemplatesBoard Meteor method, called on
  first use of the Templates view, auth-agnostic for any login method.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 82f028cbea Optional OAUTH2_ADMIN_GROUPS to set admin from OAuth2/OIDC groups (#5876).
When OAUTH2_ADMIN_GROUPS (comma/whitespace separated group names) is set, an
OAuth2/OIDC user whose groups claim intersects the list becomes a Wekan admin;
if set but no intersection, they are not made admin. Group-name extraction
handles both string and displayName object forms. When the var is empty/unset
(the default), isAdmin is left untouched so existing behavior is unchanged. This
mirrors the LDAP_SYNC_ADMIN_GROUPS concept for OAuth2/OIDC.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 6a89da85e6 Escape LDAP group-filter values to fix sign-in with parentheses in DN/cn (#5236).
The user's group_member_format 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 (escapeLdapFilterValue)
for ( ) * \ and NUL, applied to the member-format value in getUserGroups and
isUserInGroup. Strictly safer (also prevents filter injection). Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 ce09a25601 Make the per-org/team membership-sync setting auth-agnostic (#4737, #5850).
Renames the "Sync Members From LDAP" column to "Sync Members From Auth Provider"
so the setting and feature apply to any authentication provider (LDAP,
OAuth2/OIDC, SAML, etc.), not just LDAP. Renames the field/method/i18n key from
*SyncMembersFromLdap / sync-members-from-ldap to *SyncMembersFromAuth /
sync-members-from-auth across schema, publications, admin methods and the admin
UI, and generalizes the translation string and code comments. The other two
columns (Shared Templates, Propagate Members To Boards) were already
auth-agnostic. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 84194f6727 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 c4cc17c10d Per-org/per-team feature toggle columns in Admin Panel > People (#4737, #5850).
Adds three per-record boolean settings to Organizations and Teams, each shown as
its own checkbox column in Admin Panel > People > Organizations / Teams, disabled
by default:
- Shared Templates (orgSharedTemplates / teamSharedTemplates)
- Propagate Members To Boards (orgPropagateMembersToBoards / teamPropagateMembersToBoards)
- Sync Members From LDAP (orgSyncMembersFromLdap / teamSyncMembersFromLdap)

Each column header has select-all / unselect-all (bulk set across all orgs/teams),
and the existing per-tab search box filters the rows. Schema fields, admin-only
toggle methods (per-record and bulk), and the publication projections are added;
all default off. This is the settings surface; the behaviours these flags gate
are wired separately. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 1e4b88e8ee Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 f936247428 LDAP authoritative active status: re-enable reappearing users (#4738).
When LDAP_BACKGROUND_SYNC_DISABLE_NONEXISTANT_USERS is enabled, the background
sync now also re-enables (loginDisabled=false) an LDAP user that is present in
the directory again, in addition to disabling users that disappeared — so LDAP
is the authoritative source of active status (matching the external
docs/Login/ldap-sync/ldap-sync.py behaviour). This recovers from a removal or a
transient outage, and overrides a manual disable of an LDAP user. Still off by
default. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 1727841a3a Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 e65f61d36b Add e2e test for LDAP org/team sync; allow admins to call it (#4737).
setUserOrgsTeamsFromLdap may now be called by an admin in addition to the
server-side LDAP sync (admins already manage orgs/teams in the Admin Panel);
other client calls are still rejected. Adds a Playwright e2e spec that 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. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 17f8413143 Sync LDAP groups as Organizations/Teams at login too (#4737).
Extracts the org/team sync into a shared syncUserGroupsToOrgsTeams helper and
calls it from the login handler (both existing-user and new-user branches) in
addition to the background sync, so a user's LDAP groups become Wekan
Organizations/Teams on login as well. Still gated by LDAP_SYNC_ORGANIZATIONS /
LDAP_SYNC_TEAMS (default off). Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 e6a147a9c0 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 bc8167166d Optionally sync LDAP groups as Organizations or Teams (#4737).
New optional, default-off settings sync a user's LDAP groups into Wekan
Organizations and/or Teams during background sync:
- LDAP_SYNC_ORGANIZATIONS (default false) — create/assign Organizations.
- LDAP_SYNC_TEAMS (default false) — create/assign Teams.
- LDAP_SYNC_ORGANIZATIONS_GROUPS / LDAP_SYNC_TEAMS_GROUPS — optional
  comma-separated allowlists restricting which of the user's groups become
  orgs/teams (empty = all of the user's groups).

The user's groups are read with the existing LDAP_GROUP_FILTER_* machinery
(getUserGroups now also runs when org/team sync is enabled). The create/assign
runs in a new server-only app method (setUserOrgsTeamsFromLdap) that uses the
real Org/Team models, finds an org/team by display name, creates it (active) if
missing, and adds it to the user's membership. The assignment is add-only, so
existing memberships — including manual ones — are never removed. Off by
default, so existing deployments are unaffected. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 f9bfd370aa Optionally disable LDAP users that disappeared from the directory (#4738).
New optional LDAP_BACKGROUND_SYNC_DISABLE_NONEXISTANT_USERS (default false):
when enabled, the background sync disables (loginDisabled=true) LDAP-sourced
Wekan users that are no longer found in the LDAP directory. Off by default, so
existing deployments are unaffected; only LDAP users are considered, and
already-disabled accounts are left untouched (no auto re-enable, so manual
disables are respected). Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 8d28106dd5 Keep LDAP admin status updated during background sync (#4739).
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 as the
login handler to each existing LDAP user it syncs. Gated by the existing
LDAP_SYNC_ADMIN_STATUS flag (default off) and only runs when background sync of
existing users is enabled, so default behaviour is unchanged. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 e2aa16af68 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 c1752c5fba Export big boards: optional JSON export without base64 attachments (#5870).
Big boards could not be exported as JSON because every attachment is base64-
encoded inline into one object that is then JSON.stringify-ed, which overflows
V8's maximum string length (and loads every attachment buffer into memory at
once). Adds an optional ?attachments=false query parameter to
GET /api/boards/:boardId/export that exports the board structure and attachment
metadata while skipping the base64 file data entirely, so large boards export
successfully. A matching "Export / JSON (without attachments)" entry is added to
the board export menu. The default export is unchanged (attachments still
included). Includes a REST regression test. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 10b2123eaf Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 f094f7e867 Notify the assigned card member/assignee directly on assignment (#5833).
When a user is added as a card member (joinMember) or assignee (joinAssignee),
that user is now added to the notification watchers so the assignment reaches
the assignee themselves, instead of only board watchers — or, with
BIGEVENTS_PATTERN, every active board member. The performer of the action is
still skipped, so self-assignment does not self-notify. Optional: opt out with
NOTIFY_ON_ASSIGN=false; on by default. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 1d84e1fc39 Updated ChangeLog.
Reframe the Template Boards entry as improvements to the existing card/board
templates feature (All Boards page changes), and link issue #5850.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 6ee9a4b6a2 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 d822c1a899 Optional OAUTH2_AUTO_REGISTRATION to refuse unknown OAuth2/OIDC logins (#4736).
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. Lets an instance allow only already-provisioned
users (e.g. synced from LDAP) to sign in via OAuth2. Default 'true' keeps the
previous behaviour, so existing deployments are unaffected. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 8d79bf953e Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 100357d953 Template Boards: Add Template Board button, and sharing with Organizations, Teams and Domains.
Describes the planned feature: a dedicated "Add Template Board" button at
All Boards / Templates (replacing the "Add template board" checkbox on the
"+ Add board" button); Template Boards containing Board/Swimlane/List/Card
templates that members can add to their boards; drag-to-share personal Template
Boards onto Organization / Team / Domain boards when enabled in Admin Panel;
Domain meaning the email-address domain; and a new Admin Panel / People /
Domains page listing domains and per-domain user counts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 54e19914b3 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 963e6588c0 Added more tests.
Playwright e2e tests for recent features: the "Mark as complete" Show at
Minicard option (allowsDueCompleteOnMinicard — hidden by default, shown when
enabled) and the Admin Panel avatar-upload block (#4740 isAvatarUploadBlocked /
limitSettings.avatarsUploadBlocked — disabled by default).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 978964e069 Updated ChangeLog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 8e2dacd856 Add Admin Panel setting to block avatar uploads (#4740).
Adds limitSettings.avatarsUploadBlocked (default false — avatars enabled)
to Admin Panel > Attachments > Transfer limits. When enabled, the avatar
upload option is hidden in the user avatar popup and new avatar uploads are
rejected server-side (server/permissions/avatars.js), mirroring the existing
attachmentsUploadBlocked. Useful when avatars are synced from an external
source. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
github-actions[bot] a35e5dc12c Bump versions for v9.57 2026-06-18 23:15:52 +00:00
Lauri Ojansivu 28c89d3308 Updated ChangeLog. 2026-06-19 02:12:34 +03:00
Lauri Ojansivu 067770a527 Updated ChangeLog. 2026-06-19 02:10:10 +03:00
Lauri Ojansivu af3ca0d091 Fix Docker builds.
Thanks to xet7 !
2026-06-19 02:08:41 +03:00
github-actions[bot] c2cf48e347 Bump versions for v9.56 2026-06-18 16:51:38 +00:00
Lauri Ojansivu 8fe3013505 Updated ChangeLog. 2026-06-18 19:39:04 +03:00
Lauri Ojansivu b00537c146 Updated ChangeLog. 2026-06-18 19:37:56 +03:00
Lauri Ojansivu c5910e47d2 Merge pull request #6395 from wekan/dependabot/npm_and_yarn/dompurify-3.4.11
Bump dompurify from 3.4.9 to 3.4.11
2026-06-18 19:35:35 +03:00
github-actions[bot] f703ea663a Bump versions for v9.55 2026-06-18 16:31:48 +00:00
dependabot[bot] 321e70ebed Bump dompurify from 3.4.9 to 3.4.11
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.4.9 to 3.4.11.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.4.9...3.4.11)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-version: 3.4.11
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-18 16:29:34 +00:00
Lauri Ojansivu 729417ba44 Updated ChangeLog. 2026-06-18 19:28:17 +03:00
Lauri Ojansivu 4083b1ad3f Updated ChangeLog. 2026-06-18 19:26:49 +03:00
Lauri Ojansivu 61c8b2fb24 - Build WeKan server bundles for s390x, ppc64le and armv7l.
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.
2026-06-18 19:23:59 +03:00
Lauri Ojansivu ddfe351968 - Fixed "Release All Platforms" snap build failing at upload with exit 64.
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.
2026-06-18 19:22:18 +03:00
Lauri Ojansivu 7557a3eed9 Updates 2026-06-18 14:12:23 +03:00
Lauri Ojansivu dc1e3fb3f1 Deleted build log. 2026-06-18 14:08:44 +03:00
Lauri Ojansivu 6127a08a93 Updated docs 2026-06-18 14:08:43 +03:00
github-actions[bot] 1a352628f1 Bump versions for v9.54 2026-06-18 04:43:26 +00:00
Lauri Ojansivu d0a44d8afa Updated ChangeLog. 2026-06-18 07:38:27 +03:00
Lauri Ojansivu ada5c359f3 Updated ChangeLog. 2026-06-18 07:37:15 +03:00
Lauri Ojansivu d6a8f43866 - [Added a "Show at Minicard" option for the Card Settings "Mark as complete"
toggle](https://github.com/wekan/wekan/issues/6385). 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.
2026-06-18 07:35:45 +03:00
Lauri Ojansivu 7b9ea5e162 Updated ChangeLog. 2026-06-18 06:39:08 +03:00
Lauri Ojansivu ebc0f017bf Updated dependencies. 2026-06-18 06:32:41 +03:00
Lauri Ojansivu fda5293433 Updated dependencies. 2026-06-18 06:20:06 +03:00
Lauri Ojansivu b136fae58c Merge pull request #6389 from wekan/dependabot/npm_and_yarn/tweedegolf/sab-adapter-google-cloud-3.0.2
Bump @tweedegolf/sab-adapter-google-cloud from 1.0.10 to 3.0.2
2026-06-18 06:18:48 +03:00
Lauri Ojansivu f15144d82d Merge pull request #6390 from wekan/dependabot/npm_and_yarn/aws-sdk/client-s3-3.1071.0
Bump @aws-sdk/client-s3 from 3.1054.0 to 3.1071.0
2026-06-18 06:18:14 +03:00
Lauri Ojansivu d87d819486 Merge pull request #6391 from wekan/dependabot/npm_and_yarn/google-cloud/storage-7.21.0
Bump @google-cloud/storage from 7.19.0 to 7.21.0
2026-06-18 06:17:35 +03:00
Lauri Ojansivu 67d09a6fd5 Merge pull request #6392 from wekan/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-8.61.1
Bump @typescript-eslint/eslint-plugin from 8.60.1 to 8.61.1
2026-06-18 06:17:07 +03:00
Lauri Ojansivu 84bda3cf4b Merge pull request #6393 from wekan/dependabot/npm_and_yarn/tests/playwright/mongodb-7.3.0
Bump mongodb from 6.21.0 to 7.3.0 in /tests/playwright
2026-06-18 06:16:37 +03:00
dependabot[bot] 4cb43bde1f Bump @tweedegolf/sab-adapter-google-cloud from 1.0.10 to 3.0.2
Bumps [@tweedegolf/sab-adapter-google-cloud](https://github.com/tweedegolf/storage-abstraction) from 1.0.10 to 3.0.2.
- [Release notes](https://github.com/tweedegolf/storage-abstraction/releases)
- [Changelog](https://github.com/tweedegolf/storage-abstraction/blob/master/changelog.md)
- [Commits](https://github.com/tweedegolf/storage-abstraction/commits)

---
updated-dependencies:
- dependency-name: "@tweedegolf/sab-adapter-google-cloud"
  dependency-version: 3.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-18 03:10:11 +00:00
Lauri Ojansivu f84fda742a Updated dependencies.
Thanks to developers of dependencies !
2026-06-18 06:06:28 +03:00
dependabot[bot] f2b1ba112c Bump @google-cloud/storage from 7.19.0 to 7.21.0
Bumps [@google-cloud/storage](https://github.com/googleapis/google-cloud-node/tree/HEAD/handwritten/storage) from 7.19.0 to 7.21.0.
- [Release notes](https://github.com/googleapis/google-cloud-node/releases)
- [Changelog](https://github.com/googleapis/google-cloud-node/blob/main/handwritten/storage/CHANGELOG.md)
- [Commits](https://github.com/googleapis/google-cloud-node/commits/storage-v7.21.0/handwritten/storage)

---
updated-dependencies:
- dependency-name: "@google-cloud/storage"
  dependency-version: 7.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-18 02:55:04 +00:00
Lauri Ojansivu 1e2008b8bb Updated dependencies.
Thanks to developers of dependencies !
2026-06-18 05:50:15 +03:00
Lauri Ojansivu 85909d08cc Updated docs. 2026-06-18 04:42:51 +03:00
dependabot[bot] c3f53033c9 Bump @aws-sdk/client-s3 from 3.1054.0 to 3.1071.0
Bumps [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3) from 3.1054.0 to 3.1071.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1071.0/clients/client-s3)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-s3"
  dependency-version: 3.1071.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-18 01:20:21 +00:00
dependabot[bot] 5da7de66de Bump mongodb from 6.21.0 to 7.3.0 in /tests/playwright
Bumps [mongodb](https://github.com/mongodb/node-mongodb-native) from 6.21.0 to 7.3.0.
- [Release notes](https://github.com/mongodb/node-mongodb-native/releases)
- [Changelog](https://github.com/mongodb/node-mongodb-native/blob/main/HISTORY.md)
- [Commits](https://github.com/mongodb/node-mongodb-native/compare/v6.21.0...v7.3.0)

---
updated-dependencies:
- dependency-name: mongodb
  dependency-version: 7.3.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-18 01:19:12 +00:00
Lauri Ojansivu 52ca484634 Updated ChangeLog. 2026-06-18 04:16:23 +03:00
Lauri Ojansivu 6d6c26dd9b Updated tests.
Thanks to xet7 !
2026-06-18 04:14:59 +03:00
dependabot[bot] 0f218ba8b6 Bump @typescript-eslint/eslint-plugin from 8.60.1 to 8.61.1
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.60.1 to 8.61.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.61.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-18 00:26:42 +00:00
Lauri Ojansivu debbd6f343 Updated ChangeLog. 2026-06-18 03:24:38 +03:00
Lauri Ojansivu d09b72670c Explain to Dependabot to not complain about rspack.
Thanks to xet7 !
2026-06-18 03:21:38 +03:00
Lauri Ojansivu dd09c1d0d3 Updated docs 2026-06-18 02:42:05 +03:00
github-actions[bot] b78bcaa2f0 Bump versions for v9.53 2026-06-17 22:03:36 +00:00
Lauri Ojansivu b8e66f1675 Updated ChangeLog. 2026-06-18 00:59:58 +03:00
Lauri Ojansivu b65ae77fbd - Fixed Playwright e2e tests all failing because Meteor was not a browser global.
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.
2026-06-18 00:59:58 +03:00
253 changed files with 10149 additions and 9692 deletions

No files matched your search

+37
View File
@@ -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"
-11
View File
@@ -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 \
+260 -39
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+210
View File
@@ -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:
+11
View File
@@ -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().
-12
View File
@@ -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'}}
+13 -12
View File
@@ -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({
+9
View File
@@ -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
+143 -2
View File
@@ -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;
+4 -3
View File
@@ -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 ' > ' }}
+7
View File
@@ -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
+10
View File
@@ -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
+70
View File
@@ -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({
+65 -16
View File
@@ -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'}}")
+122 -2
View File
@@ -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);
+12 -11
View File
@@ -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'}}
+23
View File
@@ -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);
+1 -1
View File
@@ -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
-18
View File
@@ -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
View File
@@ -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');
},
});
+28
View File
@@ -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.
+97
View File
@@ -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
View File
@@ -21,6 +21,27 @@ lets you:
![Wekan Admin Panel email screenshot](../screenshot-admin-panel-email.png)
### 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
+16
View File
@@ -38,6 +38,22 @@ Click a member's initials or avatar to set their role on the board:
![Wekan permissions screenshot](../screenshot-member-comment-only.png)
## 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)
+21
View File
@@ -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
View File
@@ -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
```
+28
View File
@@ -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:
+13
View 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).
+27 -1
View File
@@ -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
```
+2 -2
View File
@@ -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)
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -496,6 +496,7 @@
"error-teamname-taken": "该队名已被占用",
"error-email-taken": "电子邮件已被占用",
"export-board": "出口板",
"export-board-without-attachments": "without attachments",
"user-can-not-export-excel": "用户无法导出 E​​xcel",
"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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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.",
+17
View File
@@ -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