Selaa lähdekoodia

Merge branch 'main' of https://github.com/walster001/wekan-atlanz

walster001 11 kuukautta sitten
vanhempi
sitoutus
ec56dc73c4
42 muutettua tiedostoa jossa 550 lisäystä ja 249 poistoa
  1. 103 96
      .devcontainer/Dockerfile
  2. 28 10
      .github/ISSUE_TEMPLATE.md
  3. 2 2
      .github/workflows/docker-publish.yml
  4. 105 0
      CHANGELOG.md
  5. 50 58
      Dockerfile
  6. 1 1
      Stackerfile.yml
  7. 0 2
      client/components/activities/activities.jade
  8. 3 2
      client/components/boards/boardHeader.jade
  9. 1 1
      client/components/cards/cardDetails.css
  10. 1 1
      client/components/cards/cardDetails.jade
  11. 1 2
      client/components/cards/labels.jade
  12. 6 2
      client/components/lists/list.css
  13. 2 1
      client/components/settings/adminReports.jade
  14. 19 0
      client/components/settings/adminReports.js
  15. 4 4
      client/components/settings/peopleBody.jade
  16. 1 2
      client/components/swimlanes/swimlaneHeader.jade
  17. 2 1
      client/components/swimlanes/swimlanes.css
  18. 2 2
      client/components/swimlanes/swimlanes.jade
  19. 4 4
      client/components/users/userAvatar.jade
  20. 3 0
      docs/wekan.wiki/AsyncAwait.md
  21. 3 1
      docs/wekan.wiki/Azure.md
  22. 7 0
      docs/wekan.wiki/Backup.md
  23. 32 0
      docs/wekan.wiki/Change-Language.md
  24. 28 0
      docs/wekan.wiki/FAQ.md
  25. 6 3
      docs/wekan.wiki/Install-Wekan-from-source-on-Windows.md
  26. 2 0
      docs/wekan.wiki/OAuth2.md
  27. 28 29
      docs/wekan.wiki/Offline.md
  28. 68 0
      docs/wekan.wiki/RocketChat.md
  29. 1 1
      docs/wekan.wiki/_Sidebar.md
  30. 2 2
      imports/i18n/data/eu.i18n.json
  31. 2 2
      imports/i18n/data/fi.i18n.json
  32. 14 0
      models/boards.js
  33. 3 2
      models/exporter.js
  34. 1 1
      package-lock.json
  35. 1 1
      package.json
  36. 1 1
      public/api/wekan.html
  37. 1 1
      public/api/wekan.yml
  38. 1 3
      rebuild-wekan.sh
  39. 1 1
      releases/build-bundle-win64.bat
  40. 3 3
      releases/release-bundle.sh
  41. 2 2
      sandstorm-pkgdef.capnp
  42. 5 5
      snapcraft.yaml

+ 103 - 96
.devcontainer/Dockerfile

@@ -1,20 +1,24 @@
-FROM ubuntu:21.10
-LABEL maintainer="sgr"
+FROM ubuntu:24.04
+LABEL maintainer="wekan"
+LABEL org.opencontainers.image.ref.name="ubuntu"
+LABEL org.opencontainers.image.version="24.04"
+LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
 
 
 # 2022-04-25:
 # 2022-04-25:
 # - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
 # - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
 #   so changing to 21.10. https://github.com/wekan/wekan/issues/4488
 #   so changing to 21.10. https://github.com/wekan/wekan/issues/4488
 
 
-ENV BUILD_DEPS="gnupg gosu libarchive-tools wget curl bzip2 g++ build-essential python3 git ca-certificates iproute2"
-ENV DEBIAN_FRONTEND=noninteractive
+ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ iproute2 apt-transport-https libarchive-tools git"
+ENV DEV_DEPS="curl python3 ca-certificates build-essential"
+ARG DEBIAN_FRONTEND=noninteractive
 
 
 ENV \
 ENV \
     DEBUG=false \
     DEBUG=false \
     NODE_VERSION=v14.21.4 \
     NODE_VERSION=v14.21.4 \
-    METEOR_RELEASE=METEOR@2.13 \
+    METEOR_RELEASE=METEOR@2.14 \
     USE_EDGE=false \
     USE_EDGE=false \
     METEOR_EDGE=1.5-beta.17 \
     METEOR_EDGE=1.5-beta.17 \
-    NPM_VERSION=latest \
+    NPM_VERSION=6.14.17 \
     FIBERS_VERSION=4.0.1 \
     FIBERS_VERSION=4.0.1 \
     ARCHITECTURE=linux-x64 \
     ARCHITECTURE=linux-x64 \
     SRC_PATH=./ \
     SRC_PATH=./ \
@@ -28,15 +32,14 @@ ENV \
     ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
     ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
     ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
     ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
     ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=90 \
     ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=90 \
-    RICHER_CARD_COMMENT_EDITOR=false \
-    CARD_OPENED_WEBHOOK_ENABLED=false \
-    ATTACHMENTS_STORE_PATH="" \
     ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM="" \
     ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM="" \
     ATTACHMENTS_UPLOAD_MIME_TYPES="" \
     ATTACHMENTS_UPLOAD_MIME_TYPES="" \
     ATTACHMENTS_UPLOAD_MAX_SIZE=0 \
     ATTACHMENTS_UPLOAD_MAX_SIZE=0 \
     AVATARS_UPLOAD_EXTERNAL_PROGRAM="" \
     AVATARS_UPLOAD_EXTERNAL_PROGRAM="" \
     AVATARS_UPLOAD_MIME_TYPES="" \
     AVATARS_UPLOAD_MIME_TYPES="" \
     AVATARS_UPLOAD_MAX_SIZE=0 \
     AVATARS_UPLOAD_MAX_SIZE=0 \
+    RICHER_CARD_COMMENT_EDITOR=false \
+    CARD_OPENED_WEBHOOK_ENABLED=false \
     MAX_IMAGE_PIXEL="" \
     MAX_IMAGE_PIXEL="" \
     IMAGE_COMPRESS_RATIO="" \
     IMAGE_COMPRESS_RATIO="" \
     NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
     NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
@@ -48,10 +51,12 @@ ENV \
     MATOMO_SITE_ID="" \
     MATOMO_SITE_ID="" \
     MATOMO_DO_NOT_TRACK=true \
     MATOMO_DO_NOT_TRACK=true \
     MATOMO_WITH_USERNAME=false \
     MATOMO_WITH_USERNAME=false \
+    METRICS_ALLOWED_IP_ADDRESSES="" \
     BROWSER_POLICY_ENABLED=true \
     BROWSER_POLICY_ENABLED=true \
     TRUSTED_URL="" \
     TRUSTED_URL="" \
     WEBHOOKS_ATTRIBUTES="" \
     WEBHOOKS_ATTRIBUTES="" \
     OAUTH2_ENABLED=false \
     OAUTH2_ENABLED=false \
+    OIDC_REDIRECTION_ENABLED=false \
     OAUTH2_CA_CERT="" \
     OAUTH2_CA_CERT="" \
     OAUTH2_ADFS_ENABLED=false \
     OAUTH2_ADFS_ENABLED=false \
     OAUTH2_B2C_ENABLED=false \
     OAUTH2_B2C_ENABLED=false \
@@ -71,6 +76,9 @@ ENV \
     LDAP_ENABLE=false \
     LDAP_ENABLE=false \
     LDAP_PORT=389 \
     LDAP_PORT=389 \
     LDAP_HOST="" \
     LDAP_HOST="" \
+    LDAP_AD_SIMPLE_AUTH="" \
+    LDAP_USER_AUTHENTICATION=false \
+    LDAP_USER_AUTHENTICATION_FIELD=uid \
     LDAP_BASEDN="" \
     LDAP_BASEDN="" \
     LDAP_LOGIN_FALLBACK=false \
     LDAP_LOGIN_FALLBACK=false \
     LDAP_RECONNECT=true \
     LDAP_RECONNECT=true \
@@ -88,8 +96,6 @@ ENV \
     LDAP_ENCRYPTION=false \
     LDAP_ENCRYPTION=false \
     LDAP_CA_CERT="" \
     LDAP_CA_CERT="" \
     LDAP_REJECT_UNAUTHORIZED=false \
     LDAP_REJECT_UNAUTHORIZED=false \
-    LDAP_USER_AUTHENTICATION=false \
-    LDAP_USER_AUTHENTICATION_FIELD=uid \
     LDAP_USER_SEARCH_FILTER="" \
     LDAP_USER_SEARCH_FILTER="" \
     LDAP_USER_SEARCH_SCOPE="" \
     LDAP_USER_SEARCH_SCOPE="" \
     LDAP_USER_SEARCH_FIELD="" \
     LDAP_USER_SEARCH_FIELD="" \
@@ -144,69 +150,32 @@ ENV \
     SAML_IDENTIFIER_FORMAT="" \
     SAML_IDENTIFIER_FORMAT="" \
     SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
     SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
     SAML_ATTRIBUTES="" \
     SAML_ATTRIBUTES="" \
-    DEFAULT_WAIT_SPINNER="" \
+    ORACLE_OIM_ENABLED=false \
+    WAIT_SPINNER="" \
+    WRITABLE_PATH=/data \
     S3=""
     S3=""
-# \
-#    NODE_OPTIONS="--max_old_space_size=4096"
 
 
-#---------------------------------------------------------------------
-# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
-# Add more Node heap:
 #   NODE_OPTIONS="--max_old_space_size=4096"
 #   NODE_OPTIONS="--max_old_space_size=4096"
-# Add more stack:
-#   bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
-#---------------------------------------------------------------------
-
-# Install OS
-RUN set -o xtrace \
-  && useradd --user-group -m --system --home-dir /home/wekan wekan \
-  && apt-get update \
-  && apt-get install --assume-yes --no-install-recommends apt-utils apt-transport-https ca-certificates 2>&1 \
-  && apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
-
-# OLD:
-#  && curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-$ARCHITECTURE.tar.xz" \
-#  && curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/SHASUMS256.txt.asc" \
-
-# Install NodeJS
-RUN set -o xtrace \
-  && cd /tmp \
-  && curl -fsSLO --compressed "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.xz" \
-  && curl -fsSLO --compressed "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt" \
-  && grep " node-$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
-  && tar -xJf "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
-  && rm "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt \
-  && ln -s /usr/local/bin/node /usr/local/bin/nodejs \
-  && mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config \
-  && npm install -g npm@${NPM_VERSION} \
-  && chown wekan:wekan --recursive /home/wekan/.config
-
-ENV DEBIAN_FRONTEND=dialog
-
-USER wekan
 
 
-# Install Meteor
-RUN set -o xtrace \
-  && cd /home/wekan \
-  && curl https://install.meteor.com/?release=$METEOR_VERSION --output /home/wekan/install-meteor.sh \
-  # Replace tar with bsdtar in the install script; https://github.com/jshimko/meteor-launchpad/issues/39
-  && sed --in-place "s/tar -xzf.*/bsdtar -xf \"\$TARBALL_FILE\" -C \"\$INSTALL_TMPDIR\"/g" /home/wekan/install-meteor.sh \
-  && sed --in-place 's/VERBOSITY="--silent"/VERBOSITY="--progress-bar"/' /home/wekan/install-meteor.sh \
-  && printf "\n[-] Installing Meteor $METEOR_VERSION...\n\n" \
-  && sh /home/wekan/install-meteor.sh
+#---------------------------------------------
+# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
+# https://github.com/wekan/wekan/wiki/autologin
+#- OIDC_REDIRECTION_ENABLED=true
+#---------------------------------------------------------------------
 
 
 ENV PATH=$PATH:/home/wekan/.meteor/
 ENV PATH=$PATH:/home/wekan/.meteor/
 
 
-USER root
-
-RUN echo "export PATH=$PATH" >> /etc/environment
-
-USER wekan
+RUN <<EOR
+echo "export PATH=$PATH" >> /etc/environment
+EOR
 
 
 # Copy source dir
 # Copy source dir
-RUN set -o xtrace \
-  && mkdir -p /home/wekan/app/.meteor \
-  && mkdir -p /home/wekan/app/packages
+RUN <<EOR
+set -o xtrace
+
+mkdir -p /home/wekan/app/.meteor
+mkdir -p /home/wekan/app/packages
+EOR
 
 
 COPY \
 COPY \
     .meteor/.finished-upgraders \
     .meteor/.finished-upgraders \
@@ -231,44 +200,83 @@ COPY \
     packages \
     packages \
     /home/wekan/app/packages/
     /home/wekan/app/packages/
 
 
-USER root
+# Install OS
+RUN <<EOR
+set -o xtrace
 
 
-RUN set -o xtrace \
-  && chown -R wekan:wekan /home/wekan/app /home/wekan/.meteor
+# Add non-root user wekan
+useradd --user-group --system --home-dir /home/wekan wekan
+# OS dependencies
+apt-get update --assume-yes
+apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS} ${DEV_DEPS}
 
 
-USER wekan
+# Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
+# https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
+cp $(which tar) $(which tar)~
+ln -sf $(which bsdtar) $(which tar)
+
+# Install NodeJS
+cd /tmp
+
+# Download nodejs
+wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz"
+wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt"
+
+# Verify nodejs authenticity
+grep "node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz" "SHASUMS256.txt" | shasum -a 256 -c -
+rm -f "SHASUMS256.txt"
+
+# Install Node
+tar xzf "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" -C /usr/local --strip-components=1 --no-same-owner
+rm "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" "SHASUMS256.txt"
+ln -s "/usr/local/bin/node" "/usr/local/bin/nodejs"
+mkdir -p "/opt/nodejs/lib/node_modules/fibers/.node-gyp" "/root/.node-gyp/${NODE_VERSION} /home/wekan/.config"
+
+# Install node dependencies
+npm install -g npm@${NPM_VERSION}
+chown --recursive wekan:wekan /home/wekan/.config
+
+# Install Meteor
+cd /home/wekan
+chown --recursive wekan:wekan /home/wekan
+echo "Starting meteor ${METEOR_RELEASE} installation...   \n"
+gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh
+mv /root/.meteor /home/wekan/
+chown --recursive wekan:wekan /home/wekan/.meteor
+
+# sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js
+cd /home/wekan/.meteor
+gosu wekan:wekan /home/wekan/.meteor/meteor -- help
+
+# Build app (Development)
+cd /home/wekan/app
+gosu wekan:wekan /home/wekan/.meteor/meteor add standard-minifier-js
+gosu wekan:wekan /home/wekan/.meteor/meteor npm install
+
+# Put back the original tar
+mv $(which tar)~ $(which tar)
 
 
-RUN \
-    set -o xtrace && \
-    # Build app
-    cd /home/wekan/app && \
-    /home/wekan/.meteor/meteor add standard-minifier-js && \
-    /home/wekan/.meteor/meteor npm install && \
-    /home/wekan/.meteor/meteor build --directory /home/wekan/app_build
-
-RUN \
-    set -o xtrace && \
-    cd /home/wekan/app_build/bundle/programs/server/ && \
-    chmod u+w package.json npm-shrinkwrap.json && \
-    npm install && \
-    cd node_modules/fibers && \
-    node build.js
-
-USER root
 # Cleanup
 # Cleanup
-RUN \
-    set -o xtrace && \
-    apt-get clean -y && \
-    apt-get autoremove -y && \
-    rm -Rf /tmp/* && \
-    rm -Rf /home/wekan/app_build && \
-    rm -Rf /var/cache/apt /var/lib/apt/lists && \
-    rm -Rf /var/lib/apt/lists/*
+apt-get remove --purge --assume-yes ${BUILD_DEPS}
+apt-get install --assume-yes --no-install-recommends build-essential
+apt-get autoremove --assume-yes
+apt-get clean --assume-yes
+rm -Rf /tmp/*
+rm -Rf /var/lib/apt/lists/*
+rm -Rf /var/cache/apt
+rm -Rf /var/lib/apt/lists
+rm -Rf /home/wekan/app_build
+
+mkdir /data
+chown wekan --recursive /data
+EOR
 
 
 USER wekan
 USER wekan
 
 
 ENV PORT=3000
 ENV PORT=3000
 EXPOSE $PORT
 EXPOSE $PORT
+
+STOPSIGNAL SIGKILL
 WORKDIR /home/wekan/app
 WORKDIR /home/wekan/app
 
 
 #---------------------------------------------------------------------
 #---------------------------------------------------------------------
@@ -278,7 +286,6 @@ WORKDIR /home/wekan/app
 # Add more stack:
 # Add more stack:
 #   bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
 #   bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
 #---------------------------------------------------------------------
 #---------------------------------------------------------------------
-#TODO:
-#CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
+#
 
 
 CMD ["/home/wekan/.meteor/meteor", "run", "--verbose", "--settings", "settings.json"]
 CMD ["/home/wekan/.meteor/meteor", "run", "--verbose", "--settings", "settings.json"]

+ 28 - 10
.github/ISSUE_TEMPLATE.md

@@ -1,18 +1,24 @@
 ## Issue
 ## Issue
-<!--
-Please report these elsewhere:
+
+Please report these issues elsewhere:
+
 - SECURITY ISSUES, PGP EMAIL: https://github.com/wekan/wekan/blob/main/SECURITY.md
 - SECURITY ISSUES, PGP EMAIL: https://github.com/wekan/wekan/blob/main/SECURITY.md
 - UCS: https://github.com/wekan/univention/issues
 - UCS: https://github.com/wekan/univention/issues
 
 
-**[PLEASE UPGRADE](https://github.com/wekan/wekan/wiki/Backup)** to the newest WeKan ® before reporting an issue.
+**[PLEASE UPGRADE](https://github.com/wekan/wekan/wiki/Backup)** to the newest
+WeKan ® before reporting an issue, if possible.
+
 Please search existing Open and Closed issues, most questions have already been answered.
 Please search existing Open and Closed issues, most questions have already been answered.
 
 
 If you can not login for any reason: https://github.com/wekan/wekan/wiki/Forgot-Password
 If you can not login for any reason: https://github.com/wekan/wekan/wiki/Forgot-Password
-Email settings, only SMTP MAIL_URL and MAIL_FROM are in use: https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
--->
+Email settings, only SMTP MAIL_URL and MAIL_FROM are in use:
+https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
 
 
 ### Server Setup Information
 ### Server Setup Information
-<!-- Please anonymize info, and do not any of your Wekan board URLs, passwords, API tokens etc to this public issue. -->
+
+Please anonymize info, and do not any of your Wekan board URLs, passwords,
+API tokens etc to this public issue.
+
 * Did you test in newest Wekan?:
 * Did you test in newest Wekan?:
 * Did you configure root-url correctly so Wekan cards open correctly (see https://github.com/wekan/wekan/wiki/Settings)?
 * Did you configure root-url correctly so Wekan cards open correctly (see https://github.com/wekan/wekan/wiki/Settings)?
 * Operating System:
 * Operating System:
@@ -23,13 +29,25 @@ Email settings, only SMTP MAIL_URL and MAIL_FROM are in use: https://github.com/
 * What webbrowser version are you using (Wekan should work on all modern browsers that support Javascript)?
 * What webbrowser version are you using (Wekan should work on all modern browsers that support Javascript)?
 
 
 ### Problem description
 ### Problem description
-<!-- Add a recorded animated gif (e.g. with https://github.com/phw/peek) about how it works currently, and screenshot mockups how it should work. -->
+
+Add a recorded animated gif (e.g. with https://github.com/phw/peek) about
+how it works currently, and screenshot mockups how it should work.
+
+
 #### Reproduction Steps
 #### Reproduction Steps
 
 
+
+
 #### Logs
 #### Logs
-<!-- Check Right Click>Inspect>Console in you browser - generally Chrome shows more detailed info than Firefox. -->
 
 
-<!-- Please anonymize logs.
+Check Right Click / Inspect / Console in you browser - generally Chromium
+based browsers show more detailed info than Firefox based browsers.
+
+Please anonymize logs.
+
 Snap: sudo snap logs wekan.wekan
 Snap: sudo snap logs wekan.wekan
+
 Docker: sudo docker logs wekan-app
 Docker: sudo docker logs wekan-app
-If logs are very long, attach them in .zip file -->
+
+If logs are very long, attach them in .zip file
+

+ 2 - 2
.github/workflows/docker-publish.yml

@@ -38,7 +38,7 @@ jobs:
       # https://github.com/docker/login-action
       # https://github.com/docker/login-action
       - name: Log into registry ${{ env.REGISTRY }}
       - name: Log into registry ${{ env.REGISTRY }}
         if: github.event_name != 'pull_request'
         if: github.event_name != 'pull_request'
-        uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20
+        uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446
         with:
         with:
           registry: ${{ env.REGISTRY }}
           registry: ${{ env.REGISTRY }}
           username: ${{ github.actor }}
           username: ${{ github.actor }}
@@ -55,7 +55,7 @@ jobs:
       # Build and push Docker image with Buildx (don't push on PR)
       # Build and push Docker image with Buildx (don't push on PR)
       # https://github.com/docker/build-push-action
       # https://github.com/docker/build-push-action
       - name: Build and push Docker image
       - name: Build and push Docker image
-        uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0
+        uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25
         with:
         with:
           context: .
           context: .
           push: ${{ github.event_name != 'pull_request' }}
           push: ${{ github.event_name != 'pull_request' }}

+ 105 - 0
CHANGELOG.md

@@ -15,6 +15,111 @@ Fixing other platforms In Progress.
 
 
 [How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
 [How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
 
 
+# Upcoming WeKan ® release
+
+This release adds the following updates:
+
+- [Updated docs for WeKan version for Windows](https://github.com/wekan/wekan/commit/9b428150a4fb9efdcb2ae9d3bb59d0da29529e69).
+  Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v7.49 2024-06-11 WeKan ® release
+
+This release adds the following updates:
+
+- [WeKan new release version number from wiki to WeKan repo docs](https://github.com/wekan/wekan/commit/e5c7650fc8eb5c3fcc6216f12e806ceb56fd94d9).
+  Thanks to xet7.
+- Updated dependencies.
+  [Part 1](https://github.com/wekan/wekan/pull/5430),
+  [Part 2](https://github.com/wekan/wekan/pull/5441).
+  Thanks to dependabot.
+
+and fixes the following bugs:
+
+- [Bugfix: Strikethrough inactive Teams and orginizations logic was inverted](https://github.com/wekan/wekan/pull/5435).
+  Thanks to Hekatomb.
+- [Changed back to original icon of Edit Description](https://github.com/wekan/wekan/commit/e3214c874ec9369ab6b865154f7964da8ec55f45).
+  Thanks to saschafoerster, C0rn3j and xet7.
+- [Fill out Org and Team in adminReports](https://github.com/wekan/wekan/pull/5440).
+  Thanks to Hekatomb.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v7.48 2024-06-06 WeKan ® release
+
+This release adds the following updates:
+
+- [Updated release scripts](https://github.com/wekan/wekan/commit/4a9d881e47751ec49d24af5bf4fd1c5452ceb194).
+  Thanks to xet7.
+- Add changes from wiki to docs.
+  [Part 1](https://github.com/wekan/wekan/commit/13be8160d5b6a894c674d04c37ff9e653e7bd4b0),
+  [Part 2](https://github.com/wekan/wekan/commit/e65a8c90177cd948ca8212486a365b65cd7d5372).
+  Thanks to xet7.
+
+and fixes the following bugs:
+
+- [Fix Admin Panel pages Organizations and Teams, where HTML Tables were broken](https://github.com/wekan/wekan/commit/36bb5e099ed9f1f88c0399867bd76f040467745c).
+  Thanks to Hekatomb and xet7.
+- [Try to show more of title of collapsed list](https://github.com/wekan/wekan/commit/ec0e88ad2e914437b4767456a160f2c1138fc5f2).
+  Thanks to C0rn3j and xet7.
+- [Allow Normal user to add new swimlane, list and label](https://github.com/wekan/wekan/commit/04b995e77fdb5abc186e02482a75aba6a5cf0759).
+  Thanks to RyanHecht, norrig and xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v7.47 2024-06-03 WeKan ® release
+
+This release adds the following updates:
+
+- [Update Docker base images to Ubuntu 24.04](https://github.com/wekan/wekan/commit/79e2001708b5110b26cf54b15bbbf90f7977fe90).
+  Thanks to xet7.
+- [Updated to MongoDB 6.0.15 at Snap Candidate](https://github.com/wekan/wekan/commit/4e2a8735bc2e449a2a3c949d042fb625052a1152).
+  Thanks to MongoDB developers.
+- [Updated release scripts](https://github.com/wekan/wekan/commit/2c9c9c43561093801004f0268d58b29d9a10b570).
+  Thanks to xet7.
+
+and fixes the following bugs:
+
+- [Only show Board name edit button to BoardAdmin](https://github.com/wekan/wekan/commit/5e2b423ef87c62a70a6b08abd2f185fd560f391f).
+  Thanks to xet7.
+- [Fix Edit Description button is wildly out of place](https://github.com/wekan/wekan/commit/1f2fb2ccce38e9cac348f1c459784d6e5a949ded).
+  Thanks to C0rn3j and xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v7.46 2024-06-03 WeKan ® release
+
+This release adds the following updates:
+
+- [Update ukrainian translation](https://github.com/wekan/wekan/pull/5405).
+  Thanks to novashdima.
+- [Updated GitHub issue template for issue instructions to be more visible](https://github.com/wekan/wekan/commit/5124265142c94d5044b81f81eaaa9c3bc01cef58).
+  Thanks to xet7.
+- [For development, only recommend Debian 12 amd64, because Sandstorm works at Debian 12. Sandstorm does not work at Ubuntu 24.04](https://github.com/wekan/wekan/commit/1bd30bc12129be8cc8a633a561bb8a5be76823d7).
+  Thanks to xet7. Related https://github.com/sandstorm-io/sandstorm/issues/3712
+
+and fixes the following bugs:
+
+- [Optimize SVGs and PNGs to save 550KB](https://github.com/wekan/wekan/pull/5403).
+  Thanks to C0rn3j.
+- [Swap deprecated egrep for grep -E](https://github.com/wekan/wekan/pull/5404).
+  Thanks to C0rn3j.
+- [Remove notification while copying board](https://github.com/wekan/wekan/pull/5412).
+  Thanks to e-gaulue.
+- [Fixed loading of cards if there are more than 20 of them on one swimlane](https://github.com/wekan/wekan/pull/5417).
+  Thanks to novashdima.
+- [Devcontainer, reduce image size and other necessary changes for development](https://github.com/wekan/wekan/pull/5418).
+  Thanks to mfilser.
+- [Dockerfile production and dev same build](https://github.com/wekan/wekan/pull/5419).
+  Thanks to mfilser.
+- [Remove second created at on activities](https://github.com/wekan/wekan/pull/5420).
+  Thanks to mfilser.
+- [Fix Export CSV/TSV from Board create unhandled Exception](https://github.com/wekan/wekan/pull/5424).
+  Thanks to Dexus.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
 # v7.45 2024-05-06 WeKan ® release
 # v7.45 2024-05-06 WeKan ® release
 
 
 This release adds the following updates:
 This release adds the following updates:

+ 50 - 58
Dockerfile

@@ -1,13 +1,8 @@
-FROM --platform=linux/amd64 ubuntu:24.04 as wekan
-LABEL maintainer="wekan" \
-      org.opencontainers.image.ref.name="ubuntu" \
-      org.opencontainers.image.version="24.04" \
-      org.opencontainers.image.source="https://github.com/wekan/wekan"
-
-# 2022-09-04:
-# - above "--platform=linux/amd64 ubuntu:22.04 as wekan" is needed to build Dockerfile
-#   correctly on Mac M1 etc, to not get this error:
-#   https://stackoverflow.com/questions/71040681/qemu-x86-64-could-not-open-lib64-ld-linux-x86-64-so-2-no-such-file-or-direc
+FROM ubuntu:24.04
+LABEL maintainer="wekan"
+LABEL org.opencontainers.image.ref.name="ubuntu"
+LABEL org.opencontainers.image.version="24.04"
+LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
 
 
 # 2022-04-25:
 # 2022-04-25:
 # - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
 # - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
@@ -16,13 +11,11 @@ LABEL maintainer="wekan" \
 # 2021-09-18:
 # 2021-09-18:
 # - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825
 # - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825
 #   to Quay to avoid Docker Hub rate limits.
 #   to Quay to avoid Docker Hub rate limits.
-
-# Set the environment variables (defaults where required)
-# DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
-# ENV BUILD_DEPS="paxctl"
 ARG DEBIAN_FRONTEND=noninteractive
 ARG DEBIAN_FRONTEND=noninteractive
 
 
-ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
+ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3"
+
+ENV \
     DEBUG=false \
     DEBUG=false \
     NODE_VERSION=v14.21.4 \
     NODE_VERSION=v14.21.4 \
     METEOR_RELEASE=METEOR@2.14 \
     METEOR_RELEASE=METEOR@2.14 \
@@ -165,7 +158,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
     WRITABLE_PATH=/data \
     WRITABLE_PATH=/data \
     S3=""
     S3=""
 
 
-#   NODE_OPTIONS="--max_old_space_size=4096" \
+#   NODE_OPTIONS="--max_old_space_size=4096"
 
 
 #---------------------------------------------
 #---------------------------------------------
 # == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
 # == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
@@ -176,61 +169,58 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
 # Copy the app to the image
 # Copy the app to the image
 COPY ${SRC_PATH} /home/wekan/app
 COPY ${SRC_PATH} /home/wekan/app
 
 
+# Install OS
 RUN <<EOR
 RUN <<EOR
 set -o xtrace
 set -o xtrace
+
 # Add non-root user wekan
 # Add non-root user wekan
 useradd --user-group --system --home-dir /home/wekan wekan
 useradd --user-group --system --home-dir /home/wekan wekan
 # OS dependencies
 # OS dependencies
-apt-get update -y
-apt-get install -y --no-install-recommends ${BUILD_DEPS}
+apt-get update --assume-yes
+apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
+
 # Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
 # Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
 # https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
 # https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
 cp $(which tar) $(which tar)~
 cp $(which tar) $(which tar)~
 ln -sf $(which bsdtar) $(which tar)
 ln -sf $(which bsdtar) $(which tar)
+
+# Install NodeJS
+cd /tmp
+
 # Download nodejs
 # Download nodejs
-wget https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz
-wget https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt
-#wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz
-#wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc
-#---------------------------------------------------------------------------------------------
+wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz"
+wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt"
 
 
 # Verify nodejs authenticity
 # Verify nodejs authenticity
-grep node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt | shasum -a 256 -c -
-rm -f SHASUMS256.txt
-#grep ${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | shasum -a 256 -c -
-#rm -f SHASUMS256.txt.asc
+grep "node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz" "SHASUMS256.txt" | shasum -a 256 -c -
+rm -f "SHASUMS256.txt"
 
 
 # Install Node
 # Install Node
-tar xvzf node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz
-rm node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz
-mv node-${NODE_VERSION}-${ARCHITECTURE} /opt/nodejs
-ln -s /opt/nodejs/bin/node /usr/bin/node
-ln -s /opt/nodejs/bin/npm /usr/bin/npm
-mkdir -p /opt/nodejs/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config
-chown wekan --recursive /home/wekan/.config
-
-#DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
-#paxctl -mC `which node`
+tar xzf "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" -C /usr/local --strip-components=1 --no-same-owner
+rm "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" "SHASUMS256.txt"
+ln -s "/usr/local/bin/node" "/usr/local/bin/nodejs"
+mkdir -p "/opt/nodejs/lib/node_modules/fibers/.node-gyp" "/root/.node-gyp/${NODE_VERSION} /home/wekan/.config"
 
 
-# Install Node dependencies. Python path for node-gyp.
+# Install node dependencies
 npm install -g npm@${NPM_VERSION}
 npm install -g npm@${NPM_VERSION}
+chown --recursive wekan:wekan /home/wekan/.config
 
 
-# Change user to wekan and install meteor
-cd /home/wekan/
-chown wekan --recursive /home/wekan
+# Install Meteor
+cd /home/wekan
+chown --recursive wekan:wekan /home/wekan
 echo "Starting meteor ${METEOR_RELEASE} installation...   \n"
 echo "Starting meteor ${METEOR_RELEASE} installation...   \n"
 gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh
 gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh
 mv /root/.meteor /home/wekan/
 mv /root/.meteor /home/wekan/
-chown wekan --recursive /home/wekan/.meteor
+chown --recursive wekan:wekan /home/wekan/.meteor
 
 
 sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js
 sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js
 cd /home/wekan/.meteor
 cd /home/wekan/.meteor
-gosu wekan:wekan /home/wekan/.meteor/meteor -- help;
+gosu wekan:wekan /home/wekan/.meteor/meteor -- help
 
 
-# Build app
+# Build app (Production)
 cd /home/wekan/app
 cd /home/wekan/app
 mkdir -p /home/wekan/.npm
 mkdir -p /home/wekan/.npm
-chown wekan --recursive /home/wekan/.npm /home/wekan/.config /home/wekan/.meteor
+chown --recursive wekan:wekan /home/wekan/.npm
 chmod u+w *.json
 chmod u+w *.json
 gosu wekan:wekan meteor npm install
 gosu wekan:wekan meteor npm install
 gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build
 gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build
@@ -248,26 +238,29 @@ mv /home/wekan/app_build/bundle /build
 mv $(which tar)~ $(which tar)
 mv $(which tar)~ $(which tar)
 
 
 # Cleanup
 # Cleanup
-apt-get remove --purge -y ${BUILD_DEPS}
-apt-get autoremove -y
+apt-get remove --purge --assume-yes ${BUILD_DEPS}
 npm uninstall -g api2html
 npm uninstall -g api2html
-rm -R /tmp/*
-rm -R /var/lib/apt/lists/*
-rm -R /home/wekan/.meteor
-rm -R /home/wekan/app
-rm -R /home/wekan/app_build
+apt-get autoremove --assume-yes
+apt-get clean --assume-yes
+rm -Rf /tmp/*
+rm -Rf /var/lib/apt/lists/*
+rm -Rf /var/cache/apt
+rm -Rf /var/lib/apt/lists
+rm -Rf /home/wekan/app_build
+rm -Rf /home/wekan/app
+rm -Rf /home/wekan/.meteor
+
 mkdir /data
 mkdir /data
 chown wekan --recursive /data
 chown wekan --recursive /data
-#cat /home/wekan/python/esprima-python/files.txt | xargs rm -R
-#rm -R /home/wekan/python
-#rm /home/wekan/install_meteor.sh
 EOR
 EOR
 
 
+USER wekan
+
 ENV PORT=8080
 ENV PORT=8080
 EXPOSE $PORT
 EXPOSE $PORT
-USER wekan
 
 
 STOPSIGNAL SIGKILL
 STOPSIGNAL SIGKILL
+WORKDIR /home/wekan/app
 
 
 #---------------------------------------------------------------------
 #---------------------------------------------------------------------
 # https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
 # https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
@@ -278,6 +271,5 @@ STOPSIGNAL SIGKILL
 #---------------------------------------------------------------------
 #---------------------------------------------------------------------
 #
 #
 # CMD ["node", "/build/main.js"]
 # CMD ["node", "/build/main.js"]
-
-#CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
+# CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
 CMD ["bash", "-c", "ulimit -s 65500; exec node /build/main.js"]
 CMD ["bash", "-c", "ulimit -s 65500; exec node /build/main.js"]

+ 1 - 1
Stackerfile.yml

@@ -1,5 +1,5 @@
 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v7.45.0"
+appVersion: "v7.49.0"
 files:
 files:
   userUploads:
   userUploads:
     - README.md
     - README.md

+ 0 - 2
client/components/activities/activities.jade

@@ -242,5 +242,3 @@ template(name="activity")
         = ' @'
         = ' @'
       else if(currentData.timeValue)
       else if(currentData.timeValue)
         | {{_ activity.activityType currentData.timeValue}}
         | {{_ activity.activityType currentData.timeValue}}
-
-      span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}

+ 3 - 2
client/components/boards/boardHeader.jade

@@ -12,8 +12,9 @@ template(name="boardHeaderBar")
       if currentBoard
       if currentBoard
         if currentUser
         if currentUser
           with currentBoard
           with currentBoard
-            a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
-              i.fa.fa-pencil-square-o
+            if currentUser.isBoardAdmin
+              a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
+                i.fa.fa-pencil-square-o
 
 
           a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
           a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
             title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
             title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")

+ 1 - 1
client/components/cards/cardDetails.css

@@ -272,7 +272,7 @@
     box-sizing: border-box;
     box-sizing: border-box;
     top: 97px;
     top: 97px;
     left: 0px;
     left: 0px;
-    height: calc(100% - 20px);
+    height: calc(100% - 100px);
     width: calc(100% - 20px);
     width: calc(100% - 20px);
     float: left;
     float: left;
   }
   }

+ 1 - 1
client/components/cards/cardDetails.jade

@@ -525,7 +525,7 @@ template(name="cardDetails")
                 a.fa.fa-times-thin.js-close-inlined-form
                 a.fa.fa-times-thin.js-close-inlined-form
             else
             else
               if currentBoard.allowsDescriptionText
               if currentBoard.allowsDescriptionText
-                a.js-open-inlined-form.right(title="{{_ 'edit'}}" value=title)
+                a.js-open-inlined-form(title="{{_ 'edit'}}" value=title)
                   i.fa.fa-pencil-square-o
                   i.fa.fa-pencil-square-o
                 if getDescription
                 if getDescription
                   +viewer
                   +viewer

+ 1 - 2
client/components/cards/labels.jade

@@ -37,5 +37,4 @@ template(name="cardLabelsPopup")
               = name
               = name
             if(isLabelSelected ../_id)
             if(isLabelSelected ../_id)
               i.card-label-selectable-icon.fa.fa-check
               i.card-label-selectable-icon.fa.fa-check
-  if currentUser.isBoardAdmin
-    a.quiet-button.full.js-add-label {{_ 'label-create'}}
+  a.quiet-button.full.js-add-label {{_ 'label-create'}}

+ 6 - 2
client/components/lists/list.css

@@ -84,13 +84,17 @@
 }
 }
 .list-rotated {
 .list-rotated {
   width: 10px;
   width: 10px;
-  margin-top: 10px;
-  margin-left: 0;
+  height: 250px;
+  margin-top: -90px;
+  margin-left: -110px;
   margin-right: 0;
   margin-right: 0;
   transform: rotate(90deg);
   transform: rotate(90deg);
   position: relative;
   position: relative;
   text-overflow: ellipsis;
   text-overflow: ellipsis;
   white-space: nowrap;
   white-space: nowrap;
+}
+.list-header .list-rotated {
+
 }
 }
 .list-header .list-header-watch-icon {
 .list-header .list-header-watch-icon {
   padding-left: 10px;
   padding-left: 10px;

+ 2 - 1
client/components/settings/adminReports.jade

@@ -138,7 +138,6 @@ template(name="boardsReport")
           th Members
           th Members
           th Organizations
           th Organizations
           th Teams
           th Teams
-
       each board in results
       each board in results
         tbody
         tbody
           tr
           tr
@@ -148,5 +147,7 @@ template(name="boardsReport")
             td
             td
               = yesOrNo(board.archived)
               = yesOrNo(board.archived)
             td {{userNames board.members }}
             td {{userNames board.members }}
+            td {{orgs board.orgs }}
+            td {{teams board.teams }}
   else
   else
     div {{_ 'no-results' }}
     div {{_ 'no-results' }}

+ 19 - 0
client/components/settings/adminReports.js

@@ -170,8 +170,27 @@ class AdminReport extends BlazeComponent {
       .join(", ");
       .join(", ");
     return ret;
     return ret;
   }
   }
+  teams(memberTeams) {
+    const ret = (memberTeams || [])
+      .map(_memberTeam => {
+        const _ret = ReactiveCache.getTeam(_memberTeam.teamId)?.teamDisplayName || _memberTeam.teamId;
+        return _ret;
+      })
+      .join(", ");
+    return ret;
+  }
+  orgs(orgs) {
+    const ret = (orgs || [])
+      .map(_orgs => {
+        const _ret = ReactiveCache.getOrg(_orgs.orgId)?.orgDisplayName || _orgs.orgId;
+        return _ret;
+      })
+      .join(", ");
+    return ret;
+  }
 }.register('boardsReport'));
 }.register('boardsReport'));
 
 
+
 (class extends AdminReport {
 (class extends AdminReport {
   collection = Cards;
   collection = Cards;
 
 

+ 4 - 4
client/components/settings/peopleBody.jade

@@ -86,8 +86,8 @@ template(name="orgGeneral")
           +newOrgRow
           +newOrgRow
     tbody
     tbody
       tr
       tr
-        each org in orgList
-          +orgRow(orgId=org._id)
+      each org in orgList
+        +orgRow(orgId=org._id)
 
 
 template(name="teamGeneral")
 template(name="teamGeneral")
   table
   table
@@ -103,8 +103,8 @@ template(name="teamGeneral")
           +newTeamRow
           +newTeamRow
     tbody
     tbody
       tr
       tr
-        each team in teamList
-          +teamRow(teamId=team._id)
+      each team in teamList
+        +teamRow(teamId=team._id)
 
 
 template(name="peopleGeneral")
 template(name="peopleGeneral")
   #divAddOrRemoveTeamContainer
   #divAddOrRemoveTeamContainer

+ 1 - 2
client/components/swimlanes/swimlaneHeader.jade

@@ -24,8 +24,7 @@ template(name="swimlaneFixedHeader")
           | {{isTitleDefault title}}
           | {{isTitleDefault title}}
   .swimlane-header-menu
   .swimlane-header-menu
     unless currentUser.isCommentOnly
     unless currentUser.isCommentOnly
-      if currentUser.isBoardAdmin
-        a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}")
+      a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}")
       a.fa.fa-navicon.js-open-swimlane-menu(title="{{_ 'swimlaneActionPopup-title'}}")
       a.fa.fa-navicon.js-open-swimlane-menu(title="{{_ 'swimlaneActionPopup-title'}}")
       //// TODO: Collapse Swimlane: make button working, etc.
       //// TODO: Collapse Swimlane: make button working, etc.
       //unless collapsed
       //unless collapsed

+ 2 - 1
client/components/swimlanes/swimlanes.css

@@ -11,7 +11,8 @@
   background: #dedede;
   background: #dedede;
   display: flex;
   display: flex;
   flex-direction: row;
   flex-direction: row;
-  overflow: 0;
+  overflow: auto;
+  max-height: 100%;
 }
 }
 .swimlane-header-menu .swimlane-header-collapse-down {
 .swimlane-header-menu .swimlane-header-collapse-down {
   font-size: 50%;
   font-size: 50%;

+ 2 - 2
client/components/swimlanes/swimlanes.jade

@@ -46,8 +46,8 @@ template(name="listsGroup")
 
 
 template(name="addListForm")
 template(name="addListForm")
   unless currentUser.isWorker
   unless currentUser.isWorker
-    .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}")
-      if currentUser.isBoardAdmin
+    unless currentUser.isCommentOnly
+      .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}")
         .list-header-add
         .list-header-add
           +inlinedForm(autoclose=false)
           +inlinedForm(autoclose=false)
             input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"
             input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"

+ 4 - 4
client/components/users/userAvatar.jade

@@ -26,9 +26,9 @@ template(name="orgAvatar")
 template(name="boardOrgRow")
 template(name="boardOrgRow")
   tr
   tr
     if orgData.orgIsActive
     if orgData.orgIsActive
-      td <s>{{ orgData.orgDisplayName }}</s>
-    else
       td {{ orgData.orgDisplayName }}
       td {{ orgData.orgDisplayName }}
+    else
+      td <s>{{ orgData.orgDisplayName }}</s>
     td
     td
       if currentUser.isBoardAdmin
       if currentUser.isBoardAdmin
         a.member.orgOrTeamMember.add-member.js-manage-board-removeOrg(title="{{_ 'remove-from-board'}}")
         a.member.orgOrTeamMember.add-member.js-manage-board-removeOrg(title="{{_ 'remove-from-board'}}")
@@ -39,9 +39,9 @@ template(name="boardOrgRow")
 template(name="boardTeamRow")
 template(name="boardTeamRow")
   tr
   tr
     if teamData.teamIsActive
     if teamData.teamIsActive
-      td <s>{{ teamData.teamDisplayName }}</s>
-    else
       td {{ teamData.teamDisplayName }}
       td {{ teamData.teamDisplayName }}
+    else
+      td <s>{{ teamData.teamDisplayName }}</s>
     td
     td
       if currentUser.isBoardAdmin
       if currentUser.isBoardAdmin
         a.member.orgOrTeamMember.add-member.js-manage-board-removeTeam(title="{{_ 'remove-from-board'}}")
         a.member.orgOrTeamMember.add-member.js-manage-board-removeTeam(title="{{_ 'remove-from-board'}}")

+ 3 - 0
docs/wekan.wiki/AsyncAwait.md

@@ -0,0 +1,3 @@
+- https://www.sitepoint.com/javascript-async-await/
+- https://www.freecodecamp.org/news/javascript-async-await-tutorial-learn-callbacks-promises-async-await-by-making-icecream/
+- https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous

+ 3 - 1
docs/wekan.wiki/Azure.md

@@ -4,10 +4,12 @@
 
 
 *Make sure you are running at least **v2.21***
 *Make sure you are running at least **v2.21***
 
 
-### Snap install info, tested 2021-07-16
+### Redirect URL
 
 
 [About AZURE-NEW-APP-CLIENT-ID and AZURE-NEW-APP-SECRET](https://community.microfocus.com/t5/Identity-Manager-Tips/Creating-the-application-Client-ID-and-Client-Secret-from/ta-p/1776619). The redirect URL is your Wekan root-url+_oauth/oidc like this: https://boards.example.com/_oauth/oidc
 [About AZURE-NEW-APP-CLIENT-ID and AZURE-NEW-APP-SECRET](https://community.microfocus.com/t5/Identity-Manager-Tips/Creating-the-application-Client-ID-and-Client-Secret-from/ta-p/1776619). The redirect URL is your Wekan root-url+_oauth/oidc like this: https://boards.example.com/_oauth/oidc
 
 
+<img src="https://wekan.github.io/azure-redirect.png" width="100%" alt="Wekan logo" />
+
 AZURE_DIRECTORY_ID = TENANT-NAME-FOR-YOUR-ORGANIZATION
 AZURE_DIRECTORY_ID = TENANT-NAME-FOR-YOUR-ORGANIZATION
 
 
 ### If Azure Active Directory login does not work
 ### If Azure Active Directory login does not work

+ 7 - 0
docs/wekan.wiki/Backup.md

@@ -35,6 +35,13 @@ docker exec wekan-db mongorestore --drop --dir=/data/dump
 docker start wekan-app
 docker start wekan-app
 ```
 ```
 # Upgrade Docker Wekan version
 # Upgrade Docker Wekan version
+
+## Newest info
+
+https://github.com/wekan/wekan/discussions/5367
+
+## Old info
+
 Note: Do not run `docker-compose down` without verifying your docker-compose file, it does not delete the data by default but caution is advised. Refer to https://docs.docker.com/compose/reference/down/.
 Note: Do not run `docker-compose down` without verifying your docker-compose file, it does not delete the data by default but caution is advised. Refer to https://docs.docker.com/compose/reference/down/.
 ```bash
 ```bash
 docker-compose stop
 docker-compose stop

+ 32 - 0
docs/wekan.wiki/Change-Language.md

@@ -0,0 +1,32 @@
+## Change language for all users
+
+Using MongoDB Shell with WeKan Snap Candidate, to change English date format to `DD/MM/YY`.
+
+MongoDB Shell Download: https://www.mongodb.com/try/download/shell
+
+language.sh:
+```
+mongosh --quiet \
+--host 127.0.0.1 \
+--port 27019 \
+--eval 'use wekan' \
+--eval 'db.users.updateMany({}, { $set: {"profile.language": "en-GB" }});'
+```
+Set script as executeable:
+```
+chmod +x language.sh
+```
+Running script, when 5 new users of total 20 users did not have language set correctly yet:
+```
+$ ./language.sh 
+{
+  acknowledged: true,
+  insertedId: null,
+  matchedCount: 20,
+  modifiedCount: 5,
+  upsertedCount: 0
+}
+```
+## Language browser settings
+
+https://github.com/wekan/wekan/issues/4518#issuecomment-1133763518

+ 28 - 0
docs/wekan.wiki/FAQ.md

@@ -60,6 +60,34 @@ It's a very specific niche, with limited amount competitors, with all of this ap
 
 
 [Wekan Team](https://wekan.team) is Wekan Commercial Support company run by CEO [xet7](https://github.com/xet7), current maintainer of Wekan. xet7 does respond to feedback at GitHub issues very actively, because Wekan is community driven Open Source project. Because conflicting opinions can not be implemented, sometimes xet7 has to behave like a benevolent dictator. Every Wekan team member is free to choose what to contribute and when. We can not force anybody to implement anything. Wekan development speed increases when new Wekan contributors join and start to send PRs to existing and new issues.
 [Wekan Team](https://wekan.team) is Wekan Commercial Support company run by CEO [xet7](https://github.com/xet7), current maintainer of Wekan. xet7 does respond to feedback at GitHub issues very actively, because Wekan is community driven Open Source project. Because conflicting opinions can not be implemented, sometimes xet7 has to behave like a benevolent dictator. Every Wekan team member is free to choose what to contribute and when. We can not force anybody to implement anything. Wekan development speed increases when new Wekan contributors join and start to send PRs to existing and new issues.
 
 
+## What is Bio of xet7 ?
+
+[Lauri Ojansivu](https://github.com/xet7) is CEO at [WeKan Team](https://wekan.team),
+Cross-Platform FOSS maintainer,
+Cloud Architect, Full-Stack Developer, SysAdmin and SysOp.
+He has experience of [having added and removed over 4 million lines of code](https://github.com/wekan/wekan/blob/main/releases/count-lines-of-code-per-committer.sh) to
+[Meteor Full-Stack Web Framework](https://www.meteor.com)
+based [WeKan Open Source kanban](https://wekan.github.io),
+that has been [translated to 70+ languages](https://explore.transifex.com/wekan/wekan/),
+and is currently used at [most countries of the world](https://snapcraft.io/wekan).
+At 2024-06-04, he is currently [4h most active GitHub committer at Finland](https://committers.top/finland).
+
+He holds a BBA as computer designer and system engineer
+at Kemi-Tornio AMK, Finland.
+He is credited as having built quality control system
+with comparisons of groups and fitness test calculations,
+company infra, migration from On-Premises to Cloud,
+SLA support, IT support, [games](https://github.com/xet7/notegame), database apps, websites,
+[winner of 2th place at EU NGI ONTOCHAIN Hackathon](https://wekan.github.io/donated/ontochain-certificate.png),
+[winner of 20i FOSS Awards](https://wekan.github.io/donated/foss-awards-2022/20i_FOSS_Awards_Winners_Announced_(Press_Release).pdf), and [porting to 30+ CPU/OS](https://github.com/xet7/darkesthour).
+
+At MeteorJS Dispatches Video Podcast, he has been
+interviewed [about WeKan](https://www.youtube.com/watch?v=ke-mbnZM3zE&t=1342s),
+[Meteor Security](https://www.youtube.com/watch?v=zic-h8jG6F8), and other topics.
+He teaches using computers at local nerd club.
+At his free time, he is porting FOSS software to many CPU/OS,
+and [translating them from English to Finnish](https://xet7.org).
+
 ## How to convince my company management that Wekan "is less evil" than Trello?
 ## How to convince my company management that Wekan "is less evil" than Trello?
 
 
 Yes, xet7 received this question in Email.
 Yes, xet7 received this question in Email.

+ 6 - 3
docs/wekan.wiki/Install-Wekan-from-source-on-Windows.md

@@ -1,14 +1,17 @@
-Also see: [Excel and VBA](Excel-and-VBA)
+# Newest Windows info here
+
+https://github.com/wekan/wekan/wiki/Offline
 
 
+## OLD INFO BELOW, DOES NOT WORK
+
+Also see: [Excel and VBA](Excel-and-VBA)
 
 
-# THIS WORKS
 a) Lowest resource usage: [Windows Subsystem for Linux, build from source](https://github.com/wekan/wekan/issues/2066#issuecomment-468328001)
 a) Lowest resource usage: [Windows Subsystem for Linux, build from source](https://github.com/wekan/wekan/issues/2066#issuecomment-468328001)
 
 
 b) Docker for Windows, [prebuilt without --build option, or build from source](https://github.com/wekan/wekan-dev/issues/12#issuecomment-468657290)
 b) Docker for Windows, [prebuilt without --build option, or build from source](https://github.com/wekan/wekan-dev/issues/12#issuecomment-468657290)
 
 
 ***
 ***
 
 
-# OLD INFO BELOW, DOES NOT WORK
 
 
 ### Source install required dependencies
 ### Source install required dependencies
 
 

+ 2 - 0
docs/wekan.wiki/OAuth2.md

@@ -1,3 +1,4 @@
+- [More RocketChat fixes here](https://github.com/wekan/wekan/wiki/RocketChat)
 - [OAuth2 small bug](https://github.com/wekan/wekan/issues/1874) - currently OAuth2 works mostly
 - [OAuth2 small bug](https://github.com/wekan/wekan/issues/1874) - currently OAuth2 works mostly
 
 
 # OAuth2 providers
 # OAuth2 providers
@@ -41,6 +42,7 @@ The redirect URL is described in the wekan wiki: https://wekan.example.com/_oaut
 
 
 ## Rocket.Chat providing OAuth2 login to Wekan
 ## Rocket.Chat providing OAuth2 login to Wekan
 
 
+- [More RocketChat fixes here](https://github.com/wekan/wekan/wiki/RocketChat)
 - [RocketChat Skip Install Registration Wizard Fix](https://github.com/RocketChat/Rocket.Chat/issues/31163#issuecomment-1848364117)
 - [RocketChat Skip Install Registration Wizard Fix](https://github.com/RocketChat/Rocket.Chat/issues/31163#issuecomment-1848364117)
 
 
 > So for someone using snap, it means creating a file `/var/snap/rocketchat-server/common/override-setup-wizard.env ` (the name of the file itself could be anything as long as it has an .env extension) and setting its content to `OVERWRITE_SETTING_Show_Setup_Wizard=completed`
 > So for someone using snap, it means creating a file `/var/snap/rocketchat-server/common/override-setup-wizard.env ` (the name of the file itself could be anything as long as it has an .env extension) and setting its content to `OVERWRITE_SETTING_Show_Setup_Wizard=completed`

+ 28 - 29
docs/wekan.wiki/Offline.md

@@ -2,50 +2,30 @@ Also see: [Windows](Windows)
 
 
 [Other CPU/OS On-Premise WeKan install](https://github.com/wekan/wekan/wiki/Raspberry-Pi)
 [Other CPU/OS On-Premise WeKan install](https://github.com/wekan/wekan/wiki/Raspberry-Pi)
 
 
-## Newest Docker WeKan Offline
-
-This works now.
-
-At Internet connected computer, download:
-
-1. Docker for Windows
-2. docker-compose.yml from https://github.com/wekan/wekan
-3. `docker-compose up -d` at Internet connected computer
-4. Save wekan-app and wekan-db containers to files https://docs.docker.com/engine/reference/commandline/save/
-
-At Offline Windows computer:
-
-1. Install Docker for Windows
-2. Load `wekan-app` container from file https://docs.docker.com/engine/reference/commandline/load/
-3. Check what is ID of `wekan-app` container with `docker images`
-4. Change at `docker-compose.yml` wekan-app contaier `image:gc....` to `image:ID` where ID from step 3 above
-5. Do steps 2-4 also for `wekan-db` container
-6. `docker-compose up -d`
-
 ## Wekan Windows 64bit version On-Premise
 ## Wekan Windows 64bit version On-Premise
 
 
-This does not work yet.
+This is without container (without Docker or Snap).
 
 
 Right click and download files 1-4:
 Right click and download files 1-4:
 
 
-1. [wekan-7.18-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.18/wekan-7.18-amd64-windows.zip)
+1. [wekan-7.49-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.49/wekan-7.49-amd64-windows.zip)
 
 
-2. [node-v14.21.4-win-x64.exe](https://github.com/wekan/node-v14-esm/releases/download/v14.21.4/node-v14.21.4-win-x64.exe)
+2. [node.exe](https://nodejs.org/dist/latest-v14.x/win-x64/node.exe)
 
 
-3. [mongodb-windows-x86_64-6.0.11-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.11-signed.msi)
+3. [mongodb-windows-x86_64-6.0.15-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.15-signed.msi)
 
 
 4. [start-wekan.bat](https://raw.githubusercontent.com/wekan/wekan/main/start-wekan.bat)
 4. [start-wekan.bat](https://raw.githubusercontent.com/wekan/wekan/main/start-wekan.bat)
 
 
 5. Copy files from steps 1-4 with USB stick or DVD to offline Windows computer
 5. Copy files from steps 1-4 with USB stick or DVD to offline Windows computer
 
 
-6. Double click `mongodb-windows-x86_64-6.0.11-signed.msi` . In installer, uncheck downloading MongoDB compass.
+6. Double click `mongodb-windows-x86_64-6.0.15-signed.msi` . In installer, uncheck downloading MongoDB compass.
 
 
-7. Unzip `wekan-7.18-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
+7. Unzip `wekan-7.49-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
 
 
 ```
 ```
 bundle (directory)
 bundle (directory)
   |_ start-wekan.bat (downloaded file)
   |_ start-wekan.bat (downloaded file)
-  |_ node-v14.21.4-win-x64.exe (downloaded file)
+  |_ node.exe (downloaded file)
   |_ main.js (extracted file)
   |_ main.js (extracted file)
 ```
 ```
 8. Edit `start-wekan.bat` with Notepad. There add [Windows computer IP address](https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9) , like this, then Wekan will be at http://IP-ADDRESS-HERE/sign-in , for example http://192.168.0.100/sign-in but your different IP address. Add there wekan server computer IP address, not localhost. `node.exe main.js` is at bottom of `start-wekan.bat`, change there longer filename:
 8. Edit `start-wekan.bat` with Notepad. There add [Windows computer IP address](https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9) , like this, then Wekan will be at http://IP-ADDRESS-HERE/sign-in , for example http://192.168.0.100/sign-in but your different IP address. Add there wekan server computer IP address, not localhost. `node.exe main.js` is at bottom of `start-wekan.bat`, change there longer filename:
@@ -54,7 +34,7 @@ SET ROOT_URL=http://IP-ADDRESS-HERE
 
 
 SET PORT=80
 SET PORT=80
 
 
-node-v14.21.4-win-x64.exe main.js
+node.exe main.js
 ```
 ```
 If there is already some webserver at port 80, change to other port:
 If there is already some webserver at port 80, change to other port:
 ```
 ```
@@ -75,6 +55,25 @@ RELATED INFO:
 - Windows 2022 server example https://github.com/wekan/wekan/issues/5084
 - Windows 2022 server example https://github.com/wekan/wekan/issues/5084
 - Other settings example https://github.com/wekan/wekan/issues/4932
 - Other settings example https://github.com/wekan/wekan/issues/4932
 
 
+## Docker WeKan Offline
+
+
+At Internet connected computer, download:
+
+1. Docker for Windows
+2. docker-compose.yml from https://github.com/wekan/wekan
+3. `docker-compose up -d` at Internet connected computer
+4. Save wekan-app and wekan-db containers to files https://docs.docker.com/engine/reference/commandline/save/
+
+At Offline Windows computer:
+
+1. Install Docker for Windows
+2. Load `wekan-app` container from file https://docs.docker.com/engine/reference/commandline/load/
+3. Check what is ID of `wekan-app` container with `docker images`
+4. Change at `docker-compose.yml` wekan-app contaier `image:gc....` to `image:ID` where ID from step 3 above
+5. Do steps 2-4 also for `wekan-db` container
+6. `docker-compose up -d`
+
 ## WeKan Updates
 ## WeKan Updates
 
 
 1. Updating only WeKan. Not updating Node.js and MongoDB.
 1. Updating only WeKan. Not updating Node.js and MongoDB.
@@ -177,4 +176,4 @@ sudo snap set wekan port='80'
 ```
 ```
 
 
 12. Then at local network Wekan is at:
 12. Then at local network Wekan is at:
-http://192.168.0.100
+http://192.168.0.100

+ 68 - 0
docs/wekan.wiki/RocketChat.md

@@ -0,0 +1,68 @@
+Info for Self-Hosted RocketChat Community Server, using RocketChat server Snap from https://snapcraft.io/rocketchat-server
+
+## Install snapd
+
+Linux:
+
+https://snapcraft.io/docs/installing-snapd
+
+Windows:
+
+https://github.com/wekan/hx/tree/main/prototypes/ui/gambas#install-on-windows
+
+## Install RocketChat Snap
+
+```
+sudo snap install rocketchat-server
+```
+
+## Setup siteurl
+
+List current Snap settings:
+```
+sudo snap get rocketchat-server
+```
+Then set your siteurl of your RocketChat server:
+```
+sudo snap set rocketchat-server siteurl='https://chat.yourcompany.com'
+```
+
+## RocketChat Skip Install Registration Wizard Fix
+
+Q:
+
+- [RocketChat Skip Install Registration Wizard Fix](https://github.com/RocketChat/Rocket.Chat/issues/31163#issuecomment-1848364117)
+
+
+A:
+
+For someone using snap, it means creating a file `/var/snap/rocketchat-server/common/override-setup-wizard.env ` (the name of the file itself could be anything as long as it has an .env extension) and setting its content to `OVERWRITE_SETTING_Show_Setup_Wizard=completed`
+ 
+Then, restarting the server by `systemctl restart snap.rocketchat-server.rocketchat-server.service`
+
+If it does not work yet, then reboot.
+
+## Workspace version unsupported
+
+Q:
+
+- [Workspace version unsupported, Self-Host Community Server](https://forums.rocket.chat/t/workspace-version-unsupported-self-host-community-server/19698)
+
+A:
+
+1) Change to newest Snap Stable channel, list at https://snapcraft.io/rocketchat-server dropdown menu
+
+```
+sudo snap refresh rocketchat-server --channel=6.x/stable --amend
+```
+
+2) Register your Self-Managed instance here, so login and mobile app start to work after that:
+
+- https://cloud.rocket.chat/home
+- https://chat.yourcompany.com/admin/subscription
+
+## More RocketChat Snap related info
+
+https://github.com/wekan/wekan/wiki/OAuth2
+
+https://docs.rocket.chat/deploy/deploy-rocket.chat/deploy-with-snaps

+ 1 - 1
docs/wekan.wiki/_Sidebar.md

@@ -6,7 +6,7 @@
 * [Meteor WeKan Roadmap](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license) - board at Wekan demo
 * [Meteor WeKan Roadmap](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license) - board at Wekan demo
 * [Multiverse WeKan Roadmap](https://github.com/wekan/wekan/wiki/WeKan-Multiverse-Roadmap)
 * [Multiverse WeKan Roadmap](https://github.com/wekan/wekan/wiki/WeKan-Multiverse-Roadmap)
 * [Docs/Manual](https://github.com/wekan/wekan/discussions/4522)
 * [Docs/Manual](https://github.com/wekan/wekan/discussions/4522)
-* [Change Language](https://github.com/wekan/wekan/issues/4518#issuecomment-1133763518)
+* [Change Language](Change-Language)
 * [Forgot Password](Forgot-Password)
 * [Forgot Password](Forgot-Password)
 * [About](https://github.com/wekan/wekan/wiki)
 * [About](https://github.com/wekan/wekan/wiki)
 * [Test Edge](Test-Edge)
 * [Test Edge](Test-Edge)

+ 2 - 2
imports/i18n/data/eu.i18n.json

@@ -1246,7 +1246,7 @@
   "show-checklist-at-minicard": "Erakutsi kontrol-zerrenda minitxartelean",
   "show-checklist-at-minicard": "Erakutsi kontrol-zerrenda minitxartelean",
   "show-subtasks-field": "azpi-zereginen eremua bezala",
   "show-subtasks-field": "azpi-zereginen eremua bezala",
   "convert-to-markdown": "Bihurtu markdown-era",
   "convert-to-markdown": "Bihurtu markdown-era",
-  "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments",
+  "import-board-zip": "Gehitu taula JSON fitxategiak dituen .zip fitxategia eta eranskinak dituzten taularen izenen azpidirektorioak",
   "collapse": "Tolestu",
   "collapse": "Tolestu",
-  "uncollapse": "Uncollapse"
+  "uncollapse": "Zabaldu"
 }
 }

+ 2 - 2
imports/i18n/data/fi.i18n.json

@@ -242,8 +242,8 @@
   "cardMembersPopup-title": "Jäsenet",
   "cardMembersPopup-title": "Jäsenet",
   "cardMorePopup-title": "Lisää",
   "cardMorePopup-title": "Lisää",
   "cardTemplatePopup-title": "Luo malli",
   "cardTemplatePopup-title": "Luo malli",
-  "cards": "Kortit",
-  "cards-count": "Kortit",
+  "cards": "Korttia",
+  "cards-count": "Korttia",
   "cards-count-one": "Kortti",
   "cards-count-one": "Kortti",
   "casSignIn": "CAS-kirjautuminen",
   "casSignIn": "CAS-kirjautuminen",
   "cardType-card": "Kortti",
   "cardType-card": "Kortti",

+ 14 - 0
models/boards.js

@@ -640,11 +640,19 @@ Boards.attachSchema(
 Boards.helpers({
 Boards.helpers({
   copy() {
   copy() {
     const oldId = this._id;
     const oldId = this._id;
+    const oldWatchers = this.watchers ? this.watchers.slice() : [];
     delete this._id;
     delete this._id;
     delete this.slug;
     delete this.slug;
     this.title = this.copyTitle();
     this.title = this.copyTitle();
     const _id = Boards.insert(this);
     const _id = Boards.insert(this);
 
 
+    // Temporary remove watchers to disable notifications
+      Boards.update(_id, {
+        $set: {
+          watchers: []
+        },
+    });
+
     // Copy all swimlanes in board
     // Copy all swimlanes in board
     ReactiveCache.getSwimlanes({
     ReactiveCache.getSwimlanes({
       boardId: oldId,
       boardId: oldId,
@@ -695,6 +703,12 @@ Boards.helpers({
       rule.triggerId = triggersMap[rule.triggerId];
       rule.triggerId = triggersMap[rule.triggerId];
       Rules.insert(rule);
       Rules.insert(rule);
     });
     });
+
+    // Re-set Watchers to reenable notification
+    Boards.update(_id, {
+      $set: { watchers: oldWatchers }
+    });
+
     return _id;
     return _id;
   },
   },
   /**
   /**

+ 3 - 2
models/exporter.js

@@ -348,9 +348,10 @@ export class Exporter {
             const dropdownOptions = result.customFields.find(
             const dropdownOptions = result.customFields.find(
               ({ _id }) => _id === field._id,
               ({ _id }) => _id === field._id,
             ).settings.dropdownItems;
             ).settings.dropdownItems;
-            const fieldValue = dropdownOptions.find(
+            const fieldObj = dropdownOptions.find(
               ({ _id }) => _id === field.value,
               ({ _id }) => _id === field.value,
-            ).name;
+            );
+            const fieldValue = (fieldObj && fieldObj.name) || null;
             customFieldValuesToPush[customFieldMap[field._id].position] =
             customFieldValuesToPush[customFieldMap[field._id].position] =
               fieldValue;
               fieldValue;
           } else {
           } else {

+ 1 - 1
package-lock.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wekan",
   "name": "wekan",
-  "version": "v7.45.0",
+  "version": "v7.49.0",
   "lockfileVersion": 1,
   "lockfileVersion": 1,
   "requires": true,
   "requires": true,
   "dependencies": {
   "dependencies": {

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wekan",
   "name": "wekan",
-  "version": "v7.45.0",
+  "version": "v7.49.0",
   "description": "Open-Source kanban",
   "description": "Open-Source kanban",
   "private": true,
   "private": true,
   "repository": {
   "repository": {

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
public/api/wekan.html


+ 1 - 1
public/api/wekan.yml

@@ -1,7 +1,7 @@
 swagger: '2.0'
 swagger: '2.0'
 info:
 info:
   title: Wekan REST API
   title: Wekan REST API
-  version: v7.45
+  version: v7.49
   description: |
   description: |
     The REST API allows you to control and extend Wekan with ease.
     The REST API allows you to control and extend Wekan with ease.
 
 

+ 1 - 3
rebuild-wekan.sh

@@ -1,14 +1,12 @@
 #!/bin/bash
 #!/bin/bash
 
 
 
 
-echo "Recommended for development: Newest Ubuntu or Debian amd64, directly to SSD disk or dual boot, not VM. Works fast."
+echo "Recommended for development: Debian 12 amd64, directly to SSD disk or dual boot, not VM. Works fast."
 echo "Note1: If you use other locale than en_US.UTF-8 , you need to additionally install en_US.UTF-8"
 echo "Note1: If you use other locale than en_US.UTF-8 , you need to additionally install en_US.UTF-8"
 echo "       with 'sudo dpkg-reconfigure locales' , so that MongoDB works correctly."
 echo "       with 'sudo dpkg-reconfigure locales' , so that MongoDB works correctly."
 echo "       You can still use any other locale as your main locale."
 echo "       You can still use any other locale as your main locale."
 echo "Note2: Console output is also logged to ../wekan-log.txt"
 echo "Note2: Console output is also logged to ../wekan-log.txt"
 
 
-#Below script installs newest node 8.x for Debian/Ubuntu/Mint.
-
 function pause(){
 function pause(){
 	read -p "$*"
 	read -p "$*"
 }
 }

+ 1 - 1
releases/build-bundle-win64.bat

@@ -12,7 +12,7 @@ CALL DEL /F /S /Q bundle
 
 
 ECHO 2) Downloading new WeKan.zip
 ECHO 2) Downloading new WeKan.zip
 DEL wekan-%1-amd64.zip
 DEL wekan-%1-amd64.zip
-wget https://releases.wekan.team/wekan-%1-amd64.zip --no-check-certificate
+wget https://github.com/wekan/wekan/releases/download/v%1/wekan-%1-amd64.zip
 
 
 ECHO 3) Unarchiving new WeKan
 ECHO 3) Unarchiving new WeKan
 CALL 7z x wekan-%1-amd64.zip
 CALL 7z x wekan-%1-amd64.zip

+ 3 - 3
releases/release-bundle.sh

@@ -9,8 +9,8 @@ zip -r wekan-$1-amd64.zip bundle
   #scp ~/repos/wekan/releases/build-bundle-arm64.sh a:/home/wekan/
   #scp ~/repos/wekan/releases/build-bundle-arm64.sh a:/home/wekan/
   #scp ~/repos/wekan/releases/build-bundle-s390x.sh s:/home/linux1/
   #scp ~/repos/wekan/releases/build-bundle-s390x.sh s:/home/linux1/
   #scp ~/repos/wekan/releases/build-bundle-ppc64el.sh o:/home/ubuntu/
   #scp ~/repos/wekan/releases/build-bundle-ppc64el.sh o:/home/ubuntu/
-  scp ~/repos/wekan/releases/release-x2.sh x2:/data/websites/
-  scp wekan-$1-amd64.zip x2:/data/websites/releases.wekan.team/
+  scp ~/repos/wekan/releases/release-x2.sh 20i:/data/websites/
+  scp wekan-$1-amd64.zip 20i:/data/websites/releases.wekan.team/
   #scp wekan-$1-amd64.zip a:/home/wekan/
   #scp wekan-$1-amd64.zip a:/home/wekan/
   #scp wekan-$1-amd64.zip s:/home/linux1/
   #scp wekan-$1-amd64.zip s:/home/linux1/
   #scp wekan-$1.zip o:/home/ubuntu/
   #scp wekan-$1.zip o:/home/ubuntu/
@@ -19,4 +19,4 @@ zip -r wekan-$1-amd64.zip bundle
 cd ..
 cd ..
 
 
 #echo "x64 bundle and arm64/s390x build scripts uploaded to x2/a/s."
 #echo "x64 bundle and arm64/s390x build scripts uploaded to x2/a/s."
-echo "x64 bundle and arm64/s390x build scripts uploaded to x2."
+echo "x64 bundle and build script uploaded to 20i."

+ 2 - 2
sandstorm-pkgdef.capnp

@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
     appTitle = (defaultText = "Wekan"),
     appTitle = (defaultText = "Wekan"),
     # The name of the app as it is displayed to the user.
     # The name of the app as it is displayed to the user.
 
 
-    appVersion = 745,
+    appVersion = 749,
     # Increment this for every release.
     # Increment this for every release.
 
 
-    appMarketingVersion = (defaultText = "7.45.0~2024-05-06"),
+    appMarketingVersion = (defaultText = "7.49.0~2024-06-11"),
     # Human-readable presentation of the app version.
     # Human-readable presentation of the app version.
 
 
     minUpgradableAppVersion = 0,
     minUpgradableAppVersion = 0,

+ 5 - 5
snapcraft.yaml

@@ -1,5 +1,5 @@
 name: wekan
 name: wekan
-version: '7.45'
+version: '7.49'
 base: core20
 base: core20
 summary: Open Source kanban
 summary: Open Source kanban
 description: |
 description: |
@@ -65,7 +65,7 @@ apps:
 
 
 parts:
 parts:
     mongodb:
     mongodb:
-        source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.14.tgz
+        source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.15.tgz
         plugin: dump
         plugin: dump
         stage-packages:
         stage-packages:
             - libssl1.1
             - libssl1.1
@@ -170,9 +170,9 @@ parts:
             # Cleanup
             # Cleanup
             mkdir .build
             mkdir .build
             cd .build
             cd .build
-            wget https://github.com/wekan/wekan/releases/download/v7.45/wekan-7.45-amd64.zip
-            unzip wekan-7.45-amd64.zip
-            rm wekan-7.45-amd64.zip
+            wget https://github.com/wekan/wekan/releases/download/v7.49/wekan-7.49-amd64.zip
+            unzip wekan-7.49-amd64.zip
+            rm wekan-7.49-amd64.zip
             cd ..
             cd ..
             ##cd .build/bundle
             ##cd .build/bundle
             ##find . -type d -name '*-garbage*' | xargs rm -rf
             ##find . -type d -name '*-garbage*' | xargs rm -rf

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä